Ansible

如何在 ansible ini_file 值中使用命令的輸出

  • July 31, 2021

我想在 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

附帶說明:如果日期時間(以秒為單位)是索引,則使用此雜湊可能會非常快速地搜尋。

引用自:https://serverfault.com/questions/1073025