【问题标题】:How to sequentially run all the tasks per host in Ansible如何在 Ansible 中按顺序运行每个主机的所有任务
【发布时间】:2020-03-25 23:14:17
【问题描述】:

我正在编写一个 Ansible 剧本,其中有 3 个 tomcat 节点。现在我的脚本做了很多事情,比如将发布从 nexus 复制到应用程序节点、部署它、启动 tomcat 等。

我想要实现的是按顺序执行此操作。例如,剧本应该为一个主机运行,当它完成时,它应该为另一台主机启动。我的库存如下所示,我正在使用 group_vars,因为我有多个环境,例如 prod、preprod 等。

谁能帮忙。

[网络服务器] tomcat1 tomcat2 tomcat3

【问题讨论】:

    标签: ansible ansible-inventory


    【解决方案1】:

    问:“剧本应该为一个主机运行,当它完成时,它应该为另一台主机启动。”

    答:使用serial。例如

    shell> cat playbook.yml
    - hosts: webserver
      gather_facts: false
      serial: 1
      tasks:
        - debug:
            var: inventory_hostname
    
    shell> ansible-playbook playbook.yml
    
    PLAY [webserver] ***
    
    TASK [debug] ***
    ok: [tomcat1] => {
        "inventory_hostname": "tomcat1"
    }
    
    PLAY [webserver] ***
    
    TASK [debug] ***
    ok: [tomcat2] => {
        "inventory_hostname": "tomcat2"
    }
    
    PLAY [webserver] ***
    
    TASK [debug] ***
    ok: [tomcat3] => {
        "inventory_hostname": "tomcat3"
    }
    
    PLAY RECAP ***
    tomcat1: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0   
    tomcat2: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0   
    tomcat3: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
    

    How to build your inventory

    shell> cat hosts
    [webserver]
    tomcat1
    tomcat2
    tomcat3
    

    【讨论】:

    • 感谢弗拉德的回复。这对我来说看起来不错。让我试试看,我会回复这个帖子。如果你能帮忙,我还有一个问题。是否可以通过 Ansible 进行一些验证检查?在我的剧本中,我将版本号作为命令行参数提供,现在我的意思是在使用这个剧本部署一个版本时,比如说 5.50.03,我想确保版本号是正确的。不想将早期版本部署到生产环境。有什么想法吗?
    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多