Ansible 我如何构建我的剧本,使其更有意义?

Ansible 我如何构建我的剧本,使其更有意义?,ansible,ansible-playbook,ansible-2.x,Ansible,Ansible Playbook,Ansible 2.x,目前,我有以下剧本: - hosts: "{{env}}_{{product}}" name: "tools" sudo: yes vars_prompt: product: "Which product would you like to deploy [all|proxy|query|rest]?" env: "Which environment should we deploy to [dev|qa|test|prod]?" roles: - { r

目前,我有以下剧本:

- hosts: "{{env}}_{{product}}"
  name: "tools"
  sudo: yes
  vars_prompt:
    product: "Which product would you like to deploy [all|proxy|query|rest]?"
    env: "Which environment should we deploy to [dev|qa|test|prod]?"
  roles:
    - { role: proxy, when: "product == 'all' or product == 'proxy'" }
    - { role: query, when: "product == 'all' or product == 'query'" }
    - { role: rest, when: "product == 'all' or product == 'rest'" }
我的所有组都存储在一个
/inventory/All
文件中,例如:

# -----------------------------------------------------------------------------------
# --------------
# ###  DEV  ### 
# --------------
# -----------------------------------------------------------------------------------

[dev_all:children]
dev_redis
dev_query
dev_rest
dev_proxy

[dev_redis]
.hosts

[dev_query]
.hosts

[dev_rest]
.hosts

[dev_proxy:children]
dev_proxy-dc1
dev_proxy-dc2
dev_proxy-dc3

[dev_proxy-dc1]
.hosts

[dev_proxy-dc2]
.hosts

[dev_proxy-dc3]
.hosts


# -----------------------------------------------------------------------------------
# --------------
# ###  PROD  ### 
# --------------
# -----------------------------------------------------------------------------------

[prod_all:children]
prod_redis
prod_query
prod_rest
prod_proxy


[prod_redis]
.hosts

[prod_query]
.hosts

[prod_rest]
.hosts

[prod_proxy:children]
prod_proxy-dc1
prod_proxy-dc2
prod_proxy-dc3

[prod_proxy-dc1]
.hosts

[prod_proxy-dc2]
.hosts

[prod_proxy-dc3]
.hosts
我忍不住觉得这太复杂了。我试图避免要求人们传递标签或库存文件。但是现在,我不知道最好的方法是允许部署诸如“代码> ReISIS < /Cord>主机”之类的东西,这不是我们真正认为的“产品”,但仍然需要它自己的组,因为它是托管在它自己的一组主机上的。我可以把它添加到当前列表中,
[all | proxy | query | rest | redis]
,但是。。。似乎应该有一种方法来指定
redis
和另一种
产品
,但同时不需要两者。。。我不知道怎么做

我想让你说点什么

“我想将
proxy
部署到
dev
,让我们一边更新
redis


--这在我当前的设置中是可能的吗?

这不是最好的处理方法

取而代之的是,我会根据具体的角色来构建我的剧本,并且我会同样地设置我的清单,只涵盖特定的环境,而不是所有的东西

如果您想让人们不必传入清单文件或特定的剧本,那么我会将
ansible playbook
命令包装成某种形式的包装脚本

这使得人们可以根据需要更加精确和灵活地使用您的剧本,但仍然可以通过包装器脚本提供相同的预设功能