繁体   English   中英

Ansible Jinja2 过滤器 - 过滤数据并从数据创建列表

[英]Ansible Jinja2 Filter - Filter data and create a list from data

我有一本剧本,我想从数据中创建一个列表并传递新创建的列表

这是我的剧本。

剧本.yml

---
- name: Global Objects
  hosts: check_point
  connection: httpapi
  gather_facts: False
  vars_files:
    - 'credentials/my_var.yml'
    - 'credentials/login.yml'

  tasks:
  - name: read-file
    include_vars:
      file: tmp/task.yml

  - name: make-existing-host-a member
    check_point.mgmt.cp_mgmt_group:
      name: gTest1A
      members:
        - "{{ new_list_created }}"
        - "{{ unique_host }}"
      auto_publish_session: true
    loop: "{{ members }}"
    delegate_to: Global
    ignore_errors: yes

这个想法是从我的task.yml创建一个名为new_list_created的列表,并将该列表解析为成员

members: 
 - "{ new_list_created }"

下面是我想应用 Jinja2 过滤器的列表。 它包含我想要过滤的很多东西的列表。

任务.yml

color: black
comments: Comments
domain:
    domain-type: mds
    name: System Data
    uid: a0eebc99-afed-4ef8-bb6d-fedfedfedfed
groups: []
icon: General/group
members:
-   color: black
    comments: FWP - Testing this
    domain:
        domain-type: mds
        name: System Data
        uid: a0eebc99-afed-4ef8-bb6d-fedfedfedfed
    groups:
    - 603dab88-43a2-437a-b59f-0bee45d769c1
    icon: Objects/host
    interfaces: []
    ipv4-address: 10.1.2.3
    meta-info:
        creation-time:
            iso-8601: 2021-04-09T11:31-0400
            posix: 1617982299819
        creator: SVCFWPWorker
        last-modifier: SVCFWPWorker
        last-modify-time:
            iso-8601: 2021-04-23T13:05-0400
            posix: 1619197548306
        lock: unlocked
        validation-state: ok
    name: gTest101
    nat-settings:
        auto-rule: false
    read-only: false
    tags: []
    type: host
    uid: e12b3f3c-8afd-441f-a5e0-75f399605836
-   color: black
    comments: FWP - Applying this
    domain:
        domain-type: mds
        name: System Data
        uid: a0eebc99-afed-4ef8-bb6d-fedfedfedfed
    groups:
    - 603dab88-43a2-437a-b59f-0bee45d769c1
    icon: Objects/host
    interfaces: []
    ipv4-address: 10.1.2.4
    meta-info:
        creation-time:
            iso-8601: 2021-04-09T11:31-0400
            posix: 1617982301463
        creator: SVCFWPWorker
        last-modifier: SVCFWPWorker
        last-modify-time:
            iso-8601: 2021-04-23T13:05-0400
            posix: 1619197554087
        lock: unlocked
        validation-state: ok
    name: gTest102
    nat-settings:
        auto-rule: false
    read-only: false
    tags: []
    type: host
    uid: 6bcfa0a5-da21-4a6e-8bde-3c5f486012e6
meta-info:
    creation-time:
        iso-8601: 2021-04-09T11:31-0400
        posix: 1617982294818
    creator: SVCFWPWorker
    last-modifier: SVCFWPWorker
    last-modify-time:
        iso-8601: 2021-04-09T11:31-0400
        posix: 1617982305162
    lock: unlocked
    validation-state: ok
name: gTest1A
read-only: false
tags: []
type: group
uid: 603dab88-43a2-437a-b59f-0bee45d769c1

我希望创建的新列表new_list_created.yml看起来像这样

list:
-    comments: FWP - Testing this
     ipv4-address: 10.1.2.3
     name: gTest101
-    comments: FWP - Applying this
     ipv4-address: 10.1.2.4
     name: gTest102

这种操作最简单的方法是使用json_query

这将需要 controller(有关更多详细信息,请参见上面的链接):

  • pip install jmespath
  • 如果运行 ansible >= 2.10: ansible-galaxy collection install community.general

请注意,由于ipv4-address包含一个特殊字符(破折号),因此它不是 ansible 中的有效标识符,需要在下面的查询中用双引号引起来(请参阅jmespath规范)。

这是一个演示剧本:

---
- hosts: localhost
  gather_facts: false

  vars:
    # Your original data as a sinble minified json string for legibility
    members: [{"color":"black","comments":"FWP - Testing this","domain":{"domain-type":"mds","name":"System Data","uid":"a0eebc99-afed-4ef8-bb6d-fedfedfedfed"},"groups":["603dab88-43a2-437a-b59f-0bee45d769c1"],"icon":"Objects/host","interfaces":[],"ipv4-address":"10.1.2.3","meta-info":{"creation-time":{"iso-8601":"2021-04-09T11:31-0400","posix":1617982299819},"creator":"SVCFWPWorker","last-modifier":"SVCFWPWorker","last-modify-time":{"iso-8601":"2021-04-23T13:05-0400","posix":1619197548306},"lock":"unlocked","validation-state":"ok"},"name":"gTest101","nat-settings":{"auto-rule":false},"read-only":false,"tags":[],"type":"host","uid":"e12b3f3c-8afd-441f-a5e0-75f399605836"},{"color":"black","comments":"FWP - Applying this","domain":{"domain-type":"mds","name":"System Data","uid":"a0eebc99-afed-4ef8-bb6d-fedfedfedfed"},"groups":["603dab88-43a2-437a-b59f-0bee45d769c1"],"icon":"Objects/host","interfaces":[],"ipv4-address":"10.1.2.4","meta-info":{"creation-time":{"iso-8601":"2021-04-09T11:31-0400","posix":1617982301463},"creator":"SVCFWPWorker","last-modifier":"SVCFWPWorker","last-modify-time":{"iso-8601":"2021-04-23T13:05-0400","posix":1619197554087},"lock":"unlocked","validation-state":"ok"},"name":"gTest102","nat-settings":{"auto-rule":false},"read-only":false,"tags":[],"type":"host","uid":"6bcfa0a5-da21-4a6e-8bde-3c5f486012e6"}]

  tasks:
    - name: Extract only a few keys from list members
      vars:
        reduce_query: >-
          [].{
            comments: comments,
            "ipv4-address": "ipv4-address",
            name: name
          }
        new_list: "{{ members | json_query(reduce_query) }}"
      debug:
        var: new_list

这使:

PLAY [localhost] **************************************************************************************************************************************************************************************************************

TASK [Extract only a few keys from list members] *******************************************************************************************************************************************************************************
ok: [localhost] => {
    "new_list": [
        {
            "comments": "FWP - Testing this",
            "ipv4-address": "10.1.2.3",
            "name": "gTest101"
        },
        {
            "comments": "FWP - Applying this",
            "ipv4-address": "10.1.2.4",
            "name": "gTest102"
        }
    ]
}


PLAY RECAP ********************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM