【问题标题】:How to let Ansible to skip run tasks on a host when its already configured?如何让 Ansible 在已经配置的主机上跳过运行任务?
【发布时间】:2016-02-24 03:15:40
【问题描述】:

我们有 2 个手册 Basic-envUpgrade-env 来管理我们的主机。

ansible-playbook Basic-env 正在做基本的环境设置(yum、生成密钥、安全任务)并注册服务。

ansible-playbook Upgrade-env 正在对软件和配置进行无中断升级 (NDU)。

我们将动态将新主机放入清单,并每 10 分钟运行一次Basic-env


问题:是否可以让ansible跳过在旧主机上执行Basic-env中的任务并只在新主机上运行它们?

注意:我们不想为每个新主机单独运行playbook,而是对所有主机每 10 分钟运行一次Basic-env

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    您可以简单地检查主机上的某些内容。假设您的剧本生成文件/foo/bar。然后在你的剧本/角色的开头有一个这样的任务:

    - stat:
        path: /foo/bar
      register: check
    

    然后对于您不想处理的任何任务,您可以应用这样的条件:

    when: not p.stat.exists
    

    另一个(也许更干净)的解决方案是使用local facts。在剧本的最后创建一个文件/etc/ansible/facts.d/setup_complete.fact,内容如下:

    {"setup_complete": "true"}
    

    当 Ansible 下次运行时,ansible_local.setup_complete 的事实将可用。那么你的情况可能看起来像

    when: "setup_complete" not in ansible_local
    

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多