Ansible
如何在 ansible ini_file 值中使用命令的輸出
我想在 ini_file 中設置一個值,但這個值是目前時間的 MD5 雜湊。(我不怕意外替換值,或者神奇地執行兩次並在兩個不同的伺服器中具有相同的值。)
這是我嘗試過的,但只有命令作為文件中的值(不知道為什麼我認為它會起作用……):
- name: Replace HardwareID with new MD5 ini_file: path: /etc/app/config.ini section: DEFAULT option: hardware_token value: $(date | md5sum | cut -d" " -f1)
有沒有簡單的方法讓它工作?
問:“如何使用 Ansible ini_file 值中的命令輸出? ”
A:註冊命令的結果並作為值使用,例如
- hosts: test_24 gather_facts: false tasks: - shell: 'date | md5sum | cut -d" " -f1' register: result check_mode: false - debug: var: result - name: Replace HardwareID with new MD5 ini_file: path: etc/app/config.ini section: DEFAULT option: hardware_token value: "{{ result.stdout }}"
給出(使用 –check –diff 執行)
TASK [Replace HardwareID with new MD5] *********************************** --- before: etc/app/config.ini (content) +++ after: etc/app/config.ini (content) @@ -0,0 +1,3 @@ + +[DEFAULT] +hardware_token = ba3f11c4f1ecfe9d1e805dc8c8c8b149 changed: [test_24]
如果您想使用數據和時間作為輸入,使用 Ansible 事實會更容易。例如,如果您收集事實,字典*ansible_date_time會保留日期和時間。*在劇本中,我們設置
gather_facts: false
. 因此字典沒有定義- debug: var: ansible_date_time.iso8601
給
ok: [test_24] => ansible_date_time.iso8601: VARIABLE IS NOT DEFINED!
您必須在
gather_facts: true
開始播放或執行時收集事實setup
,例如- setup: gather_subset: min - debug: var: ansible_date_time.iso8601
給
ok: [test_24] => ansible_date_time.iso8601: '2021-07-29T21:32:26Z'
這不是很實用,因為要獲得目前時間,您必須執行
setup
。相反,過濾器strftime始終為您提供目前時間,例如- debug: msg: "{{ '%Y-%m-%d %H:%M:%S' | strftime }}" - name: Replace HardwareID with new MD5 ini_file: path: etc/app/config.ini section: DEFAULT option: hardware_token value: "{{'%Y-%m-%d' | strftime | hash('md5') }}"
給
TASK [debug] *************************************************************** ok: [test_24] => msg: '2021-07-29' TASK [Replace HardwareID with new MD5] ************************************* --- before: etc/app/config.ini (content) +++ after: etc/app/config.ini (content) @@ -0,0 +1,3 @@ + +[DEFAULT] +hardware_token = 5847924805aa614957022ed73d517e7e
附帶說明:如果日期時間(以秒為單位)是索引,則使用此雜湊可能會非常快速地搜尋。