如何查找dict中的字符串是否作为键中包含点的字符串的一部分

时间:2019-08-02 10:22:06

标签: ansible

您好,我想在字典中查找字符串作为键的一部分。(文件列表) 下一步,我必须遍历字符串列表并在字典中进行搜索。

有什么帮助吗?

感谢建议

字典示例:

[
        {
            "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

1 个答案:

答案 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 }}"