Ansible 2.8:カーネルアップデート後にマシンを再起動する方法は?配列変数の計算

Ansible 2.8:カーネルアップデート後にマシンを再起動する方法は?配列変数の計算

カーネルが更新されたら、自動的にマシンを再起動する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」は存在しません)。

おすすめ記事