Ansible - итерация по массиву с использованием элементов - PullRequest
1 голос
/ 29 октября 2019

У меня есть простой файл json, где мне нужно извлечь набор значений из КАЖДОГО элемента массива, но во время итерации это не удается.

Моя книга воспроизведения выглядит следующим образом:

code:

---

 - name: direct - this works like charm
   set_fact:
     bb: "{{ pr_json.json.issues[0].fields.customfield_11756.value }}"

 - debug:
     var: bb

 - name: via array - this is not working since iteration is not happening
   set_fact:
     dd_branch: "{{ pr_json.json.issues[{{ item }}].fields.customfield_11756.value }}"
   register: mass

 - debug:
     var: mass

Получение выходных данных в виде:


TASK [jira_update : direct - this works like charm] ********************************************************************************************************************
task path: /home/test/ansible_jira/roles/jira_update/tasks/call.yml:3
ok: [localhost] => {
    "ansible_facts": {
        "bb": "R4.19"
    },
    "changed": false
}

TASK [jira_update : debug] *********************************************************************************************************************************************
task path: /home/test/ansible_jira/roles/jira_update/tasks/call.yml:7
ok: [localhost] => {
    "bb": "R4.19"
}

TASK [jira_update : via array - this is not working since iteratoin is not happening] **********************************************************************************
task path: /home/test/ansible_jira/roles/jira_update/tasks/call.yml:10
fatal: [localhost]: FAILED! => {
    "msg": "template error while templating string: expected token ':', got '}'. String: {{ pr_json.json.issues[{{ item }}].fields.customfield_11756.value }}"
}

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

пробовал это тоже, но можеткто-нибудь, помогите перебрать значения массива, пожалуйста.

 - name: Create PR request in TEMS JIRA
   jira:
     uri: "{{ tems_jira }}"
     username: "{{ user }}"
     password: "{{ pass }}"
     operation: create
     project: PR
     issuetype: 'PR-Form'
     summary: "{{ pr_json.json| json_query('issues[].fields.summary') }}"
     description: "{{ pr_json.json | json_query('issues[].fields.description') }}"
   args:
     fields:
       customfield_10303:
         value: "{{ pr_json.json | json_query('issues[].fields.customfield_11756.value') }}"

1 Ответ

0 голосов
/ 29 октября 2019

Вам нужно передать свой список в итератор with_items. Это то, что устанавливает переменную item для циклических целей.

- name: via array - this is not working since iteration is not happening
  set_fact:
    dd_branch: "{{ pr_json.json.issues[ item ].fields.customfield_11756.value }}"
  register: mass
  with_items:
    - 0
    - 1

Это будет перебирать все элементы списка pr_json.json.issues, что позволит вам глубже погрузиться в структуру переменной, как вы ищете. Есть много других факторов, которые вы можете включить в цикл, которые могут вас заинтересовать, которые вы можете найти здесь.

https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html

...