【问题标题】:How to get an "username" for "cifs" mounts from ansible_facts?如何从 ansible_facts 获取“cifs”挂载的“用户名”?
【发布时间】:2019-09-09 12:32:47
【问题描述】:

我需要获取 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 凭据,我将能够将它们重新定位到单独的文件中。

【问题讨论】:

    标签: ansible ansible-facts json-query


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-28
      • 2011-12-28
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多