사용자 정의 사실에 대한 Ansible 루프

사용자 정의 사실에 대한 Ansible 루프

Custom Facts에는 다음과 같은 구조가 있습니다.

{  
   "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 }}"

제 질문은 이 구조를 고려할 때 저는 항상 금융에 대해 반복하고 있다는 것입니다. 항목 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

$ 고양이 inner.yml

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

관련 정보