Необходимо зарегистрировать результаты из цикла (task #1
) и проверьте, когда command.results
stderr
не пусто (task #2
) относительно элементов цикла, поэтому я могу использовать это условие в новых задачах.
Проблема в том, что:
when
состояние от task #2
не работает, потому что я не могу понять, как делить command.results
относительно элементов цикла.
Есть ли решение, которое можно обойти?
---
- name: "CHECK IF EXIST OPENVZ CONTAINER"
hosts: "projectname-OPENVZHOSTS"
gather_facts: yes
remote_user: root
vars:
openvz_check: "yes"
openvz_instances:
opwnvz_instance_1:
vmid: "119"
opwnvz_instance_2:
vmid: "118"
tasks:
- name: "Ping my hosts"
ping:
- name: "1. Register exist containers"
shell: echo $(vzlist -a {{ item.value.vmid }})
register: command
when: openvz_check == "yes"
loop: "{{ lookup('dict', openvz_instances) }}"
ignore_errors: yes
- name: "2. Create variable from command"
debug: msg="{{ command.results | map(attribute='stderr_lines') | list }}"
when:
- openvz_check == "yes"
- command.results | map(attribute='stderr') | list != ""
loop: "{{ lookup('dict', openvz_instances) }}"
ignore_errors: yes
- debug: msg="{{ command.results | map(attribute='stderr_lines') |list }}"
Отладка command.results | map(attribute='stderr') | list
:
ok: [projectname-OPENVZHOST-S1] => {
"msg": [
[],
[]
]
}
Пожалуйста, получите совет или решение, как видите. Или то, что мне нужно исследовать.
С уважением
PS: есть идея создать папку, а затем проверить, существует ли она или нет, но понятия не имею, как связать dict с результатами
Вы хотите использовать длина фильтр.
- command.results | map(attribute='stderr') | list | length != 0
Или, что еще лучше, просто войдите в stderr напрямую.
- command.stderr != ""
Полная инструкция, которую я использовал, находится здесь:
---
- name: test playbook
hosts: all
vars:
my_list_var: []
tasks:
- name: debug
debug:
msg: "list is empty"
when:
- my_list_var | list | length == 0
- name: ls command
command: "ls -l /tmp"
register: result
- name: debug 2
debug:
msg: "no errors"
when: result.stderr == ""