如何根据用户输入启动其他剧本的剧本?

时间:2016-05-17 15:51:00

标签: ansible ansible-playbook

我希望有一个入门手册,比如go.yml - 在此,我希望能够提示用户他们想要对哪些产品执行操作(比如proxy },lb等。)。

有没有办法可以查询用户的输入,然后根据该输入启动playbooks?基本上,我想要以下内容:

- hosts: "prod"
  sudo: yes
  vars_prompt:
    product: "What product do you want to deploy?"
  if product == proxy:
       - include proxy.yml
  if product == lb:
       - include lb.yml
    ...

我对playbooks如何流动不太满意,以及它们与任务/处理程序文件的区别。有可能这样吗?我的目标是避免有十几个不同的剧本文件可供选择,而只是有一个默认的启动类型剧本,可以随时使用。

1 个答案:

答案 0 :(得分:1)

剧本可以包括其他剧本。因此,您可以拥有多个通过单个入口点手册触发的剧本。但在剧本级别上没有条件。所有包含的剧本都将被执行。

你在理论上的角色条件会起作用。正确的语法是:

roles:
  - role: proxy
    when: product == "proxy"
  - role: lb
    when: product == "lb"

但这有点重新发明轮子。要限制应执行哪些角色,通常使用tags(和skip-tags)。

roles:
  - role: proxy
    tags: proxy
  - role: lb
    tags: lb

然后,例如,用--tags "proxy"给你打电话。这也适用于附带的剧本。

在角色上使用vars_prompt和条件的缺点是,在执行playbook时你将获得大量跳过的任务。按标签过滤时,不匹配的角色/任务将不会以跳过状态显示。