Назад | Перейти на главную страницу

Перебор неизвестного количества пользовательских Ansible Facts

Я написал несколько настраиваемых фактов, на которые я ссылаюсь как на значения для модуля в задаче. Когда у меня есть 1 настраиваемый факт, у меня нет проблем с запуском задачи, но вопрос в том, что мне делать, когда у меня есть неизвестное количество фактов, для которых я хочу запустить задачу для каждого из них? У меня есть следующие факты:

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

Это код моей задачи:

- name: Copy files
  copy:
    src: "/tmp/file1/{{ ansible_local.facts.finance.files.file1.path }}"
    dest: "/ghostcache/{{ ansible_local.facts.finance.files.file1.dest }}/"
    remote_src: yes

Как мне перебрать все элементы в «файлах» и взять оба значения (dest и path) и поместить их в качестве значений в модуль копирования, учитывая, что у меня неизвестное количество элементов в файлах? У меня может быть только 1, то есть file1 или может быть file1 ... fileN.

Спасибо !

Это тот код, который вы ищете?

- hosts: localhost                                                                           
  become: yes                                                                                
  become_method: sudo                                                                        
  become_user: root                                                                          
  vars:                                                                                      
    facts:                                                                                     
      finance:                                                                           
        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: "{{ facts.finance.files }}"                                               

.

ansible-playbook list-dict.yml 
ok: [localhost] => (item=None) => {
"msg": "src: /etc/finance/file1 dest: /tmp/dir1" }
ok: [localhost] => (item=None) => {
"msg": "src: /etc/finance/file2 dest: /tmp/dir2" }