Ansible-使用with items遍历数组

Ansible-使用with items遍历数组,ansible,ansible-2.x,ansible-inventory,ansible-facts,ansible-template,Ansible,Ansible 2.x,Ansible Inventory,Ansible Facts,Ansible Template,我有一个简单的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 workin

我有一个简单的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') }}"


您需要将列表输入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的所有列表项,这将使您能够像所寻找的那样深入了解变量结构。您可以将许多其他因素输入到循环中,这些因素可能会引起您的兴趣,您可以在此处找到详细信息


您需要将列表输入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的所有列表项,这将使您能够像所寻找的那样深入了解变量结构。您可以将许多其他因素输入到循环中,这些因素可能会引起您的兴趣,您可以在此处找到详细信息


issues对我来说是一个数组,我需要类似pr_json.json.issues[0].fields.customfield_11756.value pr_json.json.issues[1].fields.customfield_11756.value的内容,这里我需要0和1的迭代,其值在数组中。正常的迭代将如您所说的那样工作,但这并不意味着,如果您需要具体地迭代0和1,那么您可以将它们用作列表,然后迭代它们。我将编辑我的答案以显示这一点。如果未始终定义0和1,则可以在未定义其中一个或另一个的情况下添加额外的when子句。感谢您的更新,但您共享的那一个已经尝试过了,并且针对相同的问题提出了问题:D:D。这不起作用,并引发错误为“致命:[localhost]:失败!=>{“msg”:模板化字符串时出现模板错误:应为标记“:”,获得“}”。字符串:{pr_json.json.issues[{item}].fields.customfield_11756.value}}“非常感谢您的进一步帮助。我对解决方案进行了调整。我认为不需要项目周围额外的一组花括号。试一试,让我知道它是否有效。issues对我来说是一个数组,我需要pr_json.json.issues[0].fields.customfield_11756.value pr_json.json.issues[1].fields.customfield_11756.value这里我需要0和1的迭代,其值在数组中。正常的迭代将如您所说的那样工作,但这并不意味着,如果您需要迭代0和1,那么您可以将它们作为列表,然后迭代。我将编辑我的答案以显示这一点。如果0和1不是始终已定义,然后您可以在其中一个未定义时添加额外的when子句。感谢您的更新,但您共享的那一个已经尝试过了,并且针对相同的问题提出了问题:D:D。这不起作用,并引发错误为-“致命:[localhost]:失败!=>{“msg”:“模板化字符串时出现模板错误:应为标记“:”,获得“}”。字符串:{{pr_json.json.issues[{item}].fields.customfield_11756.value}}”。非常感谢您的进一步帮助。我对解决方案进行了调整。我认为不需要在项目周围额外加上一组花括号。试一试,让我知道它是否有效。