2016-05-17 35 views
0

我想有一个初学者手册,说go.yml - 在此,我希望能够提示用户他们想要执行哪些产品动作(例如proxy,lb等)。基于用户输入,我该如何让剧本发起其他剧本?

有没有一种方法可以查询用户的输入,然后根据该输入启动剧本?基本上,我想类似如下:

- 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 
    ... 

我不是很舒服的剧本如何流动,以及他们如何从任务/文件的处理程序不同明显。有这样的可能吗?我的目标是避免有十几个不同的剧本文件可供选择,而只是有一个始终可以使用的默认启动类型剧本。

回答

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和条件的缺点是,执行剧本时会得到大量跳过的任务。按标记过滤时,不匹配的角色/任务将不会显示为跳过状态。