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

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

Необходимо зарегистрировать результаты из цикла (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 == ""