如何从ansible_facts中获取“ cifs”安装的“用户名”?

时间:2019-09-09 12:32:47

标签: ansible ansible-facts json-query

我需要获取cifs挂载凭据,我想从ansible_facts中获取用户名,并在从'/ etc / fstab'中获取密码后

但是“ ansible_facts” =>“ Mounted_devices” =>“ options” 给我的不仅仅是凭证:

"rw,relatime,vers=1.0,cache=strict,username=cifsadmin,domain=WORKGROUP,uid=0,noforceuid,gid=0,noforcegid,addr=127.0.0.1,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=65536,echo_interval=60,actimeo=1"

如何从该字符串中获取用户名?

set_fact:
    mounted_devices: "{{ ansible_mounts|json_query('[].options') }}"
    register: mounted_devices

如果我可以获取CIF凭据,则可以将其重新放置到单独的文件中。

1 个答案:

答案 0 :(得分:0)

您可以使用regex_search过滤器根据匹配的模式查找并返回子字符串。要从示例字符串返回用户名:

- set_fact:
    username: "{{ options_string | regex_search('username=([^,]+)', '\\1') | first }}"

但是,在您的问题中,您假设mounted_devices是一个字符串,它不是-它是一个字符串数组。我在这里做一些假设,但是我认为您将需要这样的东西:

  tasks:
    - set_fact:
        mounted_devices: "{{ ansible_mounts|json_query(query) }}"
      vars:
        query: "[?fstype=='cifs'].options"

    - set_fact:
        username: "{{ mounted_devices[0] | regex_search('username=([^,]+)', '\\1') | first }}"

    - debug: var=username

这将从第一个cifs挂载中返回用户名。如果有多个使用不同用户名的用户,则您的剧本将需要其他逻辑。