我们使用salt来引导我们的Web服务器。我们托管多个不同的域名。我在/etc/apache2/sites-available
为每个域创建了一个文件。然后我将其符号链接到sites-enabled
。
问题是,如果我将域移动到其他服务器,则不会删除sites-enabled
中的链接。如果我更改域名并保持数据到位 - 那么我有old.domain.com和new.domain.com vhost文件。我希望最终只能在sites-enabled
中使用new.domain.com,但两个文件都在那里,工作域依赖于字母表(我猜) - 首先加载哪个vhost。
我将域存储在支柱中并生成如下的虚拟主机:
{%- for site in pillar.sites %}
/etc/apache2/sites-available/{{ site.name }}:
file:
- managed
- source: salt://apache/conf/sites/site
- template: jinja
- require:
- file: /etc/apache2/sites-available/default
- cmd: apache_rewrite_enable
- defaults:
site_name: "{{ site.name }}"
/etc/apache2/sites-enabled/{{ site.name }}:
file.symlink:
- target: /etc/apache2/sites-available/{{ site.name }}
- require:
- file: /etc/apache2/sites-available/{{ site.name }}
{% endfor %}
我需要确保只有柱子中列出的虚拟主机才能保留在高位状态之后。我想先把文件夹清空,但这感觉很危险,因为高空可能会在半空中失败而且我会留下任何vhosts - 瘫痪所有其他域 - 只是因为我试图添加一个。
有没有办法强制执行以下操作:“删除此高级运行中不存在的所有内容”?
答案 0 :(得分:1)
是的,问题是Salt没有做任何你没有指定的事情。默认情况下尝试自动管理整个服务器会太困难(而且非常危险)。所以file.managed
和file.symlink
只是确保他们的目标文件和符号链接存在且处于正确状态 - 他们不能担心其他文件。
你有几个选择。第一种是清理每个高位开头的目录。就像你提到的那样,这并不理想,因为它有点危险(如果一个高态失败,你的网站都不会工作)。
更好的选择是将所有的网站放在每个小工具的支柱中:有些会在支柱的“网站”键下,其余的可能会在“禁用”键下柱。然后,您可以使用file.absent
状态来确保每个“已禁用”的站点文件都不存在。 (以及这些文件的符号链接)
然后,当您将域从主机移动到主机,而不是仅仅从前一个小号的支柱中删除该域时,您实际上会将其从“站点”键移动到“禁用”键。然后你就可以保证该网站不见了。
希望有所帮助!