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

时间:2016-05-18 20:27:35

标签: 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:
    - { 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

- 我目前的设置可以实现吗?

1 个答案:

答案 0 :(得分:1)

这并不是处理此问题的最佳方法。

相反,我会单独构建我的剧本以定位特定角色,我同样将我的库存设置为仅涵盖特定环境而非所有内容。

如果你想让人们不必传递清单文件或特定的剧本,那么我将ansible-playbook命令包裹在某种形式的包装中脚本。

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