【问题标题】:Ansible multiple hosts for a specific playbook?特定剧本的Ansible多个主机?
【发布时间】:2021-08-16 10:55:14
【问题描述】:

通常在 ansible 中,您总是为特定的剧本定义特定的主机。但是,如果我想为多个主机运行剧本怎么办?

为了更清楚一点:我有以下组:

  • 网络服务器
  • 开发客户

以及以下剧本:

  • 安装主要软件
  • 安装 certbot
  • 安装 nginx
  • 安装 vscode

出于显而易见的原因,肯定 nginx 剧本应该有条目:hosts: Webserversmain software 剧本是什么。这个剧本应该包括两个主机。

最后我想要有许多不同的剧本和组,我唯一想要执行的是:ansible-playbook ~/playbooks/webservers.yml,这会触发:“main software, certbot, nginx...” via include。但是,如果不编辑包含在 webservers.yml 中的每个剧本的主机部分,这将不起作用。

是否可以从包含它的主剧本告诉剧本它应该在主机上运行? 比如:webservers.yml -> hosts -> nginx.yml -> 在webservers.yml中输入的所有客户端上运行?

你们中有人有想法吗?或者这只是 ansible 无法实现的?

问候

【问题讨论】:

    标签: ansible hosts


    【解决方案1】:

    您可以使用include 模块和when 语句使用group_names var,如下所示:

    webservers.yml

    - hosts: all
      tasks:
        - name: Include Main Software playbook
          include: main_software.yml
    
        - name: Include Nginx playbook
          include: nginx.yml
          when: "'webservers' in {{ group_names }}"
    
        - name: Include Vscode playbook
          include: vscode.yml
          when: "'DevClients' in {{ group_names }}"
    

    记住 main_software.ymlnginx.ymlvscode.yml 剧本必须有一个 tasks 列表,而不是 play

    【讨论】:

    • 您好,首先感谢您的回答,但这不能解决我的问题。如果我将在何时执行此操作,请确保将调用主安装手册,但它将针对特定“主机”部分下定义的所有计算机推出。因此,如果我运行ansible-playbook ~/playbooks/webservers.yml,它还将在“开发客户端”组中推出机器。因为他们也在main_software.yml hosts:下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多