Ansible - 欠落している項目のテストコマンドの出力

Ansible - 欠落している項目のテストコマンドの出力

特定のコマンドの出力に表示されると予想される文字列のリストがあります。タスクをテストして(1つ以上の項目が含まれていない場合)、実行するための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

答え1

この問題を解決するために中間変数は必要ありません。 ~によるとアンサーブル文書differenceフィルタ選択に必要な値のリストと設定ファイルの出力の違い。

可変的な:
  必需品:
    - 値1
    - 値2

仕事:
- 名前:設定値の確認
  コマンド: "seq -f '値%g' 2 1 5"
  登録:現在の設定
  変更時間:偽

- デバッグ: var=current_configuration.stdout_lines

- 名前: システムの再構成操作を実行します。
  デバッグ: msg="{{必ずなければなりません|違い(current_configuration.stdout_lines)}}"
  タイミング:必須の違い(current-config.stdout_lines)

debug最後の操作は、差が空でない場合にのみ実行されます。

答え2

私の最初の要求は、表示される特定の値があるかどうかをコマンド出力を確認することでした。作業リストの準備のdifference1つの欠点は、双方向の違いを計算できることです。

不足しているアイテムだけでなく、余分なアイテムも確認できます。

- 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

関連情報