[英]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-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.