【问题标题】:Shutdown services with Ansible使用 Ansible 关闭服务
【发布时间】:2019-11-07 15:32:32
【问题描述】:

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

  • 应该能够在不运行安装的情况下关闭和禁用一组服务器中的服务
  • 还应该能够关闭/禁用然后继续安装
  • 如果我们在关闭后运行安装,则应清理所有非专用主机并选择专用主机组进行安装

例如,假设我有 3 个服务器:A、B、C,我有 2 个服务要安装和配置:httpd 和 nginx。我的主机文件如下所示:

[apache]
A
C

[nginx]
B

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

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

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

【问题讨论】:

    标签: ansible


    【解决方案1】:

    我的第一个想法是“是的,应该因为低质量而关闭”。

    尝试从您的情况中删除样板,使其更易于理解,并且您可能会找到答案。

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

    关键是使用子组成员身份来确定需要删除或安装的内容。一本剧本就可以解决问题。

    【讨论】:

      【解决方案2】:

      这样做的肮脏方法是创建两个安装角色,一个用于 apache,一个用于 nginx,并为每个 Web 服务器再创建两个角色,一个用于启动服务,一个用于停止服务。

      创建一个首先以所有主机为目标并包含安装角色的剧本,然后以 apache-start 和 nginx-stop 角色为目标 [apache],最后以 nginx-start 和 apache-stop 角色为目标 [nginx]。

      这是一种非常系统的方式来做你想做的事,但对我来说这似乎很简单?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        • 2016-01-29
        • 2015-04-22
        • 1970-01-01
        相关资源
        最近更新 更多