目前,我有以下剧本:
- 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
我不禁觉得自己过于复杂了。我试图避免要求人们传递标签或库存文件。但是现在我不确定允许部署redis
主机之类的最好的方法,这不是我们认为的“产品”,但仍然需要它自己的组,因为它是托管在它是自己的一组主机。我可以将其添加到当前列表[all|proxy|query|rest|redis]
,但是......似乎应该有一种方法来指定redis
和另一个product
,但同时又不要求两者......我不知道如何。
我想要一些你可以说的话
“我想将
proxy
部署到dev
,然后让我们更新redis
”
- 我目前的设置可以实现吗?
答案 0 :(得分:1)
这并不是处理此问题的最佳方法。
相反,我会单独构建我的剧本以定位特定角色,我同样将我的库存设置为仅涵盖特定环境而非所有内容。
如果你想让人们不必传递清单文件或特定的剧本,那么我将ansible-playbook
命令包裹在某种形式的包装中脚本。
这使得人们可以根据需要更精确地使用您的Playbook,但仍然可以通过您的包装脚本提供相同的预设功能。