您好,我想在字典中查找字符串作为键的一部分。(文件列表) 下一步,我必须遍历字符串列表并在字典中进行搜索。
有什么帮助吗?
感谢建议
字典示例:
[
{
"atime": 1564643897.7426093,
"ctime": 1564643891.0105128,
"dev": 64768,
"gid": 3007,
"gr_name": "group",
"inode": 2230336,
"isblk": false,
"ischr": false,
"isdir": false,
"isfifo": false,
"isgid": false,
"islnk": false,
"isreg": true,
"issock": false,
"isuid": false,
"mode": "0644",
"mtime": 1564643891.0105128,
"nlink": 1,
"path": "/home/user/branches/user/roles/manage_users/vars/users/my.user.yml",
"pw_name": "user",
"rgrp": true,
"roth": true,
"rusr": true,
"size": 776,
"uid": 1050,
"wgrp": false,
"woth": false,
"wusr": true,
"xgrp": false,
"xoth": false,
"xusr": false
}...
}
]
}
匹配项应位于关键路径:dict中。 尝试了几件事,但最接近的似乎是
- name: compare lists 1
debug:
msg: "item"
when: "item in users_list.files"
with_items:
- "{{ users }}"
但是我无法得到任何结果 相反,我得到:跳过
期望的消息:
Msg: my.user
答案 0 :(得分:0)
由我自己决定: 诀窍是首先使用json查询创建路径对象列表。 之后,您可以使用它进行比较:
- name: create list of valid users
local_action:
module: find
path: "{{ role_path }}/vars/users"
register: users_list
- name: create list existing users
win_shell: |
try {
# powershell supposed way
$users=Get-LocalUser;echo $users.name
} catch {
#fall back
$users=Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'" | select name;echo $users.name
}
register: users
- set_fact:
found_users: []
- name: compare lists
set_fact:
found_users: "{{ found_users + [item[1]] }}"
when: item[0].find(item[1]) != -1
with_nested:
- "{{ users_list.files|json_query(query) }}"
- "{{ users.stdout_lines}}"
vars:
query: "[*].path"
- debug: msg="{{ found_users }}"