カーネルが更新されたら、自動的にマシンを再起動するAnsible Playbookを使用してRHEL7マシンをアップデートしようとしています。
これが私が思いついたものです:
---
- hosts: server1
become: yes
tasks:
- name: YUM Update
yum:
name: "*"
state: latest
register: yum_updates
- debug:
var: yum_updates.changes.updated
- name: Reboot server1
reboot:
when: '"kernel" in yum_updates.changes.updated'
...
もちろん、これまでは更新は機能しますが、必要な方法で出力変数を評価する方法はありません。出力は次のとおりです。
PLAY [server1] *********************************************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************************************
ok: [server1]
TASK [YUM Update] **************************************************************************************************************************************************************************************
changed: [server1]
TASK [debug] *******************************************************************************************************************************************************************************************
ok: [de-agb1-smba01t] => {
"yum_updates.changes.updated": [
[
"kernel-headers",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
],
[
"kernel",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
],
[
"sudo",
"1.8.23-4.el7_7.1.x86_64 from rhel-7-server-rpms"
],
[
"bpftool",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
],
[
"python-perf",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
],
[
"kernel-tools-libs",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
],
[
"kernel-devel",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
],
[
"microcode_ctl",
"2:2.1-53.3.el7_7.x86_64 from rhel-7-server-rpms"
],
[
"SDL",
"1.2.15-14.el7_7.x86_64 from rhel-7-server-rpms"
],
[
"kernel-tools",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
],
[
"perf",
"3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
]
]
}
TASK [Reboot server1] **************************************************************************************************************************************************************************************
skipping: [server1]
PLAY RECAP *********************************************************************************************************************************************************************************************
server1 : ok=3 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
「kernel」という単語を見つけたら、条件はどのように見えますか?
どんなアイデアがありますか?
答え1
許可された回答に示されているようにフラット化フィルタを使用してください。https://unix.stackexchange.com/a/554727/307127パッケージ名とバージョンをリストにまとめます。これは問題を引き起こす可能性はありませんが、それほどきれいではありません。
代わりに、再起動されたテストを次のように書くことができます。
when: dict((yum_updates.changes|default(dict())).updated|default([])).kernel is defined
これは、変更されたパッケージとバージョンのリストを辞書(パッケージ名をキー、バージョンを値として使用)に変換し、辞書に「カーネル」キーが含まれているかどうかをテストします。 「デフォルト」フィルタは、パッケージが更新されない場合など、極端なケースを処理するために2つの場所で使用されます。パッケージが更新されない場合は、「changes」キーが登録変数に存在しないため、この操作が必要です(例:「yum_updates.changes」は存在しません)。
答え2
答え3
yum.updates.changes.updated
各項目が2つの項目(パッケージ名とバージョン)のリストであるリスト()があります。パッケージのみに一致する単純なWhen条件はkernel
次のとおりです。
---
- debug:
msg: "{{ item.0 }} was updated to version {{ item.1 }}"
when: item.0 == "kernel"
loop: "{{ yum_updates.changes.updated }}"
サンプルデータに基づいて、このジョブは次を出力します。
TASK [debug] *****************************************************************************************************************************************************************
skipping: [localhost] => (item=['kernel-headers', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
ok: [localhost] => (item=['kernel', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms']) => {
"msg": "kernel was updated to version 3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
}
skipping: [localhost] => (item=['sudo', '1.8.23-4.el7_7.1.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['bpftool', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['python-perf', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['kernel-tools-libs', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['kernel-devel', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['microcode_ctl', '2:2.1-53.3.el7_7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['SDL', '1.2.15-14.el7_7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['kernel-tools', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['perf', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])