首页 > 解决方案 > Ansible 遍历数组并使用过滤器

问题描述

我对 ansible 在以下情况下寻求帮助有点陌生。我正在尝试做的是遍历数组'access_key_ids'并运行 regex_search 过滤器。对于 regex_search 过滤器参数是'item',它是来自 with_items 的变量。它不以这种方式工作,下面是我正在尝试的。

name: Set Fatcs

  block:

   # extract access key ids from get event response

   - set_fact:

      event_response_access_key_ids: "{{event_response_access_key_ids}} + [{{event_response.content | regex_search(item)}}]"

     with_items: "{{access_key_ids}}"

   # check if the response contains access key id for the license

   - set_fact:

      scwx_output: "{{ (event_response_access_key_ids | length > 0 ) | ternary(event_response, 'License Key does not match with available sensors')}}"

  when: event_response.json is undefined

它将 event_response_access_key_ids 设为空。但是当我硬编码一个值而不是“项目”时,它可以工作

谢谢。

标签: ansibleyamljinja2ansible-2.x

解决方案


我一直在测试这个解决方案:

---
- name: Test
  hosts: local
  gather_facts: False

  vars:
    event_response:
      content: "hi1"
    access_key_ids:
     - "1"
     - "h"
     - "3"

  tasks:

    - name: Fact
      set_fact:
        event_response_access_key_ids: "{{ event_response_access_key_ids|default([]) + [ event_response.content | regex_search( item ) ] }}"
      with_items: "{{ access_key_ids }}"

它可以正确获取变量:

    ok: [localhost] => (item=1) => {
    "ansible_facts": {
        "event_response_access_key_ids": [
            "1"
        ]
    }, 
    "changed": false, 
    "item": "1"
}
ok: [localhost] => (item=h) => {
    "ansible_facts": {
        "event_response_access_key_ids": [
            "1", 
            "h"
        ]
    }, 
    "changed": false, 
    "item": "h"
}
ok: [localhost] => (item=3) => {
    "ansible_facts": {
        "event_response_access_key_ids": [
            "1", 
            "h", 
            null
        ]
    }, 
    "changed": false, 
    "item": "3"
}

推荐阅读