我需要获取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凭据,则可以将其重新放置到单独的文件中。
答案 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挂载中返回用户名。如果有多个使用不同用户名的用户,则您的剧本将需要其他逻辑。