1

我们使用 salt 来引导我们的 Web 服务器。我们托管多个不同的域。/etc/apache2/sites-available我为我们的每个域创建一个文件。然后我将它符号链接到sites-enabled.

问题是,如果我将域移动到不同的服务器,sites-enabled则不会删除来自的链接。如果我更改域名并将数据保留在原位 - 那么我就有 old.domain.com 和 new.domain.com 虚拟主机文件。我希望最终只有 new.domain.com in sites-enabled,但是两个文件都在那里,并且工作域取决于字母表(我猜)-首先加载哪个虚拟主机。

我将域存储在支柱中并生成虚拟主机,例如:

{%- 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 %}

我需要确保只有在柱子中列出的虚拟主机才能在高状态之后保留。我考虑过先清空文件夹,但这感觉很危险,因为 highstate 可能会在半空中失败,我将失去任何虚拟主机 - 破坏所有其他域 - 只是因为我试图添加一个。

有没有办法强制执行类似:“删除此高状态运行中不存在的所有内容”?

4

1 回答 1

1

是的,问题是 Salt 不会做任何你没有指定的事情。默认情况下尝试自动管理整个服务器太难(而且非常危险)。因此file.managedfile.symlink只需确保他们的目标文件和符号链接存在并且处于正确的状态 - 他们不能担心其他文件。

你有几个选择。首先是在每个 highstate 开始时清理目录。就像您提到的那样,这并不理想,因为它有点危险(如果高状态失败,您的任何站点都将无法运行)。

更好的选择是将所有站点放在每个 minion 的柱子中:一些会放在柱子中的“站点”键下,其余的可能会放在柱子中的“禁用”键下。然后,您可以使用该file.absent状态来确保每个“已禁用”站点文件都不存在。(以及这些文件的符号链接)

然后,当您将域从主机移动到主机时,而不是仅仅从前一个 minion 的支柱中删除该域,您实际上会将其从“站点”键移动到“禁用”键。那么你就可以保证那个网站会消失。

希望有帮助!

于 2013-08-14T16:43:44.850 回答