Задать вопрос
gremlintv2
@gremlintv2

ANSIBLE Как соотносить элементы словаря и результаты задачи в цикле?

(Код и дебаг под спойлером)
Необходимо зарегистрировать результаты из цикла (task № 1) и проверить, не является лиcommand.resultsstderr пустым (task № 2) относительно элементов цикла loop: "{{ lookup('dict', openvz_instances) }}", чтобы я мог использовать это условие в новых задачах.

Проблема в том, что:
when условие из task № 2 не работает, потому что я не могу понять, как разделить command.results относительно элементов словаря.

Есть ли решение, чтобы обойти данную задачу?
PLAYBOOK
---
- 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:
DEBUG
ok: [projectname-OPENVZHOST-S1] => {
    "msg": [
        [], 
        []
    ]
}

Прошу помочь советом или решением как вы его видите.
PS: есть идея создать папку, а затем проверить, существует она или нет, но не знаю, как соотносить ее существование с items из словаря.
  • Вопрос задан
  • 569 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Logout_90
- command.results | map(attribute='stderr') | list != ""

Вот этот кондишн вроде не совсем правильно указан
Поскольку лист, то проверять надо
- command.results | map(attribute='stderr') | list != []
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы