Ansible

Ansible - 測試命令輸出是否缺少項目

  • February 19, 2021

我有一個字元串列表,我期望在某些命令的輸出中。如何創建一個可測試的 ansible 腳本 - 如果一個或多個條目不包含 - 執行任務?

所以我的 ansible 腳本可能看起來像:

vars:
 musthave:
   - value1
   - value2
tasks:
- name: Check the configured values
 command: "cat configfile"
 register: current_configuration
 changed_when: false

- set a variable if one or more of the musthave's are missing in current_configuration.stdout
 ...

- name: Execute task to reconfigure system
 command: "reconfigure..."
 when: true = variable

那麼有沒有類似的東西

variable = false
for s in musthave:
   if not s in current_configuration.stdout:
       variable |= true

我最初的請求是檢查是否存在可能出現在命令輸出中某處的特定值。準備difference工作清單是一個缺點,副作用是您可以計算兩個方向的差異。

所以現在我不僅可以檢查失去的條目,還可以檢查那些太多的條目。

- name: print hostvars
 debug:
   var: hostvars[{{ ansible_host }}]['certificate_domains']

- name: print certificate
 delegate_to: silver.fritz.box
 command: "openssl x509 -in /home/hiran/homeserver.crt -noout -text"
 register: certificate

- name: grab subject's common name and alternative names
 set_fact:
   commonName: "{{ certificate.stdout | regex_search('Subject.*CN\\s=\\s([\\.a-zA-Z]+)', '\\1') }}"
   altNames: "{{ certificate.stdout | regex_findall('DNS:([\\.a-zA-Z]+)') }}"
- name: prepare the lists so they can be subtracted from each other
 set_fact:
   contained: "{{ (commonName + altNames) | unique }}"
   musthave: "{{ hostvars[{{ ansible_host }}]['certificate_domains'] | unique }}"
- name: calculate differences
 set_fact:
   missing: "{{ musthave | difference(contained) }}"
   toomuch: "{{ contained | difference(musthave) }}"

- name: show difference
 debug:
   msg: Something is wrong
 when: (missing | length)>0 or (toomuch | length)>0

要解決此問題,您不需要中間變數。根據Ansible 文件,使用difference過濾器來選擇必須具有的值列表與配置文件的輸出之間的差異。

誰的:
一定有:
- 價值1
- 價值2

任務:
- 名稱:檢查配置值
命令:“seq -f 'value%g' 2 1 5”
註冊:current_configuration
改變時間:假

- 調試:var=current_configuration.stdout_lines

- 名稱:執行任務以重新配置系統
調試: msg="{{ musthave | 差異(current_configuration.stdout_lines) }}"
 **什麼時候:必備| 差異(current_configuration.stdout_lines)**

debug僅當差異不為空時才執行最後一個任務。

引用自:https://unix.stackexchange.com/questions/635061