Ansible 确定一出戏的主持人

Ansible 确定一出戏的主持人,ansible,ansible-inventory,Ansible,Ansible Inventory,我在不同的服务器上运行多个不同的应用程序,例如 app-1在devserver-1和devserver-2 app-2在devserver-3和devserver-4 app-3在devserver-1上运行(以独立模式) 在我的dev-intentory文件中,我列出了所有4台devserver 现在我想写一个参数化的剧本,当我提供一个app_name变量时,它“知道”它必须在哪些主机上运行 目前,我有一个var文件,其中包含以下内容: # vars/apps.yml apps: ap

我在不同的服务器上运行多个不同的应用程序,例如

  • app-1
    devserver-1
    devserver-2
  • app-2
    devserver-3
    devserver-4
  • app-3
    devserver-1
    上运行(以独立模式)
在我的
dev
-intentory文件中,我列出了所有4台devserver

现在我想写一个参数化的剧本,当我提供一个app_name变量时,它“知道”它必须在哪些主机上运行

目前,我有一个var文件,其中包含以下内容:

# vars/apps.yml
apps:
  app-1:
    servers:
      dev:
      - devserver-1
      - devserver-2
# playbook.yml
vars_files:
  - vars/apps.yml
hosts: "{{ apps[app_name].servers[stage] | join(',') }}"
[app-1]
devserver-1
devserver-2
[app-2]
devserver-3
devserver-4
[app-3]
devserver-1
还有这样的剧本:

# vars/apps.yml
apps:
  app-1:
    servers:
      dev:
      - devserver-1
      - devserver-2
# playbook.yml
vars_files:
  - vars/apps.yml
hosts: "{{ apps[app_name].servers[stage] | join(',') }}"
[app-1]
devserver-1
devserver-2
[app-2]
devserver-3
devserver-4
[app-3]
devserver-1
但是由于各种原因,我对这种配置不满意,希望避免使用
vars\u文件
(并改用角色/
包含变量


因此,我如何确定playbook(在多个应用程序之间共享)的主机而不使用
vars_文件

将它们分组到主机文件中,如下所示:

# vars/apps.yml
apps:
  app-1:
    servers:
      dev:
      - devserver-1
      - devserver-2
# playbook.yml
vars_files:
  - vars/apps.yml
hosts: "{{ apps[app_name].servers[stage] | join(',') }}"
[app-1]
devserver-1
devserver-2
[app-2]
devserver-3
devserver-4
[app-3]
devserver-1
然后让您的剧本使用
hosts
行中的变量:

- hosts: "{{ app_name }}"

(老实说,我不记得你是否可以在群名中加入
-
。试试看。)

好建议。我对它不是100%满意,因为它会产生巨大的库存文件(因为我有超过50个应用程序),但我会尝试一下。好吧,你可以用一些.fact文件填充每个主机的/etc/ansible/facts.d,这些文件会告诉剧本的内容。