如何在 Ansible 中循環字典

安德魯·拉姆尼科夫

我在 default/main.yml 中有一個以下字典

servers_as:
  ABxxxxx1:
    - server1-WASN_xcv_02.service
    - server2-WASN_xcv_01.service
    - server2-WASN_xcv_02.service
  CBxxxx2:
    - server1-abcd_02.service
    - server1-abcd_03.service
    - server2-abcd_01.service
    - server2-abcd_02.service
    - server2-abcd_03.service

我試圖用長度輸出每個值,但它只給了我最後一個值。我如何從 0-(servers_as | legnth ) 運行它

- name: check output list
  debug:
    msg:  "{{ item.value[ lookup('dict', servers_as) | length] }}"
  loop:  "{{ lookup('dict', servers_as) }}"
  when:
    - "item.key in inventory_hostname"

預期輸出是啟動服務的每個值的名稱:

- name: Start all services 
 systemd:
   name: "{{ item.value }}.service"
   state: started
 loop:  "{{ lookup('dict', servers_as) }}"
 when:
   - "item.key in inventory_hostname"
弗拉基米爾·博特卡

作為如何迭代列表的提示

    - name: Start all services
      debug:
        msg: "Start {{ item }}"
      loop: "{{ servers_as[inventory_hostname]|d([]) }}"

ok: [ABxxxx1] => (item=server1-WASN_xcv_02.service) => 
  msg: Start server1-WASN_xcv_02.service
ok: [ABxxxx1] => (item=server2-WASN_xcv_01.service) => 
  msg: Start server2-WASN_xcv_01.service
ok: [ABxxxx1] => (item=server2-WASN_xcv_02.service) => 
  msg: Start server2-WASN_xcv_02.service
ok: [CBxxxx2] => (item=server1-abcd_02.service) => 
  msg: Start server1-abcd_02.service
ok: [CBxxxx2] => (item=server1-abcd_03.service) => 
  msg: Start server1-abcd_03.service
ok: [CBxxxx2] => (item=server2-abcd_01.service) => 
  msg: Start server2-abcd_01.service
ok: [CBxxxx2] => (item=server2-abcd_02.service) => 
  msg: Start server2-abcd_02.service
ok: [CBxxxx2] => (item=server2-abcd_03.service) => 
  msg: Start server2-abcd_03.service

如果這是您想要的,請使用systemd而不是debug

    - name: Start all services
      systemd:
        name: "{{ item }}"
        state: started
      loop: "{{ servers_as[inventory_hostname]|d([]) }}"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章