Как правильно редактировать / удалять элементы из Ansible dict / variable? - PullRequest
0 голосов
/ 17 января 2019

Итак, у меня есть переменная, давайте назовем ее «значением», и, как вы знаете, она состоит из следующего:

 "delta": "0:00:00.021861",
    "end": "2019-01-17 10:16:50.303568",
    "failed": false,
    "rc": 0,
    "start": "2019-01-17 10:16:50.281707",
    "stderr": "",
    "stderr_lines": [],
    "stdout": A, B, C, D, E, F, G"
    "stdout_lines": A, B, C, D, E, F, G"

Теперь мне нужно было отредактировать эту переменную, поэтому я запустил цикл with_items следующим образом:

- set_fact:
    new_value: "{{ new_value | default([]) | union([item])}}"
    when: ...if letter is a vowel...
  with_items: "{{ value.stdout_lines }}"

Тогда я делаю:

- set_fact:
    value: new_value

Проблема в том, что теперь это уже не тот тип объектов, что был раньше, это просто старый список, потому что я перебрал '.stdout_lines'

Есть ли способ исправить это так, чтобы 'new_value' также содержало всю предыдущую информацию, такую ​​как: "delta", "end", "stderr" и т. Д.?

1 Ответ

0 голосов
/ 17 января 2019

Вы не можете редактировать существующий факт, но вы можете установить новый факт, измененный как хотите.

---
- hosts: localhost
  gather_facts: no
  tasks:
    - set_fact:
        value:
           delta: '0:00:00.021861'
           end: '2019-01-17 10:16:50.303568'
           start: '2019-01-17 10:16:50.281707'
           stdout_lines: ['A', 'B', 'C', 'D', 'E', 'F', 'G']

    - set_fact:
        new_value: "{{ value.stdout_lines | select('match', '[AE]') | list }}"

    - set_fact:
        value: "{{ value | combine({'stdout_lines': new_value}) }}"

    - debug:
        msg: "{{ value }}"

Здесь мы используем фильтр combine, чтобы перезаписать часть исходного словаря новым значением.

...