
新しい Linux VM を構成するために使用する Ansible プレイブックがあります。最近、Ubuntu 22.04 で新しい VM を構築していました。プレイブックは、ネットワークなどに関連するいくつかの構成ファイルを書き込み、プロセスの最終ステップでは、Ansible を使用してansible.builtin.package
すべてのパッケージ更新をインストールします。
- name: "Install updates"
become: true
ansible.builtin.package:
upgrade: "dist"
register: res_pkg_updates
notify: "reboot system"
tags: [ never, updates ]
私の VM は数か月前に作成したテンプレートから作成されたため、Ubuntu OS には古いパッケージがいくつかありましたが、これは予想外のことではありません。問題は、パッケージの 1 つがネットワーク機能をサポートまたは提供する必要があることです。そのため、モジュールがpackage
更新のインストール パスで VM を起動すると、ネットワーク デーモンが再起動され、VM はプレイブックで以前に構成された新しい IP を取得します。これにより、Ansible タスクがハングし、現在別の IP にあるマシンへの再接続を待機します。
ansible.builtin.package
パッケージアップデートをインストールするタスクの設定方法を知りたいのですがないすべてのサービス、特にネットワークサービスを再起動します。
答え1
IP アドレスの変更をパッケージ トランザクションと残りのプレイから分離します。
まずパッケージを更新し、その他の作業を行います。
このプレイの最後に、このホストの IP アドレスを更新しますが、まだ新しい IP でインターフェースを起動しないでください。構成ファイルを変更して行うこともできます。ansible.posix.at
モジュールなどを使用して、このホストの再起動を少し後にスケジュールします。最後に、DNS を更新して、Ansible インベントリが IP の変更を認識できるようにします。これでプレイは終了です。その後、ホストが再起動し、ソフトウェアの更新と IP の変更が完了します。
今後のプレイは、ansible.builtin.wait_for_connection
まだ起動してアクセスできない場合に再試行するための便利な方法として から開始できます。
ansible.builtin.reboot
理論上、モジュールは再起動し、ホストが復帰するのを待ってから続行できます。ただし、1 つの IP アドレスを再起動して別の IP アドレスとして復帰する適切な方法はありません。
答え2
おそらく別のアプローチとしては、動的に割り当てるのではなく、VM に静的 IP を使用することです。ネットワーク デーモンを再起動しないと、プレイブックの実行時に他の問題が発生する可能性があります。
あるいはこうすることもできます
- name: Update package cache and install updates
ansible.builtin.package:
name: "*"
state: latest
update_cache: yes
force: no
become: yes
force: no はパッケージマネージャによる強制更新やサービスの再起動を禁止します