对于ansible来说,优雅的重载是幂等的吗?

时间:2013-11-29 10:13:39

标签: php mysql nginx provisioning ansible

我们现在正在调查Ansible以配置我们的服务器。这是一个默认的nginx,php-fpm& mysql设置。但是,我想知道这些软件包的安装以及如何使playbook在运行服务时具有幂等性。

对于nginx,我们有一个默认nginx.confconf.d/中的一些文件。对于php,我们有php.iniphp-fpm.confpool.d/中的池和conf.d/中的一些ini文件。是否想要覆盖每个ansible playbook call上的所有文件?

如果所有配置都被覆盖,即使服务器负载很重,是否可以执行service nginx reloadservice php5-fpm reload?对于初始安装,reload无法启动服务器,因此我必须先检查状态并根据该状态在startreload之间切换?

如果我寻找带有nginx安装的playbooks,他们经常使用将重启nginx的处理程序。但是,这并不优雅,所以我不喜欢这种方法:

service: name=nginx state=restarted

一般情况下,使用ansible和配置服务器的常见模式如nginx,php-fpm和mysql ,而不强制重启

2 个答案:

答案 0 :(得分:5)

service module can do reloadstate=reloaded

如果服务器上已有相同的版本,则不会上传配置文件。因此,如果在处理程序中使用service: name=nginx state=restarted,则重新加载将不是触发器。

您也可以使用service: name=nginx enable=yes,以便服务在启动时启动(因此无需明确start nginx,如果需要,只需reload

答案 1 :(得分:4)

在#ansible IRC频道上,我得到了一个有效的答案。 apt系统的一般模式是在安装后启动服务。因此,在配置发生变化的情况下,您可以完全省略start,仅忽略reload

然后设置(例如,采用Nginx)

  1. 安装Nginx
  2. 覆盖所有配置文件
  3. 如果在#2中发生了变化,请运行重新加载
  4. 这应该足够了;如果未安装Nginx,则执行步骤1,2和3。安装Nginx并且配置正常时,不会重新加载。如果我们更新配置,步骤#2会导致更改,从而重新加载。

    这应该足以涵盖所有情况。