辞書から選択可能

辞書から選択可能

辞書変数から選択する必要があります。


- name: test 
  hosts: localhost

  vars:
      bum: 0
      alpha:
        - 0
      beta:
        - 0
        - 1
      test_vars: '{% if bum == 1 %}{{ alpha }}{% else %}{{ beta }}{% endif %}'
      servers:
        - 127.0.0.1
        - 127.0.0.2

  tasks:

  - debug:
      msg: "This is {{ item }}"
    loop:
      - "{{ test_vars }}"

  - ping: "{{ {{servers}} [{{ item }}] }}"
    loop:
      - "{{ test_vars }}"


ありがとう

答え1

論理を辞書に入れる

    test_vars:
      1: "{{ alpha }}"
      default: "{{ beta }}"

ループで使用

    - debug:
        msg: "item: {{ item }}"
      loop: "{{ test_vars[bum|int]|
                default(test_vars.default) }}"

テストのための完全なプレイブックの例

shell> cat pb.yml
- hosts: localhost

  vars:

    bum: 0
    alpha: [0]
    beta: [0, 1]
    test_vars:
      1: "{{ alpha }}"
      default: "{{ beta }}"

  tasks:

    - debug:
        msg: "item: {{ item }}"
      loop: "{{ test_vars[bum|int]|
                default(test_vars.default) }}"

基本的にベータ使用

shell> ansible-playbook pb.yml
...
TASK [debug] *********************************************************************************
ok: [localhost] => (item=0) => 
  msg: 'item: 0'
ok: [localhost] => (item=1) => 
  msg: 'item: 1'

次のように既存のキーを設定できます。

shell> ansible-playbook pb.yml -e bum=1
...
TASK [debug] *********************************************************************************
ok: [localhost] => (item=0) => 
  msg: 'item: 0'

関連情報