使用Ansible关闭服务

使用Ansible关闭服务,ansible,Ansible,这可能更像是一个设计问题,而不是语法问题。我有一套Ansible剧本,负责设置各种systemd服务,以特定方式配置服务器。我相信这是一个非常典型的用例。但是,我的问题是:在继续安装和配置之前,关闭和禁用服务的最佳方法是什么?以下是我的要求: 应该能够在不运行安装的情况下关闭和禁用一组服务器上的服务 还应能够关闭/禁用,然后继续安装 如果在安装之后运行关机,则应清理所有非专用主机,并选择专用主机组进行安装 例如,假设我有3台服务器:A、B、C,我有2个要安装和配置的服务:httpd和ngin

这可能更像是一个设计问题,而不是语法问题。我有一套Ansible剧本,负责设置各种systemd服务,以特定方式配置服务器。我相信这是一个非常典型的用例。但是,我的问题是:在继续安装和配置之前,关闭和禁用服务的最佳方法是什么?以下是我的要求:

  • 应该能够在不运行安装的情况下关闭和禁用一组服务器上的服务
  • 还应能够关闭/禁用,然后继续安装
  • 如果在安装之后运行关机,则应清理所有非专用主机,并选择专用主机组进行安装
例如,假设我有3台服务器:A、B、C,我有2个要安装和配置的服务:httpd和nginx。我的主机文件如下所示:

[apache]
A
C

[nginx]
B
最终结果应该是httpd在服务器A和C上运行(在B上关闭/禁用),Nginx在B上运行(在A和C上关闭/禁用)

我对可能的解决方案的初步想法是:

  • 为每次卸载创建单独的playbook(因为我已经有了用于安装的playbook)(这可能是正确的,但肯定会有大量代码重复和更多工作)
  • 在现有安装角色的main.yml文件旁边创建一些附加任务(这可能吗?如果可能的话,这感觉是正确的)
  • 主卸载剧本,可在运行任何安装剧本之前直接调用。(这感觉不对)

  • 我的第一个想法是“是的,应该关闭低质量”

    试着从你的处境中删除样板文件,让它更容易理解,也许你会找到答案

    提示:我没有看到任何定义托管服务器的组,我怀疑您是否希望使用“全部”


    关键是使用子组成员身份来确定需要删除或安装的内容。一个playbook就可以做到这一点。

    肮脏的做法是创建两个安装角色,一个用于apache,一个用于nginx,并为每个web服务器多创建两个角色,一个用于启动服务,一个用于停止服务

    创建一个剧本,首先以所有主机为目标并包括安装角色,然后以[apache]为目标设置apache开始和nginx停止角色,最后以[nginx]为目标设置nginx开始和apache停止角色

    这是一个非常系统化的方法来做你想做的事情,但对我来说这似乎很简单