ryandaniels.server_update_reboot
ansible-role-server-update-reboot
サーバーを最新のパッケージに更新し、再起動を行い、サーバーが起動するまで待つためのAnsibleロールです。この後にさらなるロールを追加し、サーバーをインストール・設定することができます。
パッケージの更新を除外したり、特定のパッケージのみ更新したり、特定のパッケージをインストールすることも可能です。
Redhat/CentOSおよびUbuntuで動作します。
Redhat/CentOS 7およびUbuntu 16.04のMeltdown/Spectre Mitigationのためにパッケージを更新するために使用できます。
より詳細な例はブログ投稿にあります:Ansibleを使用してUbuntu、CentOS、Redhatを更新する
必要条件: Ansible 2.7.1(rebootモジュールを使用し、2.7.1でreboot_timeoutが修正されています)
注意:
このロールはカーネルの更新がある場合、かつreboot変数がtrueの場合にサーバーを再起動することがあります(再起動はデフォルトの設定です)。
テストしたディストリビューション
- Ubuntu 18.04 / 16.04
- CentOS & RHEL 7.x
グループ変数
./group_vars/centos-dev/proxy.yml
プロキシを使用する場合:
proxy_env:
http_proxy: http://my.internal.proxy:80
https_proxy: https://my.internal.proxy:80
プロキシを使用しない場合:
proxy_env: []
デフォルト設定
- debug_enabled_default: true|false(デフォルトはfalse)
- update_default: true|false(デフォルトはtrue)
- reboot_default: true|false(デフォルトはtrue)
- server_update_reboot_pre_delay: タスク実行前に待機する時間(秒単位)
- server_update_reboot_pre_reboot_delay: 再起動前に待機する時間(秒単位)
- server_update_reboot_post_reboot_delay: 再起動後に待機する時間(秒単位)
- server_update_reboot_reboot_timeout: サーバーが再起動するのを待つ最大時間(秒単位)
RHEL/CentOS用の変数:
- server_update_yum_exclude_pkgs: 更新を除外するパッケージのカンマ区切り文字列。ワイルドカードを使用できます。(デフォルトは[])
- server_update_yum_install_pkgs: 限定的に更新するパッケージのカンマ区切り文字列。ワイルドカードを使用できます。(デフォルトは'*'で全パッケージを意味します)
Ubuntu用の変数:
- server_update_apt_exclude_default: true|false。下にある除外リストを使用する場合はtrueに設定(デフォルトはfalse)
- server_update_apt_exclude_pkgs: 更新しないパッケージのリスト(各項目は改行で区切る)。ワイルドカードを含めて複数のパッケージを一致させることもできます(ただし、マッチを開始するためには^を使用すること)。(デフォルトは未定義)
- server_update_apt_default: full|update_specific|install(デフォルトはfull)
- full: "apt-get dist-upgrade"を使用して全パッケージを更新
- update_specific: server_update_apt_install_pkgs変数のリストからのみ更新
- install: server_update_apt_install_pkgs変数のリストからのみインストール
- server_update_apt_install_pkgs: 限定的に更新またはインストールするパッケージのリスト(各項目は改行で区切る)。ワイルドカードを含めて複数のパッケージを一致させることもできます。(デフォルトは未定義)
例のプレイブック server-update-reboot.yml
以下のプレイブックの例は、1回に1台のサーバーを更新/再起動します(max_fail_percentageおよびserial変数を使用)。すべてのサーバーを一度に更新/再起動したい場合は、それらの行のコメントを外してください。
---
- hosts: '{{inventory}}'
max_fail_percentage: 0
serial: 1
become: yes
roles:
# - stop-applications
- server-update-reboot
# - server-config-xyz
# - start-applications
準備
- Ansibleをインストール
- キーを作成
- クライアントにssh接続してknown_hostsファイルにエントリーを追加
- クライアントサーバーのauthorized_keysを設定
- ansibleコマンドを実行
使用法
Redhat/CentOS/Ubuntuの場合
すべてのデフォルトを使用して: サーバーを更新し、再起動し、サーバーが起動するまで待機します:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=all-dev" -i hosts-dev
上記と同じですが、サーバーは再起動しません:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=all-dev reboot_default=false" -i hosts-dev
Redhat/CentOSの場合
指定されたパッケージを除いてすべてのパッケージを更新します(RHEL用):
ansible-playbook server-update-reboot.yml --extra-vars 'inventory=centos-dev server_update_yum_exclude_pkgs="mysql*, bash, openssh*"' -i hosts-dev
特定のパッケージのみを更新(またはインストール)します(RHEL用):
ansible-playbook server-update-reboot.yml --extra-vars "inventory=centos-dev server_update_yum_install_pkgs='kernel-*, iwl*firmware, microcode_ctl, dracut'" -i hosts-dev
Ubuntuの場合
指定されたパッケージを除いてすべてのパッケージを更新します(Ubuntu用):
ansible-playbook server-update-reboot.yml --extra-vars 'inventory=ubuntu-dev server_update_apt_exclude_default=true' --extra-vars '{"server_update_apt_exclude_pkgs": [bash, openssl, ^mysql*, ^openssh*]}' -i hosts-dev
特定のパッケージのみを更新します(Ubuntu用):
ansible-playbook server-update-reboot.yml --extra-vars "inventory=ubuntu-dev server_update_apt_default=update_specific" --extra-vars "{'server_update_apt_install_pkgs': [linux-firmware, linux-generic, linux-headers-generic, linux-image-generic, intel-microcode, openssh*]}" -i hosts-dev
特定のパッケージのみをインストールします(Ubuntu用)。ワイルドカードには注意が必要です:
ansible-playbook server-update-reboot.yml --extra-vars "inventory=ubuntu-dev server_update_apt_default=install" --extra-vars "{'server_update_apt_install_pkgs': [bash, openssh-server]}" -i hosts-dev
Spectre/Meltdownの緩和策
Redhat/CentOS 7およびUbuntu 16.04のために、SpectreおよびMeltdown(CVE-2017-5754, CVE-2017-5753, CVE-2017-5715)をパッチするためのコマンドです。
Ubuntuからの情報
Redhatからの情報
または、最初のコマンドを使用してすべてをパッチすることもできます。
Redhat/CentOS 7の場合(Spectre/Meltdownの緩和策)
ansible-playbook server-update-reboot.yml --extra-vars "inventory=centos-dev server_update_yum_install_pkgs='kernel-*, iwl*firmware, microcode_ctl, dracut'" -i hosts-dev
Ubuntu 16.04の場合(Spectre/Meltdownの緩和策)
ansible-playbook server-update-reboot.yml --extra-vars "inventory=ubuntu-dev server_update_apt_default=update_specific" --extra-vars "{'server_update_apt_install_pkgs': [linux-firmware, linux-generic, linux-headers-generic, linux-image-generic, intel-microcode]}" -i hosts-dev
注意事項
RHEL5
RHEL/CentOS 5には、インストールが必要な依存関係があります:python-simplejson
このコマンドはrawモジュールを使用してインストールします:
ansible centos5 -m raw -a "yum install -y python-simplejson" --become --ask-pass --become-method=su --ask-become-pass --extra-vars="ansible_ssh_user=username123" -i hosts-dev
SELinux
SELinuxが有効または許可モードの場合、依存関係が必要です:libselinux-python
このコマンドはrawモジュールを使用してインストールします:
ansible centos5 -m raw -a "yum install -y libselinux-python" --become --ask-pass --become-method=su --ask-become-pass --extra-vars="ansible_ssh_user=username123" -i hosts-dev