首页 > 解决方案 > 根据ansible中的项目属性在循环中运行不同的命令

问题描述

在这里,我遇到了一个问题,我需要根据项目列表运行命令,例如以下代码:

- name: Task command
  command: "command1 keyword1 --param1 {{ item.attribute1 }}" 
  with_items:
    - "{{ list_of_items }}"

但是现在,我需要更新 playbook 以添加更多功能,例如 when item.attribute1 == 'a',仍然运行上面的命令,否则,命令应该是这样的

command: "command1 keyword2 --param2 {{ item.attribute1 }}"  # completely different from the above command!

有没有一种方法可以支持这种在使用循环时支持运行不同命令的语法?

感谢任何形式的帮助。

标签: ansible

解决方案


这是你要找的吗?

- hosts: localhost
  vars:
    commands:
      a: 'command1 keyword1 --param1'
      b: 'command1 keyword2 --param2'
      c: 'command1 keyword3 --param3'
  tasks:
    - debug:
        msg: "{{ commands[item.attribute1] + ' ' + item.attribute1 }}"
      loop:
        - {attribute1: 'a'}
        - {attribute1: 'b'}
        - {attribute1: 'c'}

"msg": "command1 keyword1 --param1 a"
"msg": "command1 keyword2 --param2 b"
"msg": "command1 keyword3 --param3 c"

推荐阅读