0

我需要获取 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

如果我可以获得 cifs 凭据,我将能够将它们重新定位到单独的文件中。

4

1 回答 1

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 挂载返回用户名。如果有多个不同的用户名,您将需要在剧本中添加额外的逻辑。

于 2019-09-10T04:19:31.077 回答