Как извлечь значения из вывода ansible, используя with_items / loops - PullRequest
0 голосов
/ 11 февраля 2020

Попытка использовать следующие строки кодов

- name: reconstruct the path to test
    set_fact: 
      folder_check: "{{ item | join('\\\\') }}"
      # | regex_replace('\\\\', ',') 
    with_items:
      - "{{ path_list }}"
    ignore_errors: yes  
    register: output

Когда я выполняю эту часть кода, я получаю вывод ниже для задачи SET_FACT, а не вывод Зарегистрированного вывода var.

ok: [shancamw2k12.iafdomain.local] => (item=[u'C:', u'temp', u'temp1']) => {"ansible_facts": {"folder_check": "C:\\\\temp\\\\temp1"}, "changed": false, "item": ["C:", "temp", "temp1"]}
ok: [shancamw2k12.iafdomain.local] => (item=[u'C:', u'temp']) => {"ansible_facts": {"folder_check": "C:\\\\temp"}, "changed": false, "item": ["C:", "temp"]}
ok: [shancamw2k12.iafdomain.local] => (item=[u'C:']) => {"ansible_facts": {"folder_check": "C:"}, "changed": false, "item": ["C:"]}.

Из этой строки я должен просто извлечь "folder_check": "C:\\\\temp\\\\temp1" ; "C:\\\\temp" and C:\\.

1 Ответ

0 голосов
/ 11 февраля 2020

Итак, я предполагаю несколько вещей, основанных на содержании и формате вашего вопроса.

  1. Список, предоставляемый для задачи построения переменной, будет в нужном вам порядке и не нуждается в сортировке.
  2. Вы всегда будете использовать все из них
  3. То, что вы делаете это, потому что количество элементов (и их содержимое), подаваемых в задачу set_fact, не будет составлять c
  4. Количество конечных слешей C отличается в зависимости от если оно само по себе или если оно сопровождается другими частями пути.

Кроме того, поскольку вы устанавливаете факт, вам не нужно сохранять его в регистре, если вам не нужны другие метаданные о создании переменной, отличной от ее вывода.

- name: Build Variable
  hosts:
    - all
  gather_facts: no
  vars:
    - path_list:
        - "C:"
        - "temp"
        - "temp1"
  tasks:
    - set_fact:
        temp_var: "{{ temp_var|default([]) + [ item + ('//' if my_idx == 0 else '' if my_idx == path_list|length - 1 else '////') ] }}"
      loop: "{{ path_list }}"
      loop_control:
        index_var: my_idx

    - set_fact:
        folder_check: "{{ folder_check|default([]) + [ item if my_idx|int-1 < 0 else folder_check[my_idx|int-1] + '//' + item if my_idx|int-1 == 0 else folder_check[my_idx|int-1] + item  ] }}"
      loop: "{{ temp_var }}"
      loop_control:
        index_var: my_idx

    - debug: var=folder_check

Что даст вам следующий вывод:

PLAY [Build Variable] ********************************************************************************************************

TASK [set_fact] **************************************************************************************************************
ok: [host1] => (item=C:) => {"ansible_facts": {"temp_var": ["C://"]}, "changed": false, "item": "C:", "my_idx": 0}
ok: [host1] => (item=temp) => {"ansible_facts": {"temp_var": ["C://", "temp////"]}, "changed": false, "item": "temp", "my_idx": 1}
ok: [host1] => (item=temp1) => {"ansible_facts": {"temp_var": ["C://", "temp////", "temp1"]}, "changed": false, "item": "temp1", "my_idx": 2}

TASK [set_fact] **************************************************************************************************************
ok: [host1] => (item=C://) => {"ansible_facts": {"folder_check": ["C://"]}, "changed": false, "item": "C://", "my_idx": 0}
ok: [host1] => (item=temp////) => {"ansible_facts": {"folder_check": ["C://", "C:////temp////"]}, "changed": false, "item": "temp////", "my_idx": 1}
ok: [host1] => (item=temp1) => {"ansible_facts": {"folder_check": ["C://", "C:////temp////", "C:////temp////temp1"]}, "changed": false, "item": "temp1", "my_idx": 2}

TASK [debug] *****************************************************************************************************************
ok: [host1] => {
    "folder_check": [
        "C://",
        "C:////temp////",
        "C:////temp////temp1"
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...