【发布时间】:2021-01-14 14:10:13
【问题描述】:
我的数据结构如下所示。
我的目标是获取属于group_1 组的用户列表。这就是我能够做到的(如示例中所示)。
但另外,我想摆脱User_1 中的group_2。而我做不到。
下面的 ansible playbook 及其结果:
- hosts: localhost
vars:
search_name: "group_1"
users:
- user_name: "User_1"
email: "user1@mail.com"
login: "user.1"
groups:
- name: group_1
servers:
- server:
name: 'SERVER-01'
ip: '192.168.x.x'
port: 5656
- server:
name: 'SERVER-02'
ip: '192.168.x.x'
port: 5656
- name: group_2
servers:
- server:
name: 'SERVER-03'
ip: '192.168.x.x'
port: 5656
- server:
name: 'SERVER-01'
ip: '192.168.x.x'
port: 5656
- server:
name: 'SERVER-02'
ip: '192.168.x.x'
port: 5656
- user_name: "User_2"
email: "user2@mail.com"
login: "user.2"
groups:
- name: group_1
servers:
- server:
name: 'SERVER-01'
ip: '192.168.x.x'
port: 5656
- server:
name: 'SERVER-02'
ip: '192.168.x.x'
port: 5656
- user_name: "User_3"
email: "user3@mail.com"
login: "user.3"
groups:
- name: group_3
servers:
- server:
name: 'SERVER-03'
ip: '192.168.x.x'
port: 5656
tasks:
- name: Initialize an empty list for servers
set_fact:
filtered_users: []
- name: Filter users by group name
set_fact:
filtered_users: "{{ users | json_query(query) }}"
vars:
query: "[? groups[? name==`group_1`]] | []"
- name: Display users
debug:
msg: "{{ filtered_users }}"
结果
{
"email": "user1@mail.com",
"groups": [
{
"name": "group_1",
"servers": [
{
"server": {
"ip": "192.168.x.x",
"name": "SERVER-01",
"port": 5656
}
},
{
"server": {
"ip": "192.168.x.x",
"name": "SERVER-02",
"port": 5656
}
}
]
},
{
"name": "group_2",
"servers": [
{
"server": {
"ip": "192.168.x.x",
"name": "SERVER-03",
"port": 5656
}
},
{
"server": {
"ip": "192.168.x.x",
"name": "SERVER-01",
"port": 5656
}
},
{
"server": {
"ip": "192.168.x.x",
"name": "SERVER-02",
"port": 5656
}
}
]
}
],
"login": "user.1",
"user_name": "User_1"
},
{
"email": "user2@mail.com",
"groups": [
{
"name": "group_1",
"servers": [
{
"server": {
"ip": "192.168.x.x",
"name": "SERVER-01",
"port": 5656
}
},
{
"server": {
"ip": "192.168.x.x",
"name": "SERVER-02",
"port": 5656
}
}
]
}
],
"login": "user.2",
"user_name": "User_2"
}
]
如何做到这一点?
【问题讨论】: