次のスクリプトを使用します。
~ # cat play.yml
- name: MAIN PLAY
hosts: localhost
gather_facts: no
vars:
status:
check1: present
check2: ""
tasks:
- debug:
var: status
- name: Verify status
set_fact:
status_old: "{{status}}"
status_new:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if status.check2 is defined and status.check2 != '' else 'absent'}}"
- name: Combine facts
set_fact:
status: "{{status|combine(status_old, status_new, recursive=True) }}"
- debug:
var: status
出力:
PLAY [MAIN PLAY] **********************************************************************************************************************************************************************************************************************************************************
TASK [debug] **************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"status": {
"check1": "present",
"check2": ""
}
}
TASK [Verify status] ******************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Combine facts] ******************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug] **************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"status": {
"check1": "present",
"check2": "absent"
}
}
ご覧のとおり、これはうまくいきますが、2番目の使命はショーにあるはずname: Combine facts
です。
質問:
変数が存在し、検出された条件に基づいて特定の状態を設定できることを確認するより良い方法はありますか?
ここでの目標は、タスクを削除し、「ブロック」を使用せずにタスクname: Combine facts
の下にすべてを設定することです。name: Verify status
私もこれをしようとしています:
- name: Verify status
set_fact:
status: "{{ status |combine(status_old, status_new, recursive=True) }}"
vars:
status_old: "{{status}}"
status_new:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if check2 is defined and check2 != '' else 'absent'}}"
しかし今、出力には変化があります。
TASK [debug] **************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"status": {
"check1": "present",
"check2": ""
}
}
「set_fact」を次に設定すると
- name: Verify status
set_fact:
status:
check2: present
status.check1
消えたより
ok: [localhost] => {
"status": {
"check2": "present"
}
}
どんな提案がありますか?
ベストアンサー1
status_old
それらを設定してstatus_new
組み合わせる理由はありません。status
stateの値を簡単に変更できますset_fact
。代わりに:
- name: Verify status
set_fact:
status_old: "{{status}}"
status_new:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if status.check2 is defined and status.check2 != '' else 'absent'}}"
- name: Combine facts
set_fact:
status: "{{status|combine(status_old, status_new, recursive=True) }}"
これを行う:
- name: Verify status
set_fact:
status:
check1: "{{'present' if status.check1 is defined and status.check1 != '' else 'absent'}}"
check2: "{{'present' if status.check2 is defined and status.check2 != '' else 'absent'}}"