如何在 Ansible 中的 2 个输入变量之间进行选择

How to choose between 2 input variables in Ansible

我有一个示例作业模板,它使用调查为 3 个变量提供用户输入。变量selection采用下拉列表格式,方便用户轻松制作selection。我在 tower_webhook_payload 中使用 dohost 来限制用于 运行 剧本的主机。

#job template A calling playbook A    
- name: intl_dosomething
      hosts: "{{ tower_webhook_payload.dohost }}"
      remote_user: user00
      max_fail_percentage: 1
      serial: 1
      tasks:
        - name: intl_dosomething
          script: ../script/dosomething.sh {{ region }} {{ country }} {{ state }}
        - name: intl_doanotherthing
          script: ../script/doanotherthing.sh {{ state }}

#EXTRA VARIABLES
region: Asia
country: India
state: Mumbai
tower_webhook_payload:
  dohost: public_access_vms_*

但是,我现在有一个新的要求,即通过 webhook 执行相同的操作,以便更轻松地进行批处理,因此我使用 webhook 创建了另一个作业模板。

#job template B calling playbook B    
- name: intl_dosomething
      hosts: "{{ tower_webhook_payload.dohost }}"
      remote_user: user00
      max_fail_percentage: 1
      serial: 1
      tasks:
        - name: intl_dosomething
          script: ../script/dosomething.sh {{ tower_webhook_payload.region }} {{ tower_webhook_payload.country }} {{ tower_webhook_payload.state }}
        - name: intl_doanotherthing
          script: ../script/doanotherthing.sh {{ tower_webhook_payload.state }}

#EXTRA VARIABLES
tower_webhook_payload:
  region: Asia
  country: India
  state: Mumbai
  dohost: public_access_vms_*

如果作业来自 webhook,我是否可以合并 2 个作业 templates/playbooks 使用模板 B,如果来自用户输入则使用模板 A?

或者有没有办法根据是否定义了tower_webhook_payload.region来select?

当未定义 webhook 键时,使用 default() 过滤器回退到默认变量名。

        - name: intl_dosomething
          script: ../script/dosomething.sh {{ tower_webhook_payload.region | default(region) }} {{ tower_webhook_payload.country | default(country) }} {{ tower_webhook_payload.state | default(state) }}
        - name: intl_doanotherthing
          script: ../script/doanotherthing.sh {{ tower_webhook_payload.state | default(state) }}