Я написал несколько настраиваемых фактов, на которые я ссылаюсь как на значения для модуля в задаче. Когда у меня есть 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" }