GNU/Linux >> Linux の 問題 >  >> Linux

Ansibleリブートモジュールを使用してシステムのリブートを自動化する方法

この記事では、Ansibleを使用してLinuxまたはWindowsマシンを効率的に再起動する方法について説明します。 Ansible再起動 モジュールはAnsible2.7(2018)で導入され、現在このモジュールは ansible-baseの一部です。 すべてのAnsibleインストールに含まれています。 再起動に注意してください モジュールはAnsibleコントローラーノードから実行する必要があり、localhostなどのノードでは機能しません。

管理対象ノードを再起動する必要があるのはなぜですか?

Linuxオペレーティングシステムを再起動することは非常にまれです。ほとんどの場合、構成の変更またはパッケージの更新後に個々のサービスを再起動または再ロードすることで、目的の結果を得ることができます。ただし、パッチ適用やシステムアップグレードなど、ワークフローと効果を完全に完了するには、再起動操作が必要な場合があります。管理にAnsibleを使用している場合、完全な自動化を実現するには、この再起動タスクを含める必要があります。

Ansibleでは、システムの再起動タスクを実行するための複数の方法があるため、自動再起動は非常に簡単です。

前提条件

remote_user—を確認します Ansibleが管理対象ノードにログインするために使用しているもの— sudoがあります ノードにアクセスして再起動する権限。

古き良き方法–コマンドを再起動して待機

以前は、Ansibleを使用して2段階の方法で管理対象ノードを再起動していました。 (多くの方法がありますが、この方法は一般的な方法です):

  1. シェルを使用して再起動コマンドをトリガーします モジュール。
  2. wait_for_connectionを使用します 再起動後にノードがオンラインに戻ることを確認するモジュール。

例を示しましょう。

最初のタスクは単純な<​​code>shell モジュールを再起動してマシンを再起動すると、Ansibleはノードから切断されます。次のタスクでは、Ansibleはノードがオンラインに戻るのを待ちますが、タイムアウトは300秒または5分です。

- name: Reboot the machine
  shell: "sleep 5 && reboot"

  async: 1
  poll: 0

- name: Wait for the machine to come back online
  wait_for_connection:
    connect_timeout: 60
    sleep: 5
    delay: 5
    timeout: 300

とても簡単ですよね?ちょっと待ってください。Ansibleのrebootを使用したより優れた効率的な方法があります。 モジュールを使用すると、1つのタスクで目標を達成できます。

[読むこともお楽しみいただけます:新しいAnsibleAutomationHubの紹介]

新しく効率的な方法–Ansible再起動モジュールを使用して再起動します

Ansible再起動 モジュールはAnsible2.7(2018年)で導入され、現在このモジュールは ansible-baseの一部です。 すべてのAnsibleインストールに含まれています。前提条件は同じですが、必要なのは restartを使用した簡単なタスクだけです。 モジュール。 Ansible再起動 モジュールは、システムまたは管理対象ノードの再起動を処理し、システムがダウンするのを待って、オンラインに戻り、コマンドに応答します。

追加のオプションなしで、マシンを再起動するだけです。

- name: Reboot the machine with all defaults options
  reboot:

restart_timeoutのようなオプションがあります タイムアウトまたはpre_reboot_delayを待機するため 、再起動する前に指定された秒数まで待機します。詳細については、AnsibleRebootModuleのドキュメントを参照してください。

これが再起動タスクのあるプレイブックです。非常にシンプルで管理が簡単であることがわかります。

---
- name: Linux Reboot Demo
  hosts: rhel7-base
  gather_facts: no
  remote_user: devops
  become: true
 
  tasks:
    - name: Reboot the machine (Wait for 5 min)
      reboot:
        reboot_timeout: 300

重要な注意事項

remote_userの場合 sudoで構成されています パスワード、必ず -Kを追加してください 引数を入力し、 sudoを入力します パスワード。次に例を示します:

$ ansible-playbook ansible-os-utils/linux-reboot.yaml -K

Ansible Towerを使用している場合は、 sudoを追加します 次に示すように、資格情報インターフェイスのパスワード:

プレイブックをテストしてみましょう。

$ ansible-playbook ansible-os-utils/linux-reboot.yaml -K
BECOME password: 
 
PLAY [Linux Reboot Demo] ************************************************************************************
 
TASK [Reboot the machine (Wait for 5 min)] ******************************************************************
changed: [rhel7-base.lab.local]
 
PLAY RECAP **************************************************************************************************
rhel7-base.lab.local       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    

Windowsマシンの再起動

Windowsマシンの再起動はどうですか?ご存知のように、Ansibleを使用してWindowsマシンを管理できます。この再起動タスクは、自動化ワークフローの一部として必要になります。

幸いなことに、他のWindowsの代替手段と同様に、専用のAnsible win_rebootがあります。 このタスクを処理するモジュール。設定は次のようになります:

- name: Reboot a Windows Machine
  ansible.windows.win_reboot:
    reboot_timeout: 360

詳細については、Ansiblewin_rebootモジュールのドキュメントを参照してください。

[Red Hatの無料ガイド:ビジネスを自動化するための5つのステップ。 ]

まとめ

restartを使用する またはwin_reboot Ansibleのモジュールは非常に簡単で、すでにこれを学びました。必要に応じて、Ansibleプレイブックに適切な再起動前(必要な場合にのみ再起動)および再起動後(再起動後にサービスまたは構成を確認するため)のタスクがあることを確認してください。

参照:

  • アンシブルリブート
  • Ansible win_reboot

Linux
  1. Ansibleを使用してLinuxユーザーを作成する方法

  2. Ansibleを使用してDebian/UbuntuLinuxを更新/アップグレードする方法

  3. 「最後の」コマンドの出力?

  1. Linuxシステム自動化のための10のAnsibleモジュール

  2. LinuxシステムのIDを変更する方法

  3. MSBuild で現在のオペレーティング システムを取得する方法は?

  1. コマンドラインを使用してLinuxを再起動する方法

  2. Ubuntuオペレーティングシステムで再起動をスケジュールする

  3. system() の出力をファイルにリダイレクトする方法は?