Ansible によるカスタム ファクトのループ

Ansible によるカスタム ファクトのループ

カスタムファクトには次の構造があります。

{  
   "ansible_local":{  
      "finance":{  
         "facts":{  
            "files":{  
               "file1":{  
                  "dest":"/tmp/dir1",
                  "path":"/etc/finance/file1"
               },
               "file2":{  
                  "dest":"/tmp/dir2",
                  "path":"/etc/finance/file2"
               }
            }
         }
      },
      "marketing":{  
         "facts":{  
            "files":{  
               "file1":{  
                  "dest":"/tmp/dir1",
                  "path":"/etc/finance/file1"
               },
               "file2":{  
                  "dest":"/tmp/dir2",
                  "path":"/etc/finance/file2"
               }
            }
         }
      }
   }
}

アイテムを反復処理するタスクも同様です:

 tasks:                                                                                     
    - debug:                                                                                 
        msg: "src: {{ item.value.path}} dest: {{ item.value.dest }}"                         
       with_dict: "{{ ansible_local.finance.facts.files }}"

私の質問は、この構造を考えると、常に finance を反復処理しているということです。このレベルで finance と marketing を反復処理し、さらに、名前がわからないと仮定すると、items undes ファイルで行ったのと同じように、より多くの項目を反復処理したい場合はどうなりますか。

助けてくれて本当にありがとう。

答え1

JMESPath クエリを使用できます:

- debug:
    msg: "src: {{ item.path }} dest: {{ item.dest }}"
  loop: "{{ ansible_local | json_query('[*.facts.files.*]') | flatten }}"

答え2

オプションとしては、include_tasksをループさせる方法があります。

- include_tasks: inner.yml
  loop: "{{ lookup('dict',ansible_local) }}"
  loop_control:
    loop_var: outer_item

$ 猫インナー.yml

- debug:
    msg: "dest: {{ item.value.dest }} path: {{ item.value.path }}"
  with_dict: "{{ outer_item.value.facts.files }}"

関連情報