我目前正在构建一个剧本来测试是否存在一些 conf 文件,然后检查内容。文件如下
- /etc/resolv.conf - 然后检查名称服务器是否配置正确
- /etc/systemd/timesyncd.conf - 检查是否已配置某些内容
- /etc/ntp.conf - 还要检查是否已配置某些内容
.yml 代码如下,您可以看到每次检查的任务都是相同的,如果需要,只需重新配置文件路径和正则表达式部分。
tasks:
# RESOLV.CONF
- name: Check if resolv.conf exist
stat:
path: /etc/resolv.conf
register: resolv_conf
- name: Retrieve nameservers
debug:
msg: "{{ contents }}"
vars:
contents: "{{ lookup('file', '/etc/resolv.conf') | regex_findall('\\s*nameserver\\s*(.*)') }}"
when: resolv_conf.stat.exists == True
# NTP.CONF
- name: check if ntp.conf exists
stat:
path: /etc/ntp.conf
register: ntp_conf
- name: retrieve ntp conf server content
debug:
msg: "{{ contents }}"
vars:
contents: "{{ lookup('file', '/etc/ntp.conf') | regex_search('^server.*') }}"
when: ntp_conf.stat.exists == True
# TIMESYNC.CONF
- name: check if timesyncd
stat:
path: /etc/systemd/timesyncd.conf
register: timesyncd_conf
- name: Affiche le contenu de timesyncd.conf s'il est configure
debug:
msg: "{{ contents }}"
vars:
contents: "{{ lookup('file', '/etc/systemd/timesyncd.conf') | regex_search('^NTP=.*') }}"
when: timesyncd_conf.stat.exists == True
除了关于 NTP.CONF 检查失败并显示以下内容的任务外,这些任务运行良好:
vendredi 07 octobre 2022 08:28:07 +0200 (0:00:00.509) 0:00:05.115 ******
[WARNING]: Unable to find '/etc/ntp.conf' in expected paths (use -vvvvv to see paths)
fatal: [my_server]: FAILED! => {"msg": "An unhandled exception occurred while templating '{{ lookup('file', '/etc/ntp.conf') | regex_search('^server.*') }}'. Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /etc/ntp.conf. could not locate file in lookup: /etc/ntp.conf"}
我不明白为什么它会失败,因为我使用相同的功能,用户和文件获得了相同的权限,在 /etc/. 此外,我很快尝试对“cat”做同样的事情,它有效:
- name: check ntp.conf content
command: "cat /etc/ntp.conf"
register: ntp_conf_contenu
- debug:
msg:
- " {{ ntp_conf_contenu | regex_findall ('server') }}"
你知道它为什么失败吗?
非常感谢 !
查找不在远程主机上执行,而是在本地执行。
从文档中:
因此,您检查文件是否存在于远程机器上,然后从执行剧本的本地机器上读取它。
要从远程机器读取文件,您可以使用slurp 模块。