Ansible
Ansible - 測試命令輸出是否缺少項目
我有一個字元串列表,我期望在某些命令的輸出中。如何創建一個可測試的 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
僅當差異不為空時才執行最後一個任務。