Ansible
Ansible 在使用查找函式進行模板化時發生未處理的異常
我目前正在建構一個劇本來測試是否存在一些 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') }}"
你知道它為什麼失敗嗎?
非常感謝 !
查找不在遠端主機上執行,而是在本地執行。
從文件中:
與所有模板一樣,查找在 Ansible 控制機器上執行和評估。
因此,您檢查文件是否存在於遠端機器上,然後從執行劇本的本地機器上讀取它。
要從遠端機器讀取文件,您可以使用slurp 模組。