У меня есть файл переменной, в котором есть несколько переменных "name" & "path", перечисленных под IP-адресом, как показано ниже.
10.0.0.12
- name: exe_folder
path: /tmp/exe
- name: log_folder
path: /tmp/log
- name: src_folder
path: /tmp/src
10.0.0.13
- name: test_folder
path: /tmp/exe1
- name: out_folder
path: /tmp/log1
- name: com_folder
path: /tmp/src1
etc ....
Я могу l oop на имени и пути успешно в моем playbook, как показано ниже.
- name: Load repository
include_vars:
file="{{ playbook_dir }}/vars/list.yml"
name=user1
- debug:
msg: "{{ item.name + ':' + item.path }}"
loop: "{{ user1[inventory_hostname] }}"
- set_fact:
allinonecmd: "{{ allinonecmd | default('') + 'ls -ltr ' + item.path + ' '}}"
loop: "{{ user1[inventory_hostname] }}"
Мое требование - иметь новую переменную "mycode" под каждым IP-адресом, однако просто упомянуть об этом, и я должен быть в состоянии напечатать ее в l oop как выше playbook делает.
Таким образом мне нужно, чтобы мой переменный файл указывал mycode один раз для каждого IP. Я не уверен, какие изменения мне нужно внести в мой файл переменных и книгу воспроизведения, чтобы удовлетворить это требование.
10.0.0.12
- name: exe_folder
path: /tmp/exe
mycode: "56.12"
- name: log_folder
path: /tmp/log
- name: src_folder
path: /tmp/src
10.0.0.13
- name: test_folder
path: /tmp/exe1
mycode: "76.88"
- name: out_folder
path: /tmp/log1
- name: com_folder
path: /tmp/src1
etc ....
Сбой в программе воспроизведения после того, как я внесу вышеуказанные изменения и попытаюсь напечатать переменную mycode.
- debug:
msg: "{{ item.name + ':' + item.path + item.mycode }}"
loop: "{{ user1[inventory_hostname] }}"
Вывод ошибки:
fatal: [10.0.0.12]: FAILED! => {
"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'mycode'
Примечание: я не могу sh указывать mycode несколько раз под IP, так как это выглядит как грязное решение.