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

Ansibleプレイブックを使用してワークステーションとサーバーの更新を管理する

サポートしているお客様のシステムと、自分のLinuxデバイスの更新プロセスを合理化することにしました。一連の複雑なスクリプトは長い間私に役立ってきましたが、このタスクにAnsibleを使用することの利点は、あまりにも多く、見逃すことはできません。

この一連の記事のパート1では、実際の更新プロセスについて説明し、プレイブックの構造を確立し、キーワードとコメントを提示しました。プレイブックには3つの演劇が含まれています。各プレイは、システムのカテゴリを管理します。 Play 1はAnsibleコントローラーデバイス(プライマリワークステーション)を処理し、Play2と3はサーバーと残りのワークステーションを管理します。

この2番目の記事は、2番目のプレイを調べることから始めましょう。

セカンドプレイ

これがセカンドプレイ全体です。このプレイの目的は、ファイアウォールとサーバーで更新を実行することです。

サーバー(および他のすべてのホスト)が更新されている間、ファイアウォールが稼働している必要があります。これにより、サーバーはインターネットにアクセスして更新パッケージをダウンロードできます。 DHCPおよびネームサービスを提供するためにファイアウォールおよびその他のホストが更新されている間、サーバーを実行する必要があります。これを実現するために、このプレイでは2つのホストを一度に1つずつ更新します。

これら2つのホストの名前は、 [all_servers]に含まれています。 /etc/ansible/hostsのグループ インベントリファイル。

#######################################################################
#######################################################################
# Play 2 - Do servers 
#######################################################################
#######################################################################
- name: Play 2 - Install updates for servers yorktown and wally
  hosts: all_servers
  serial: 1
  remote_user: root
  vars:
    run: false
    reboot: false

  tasks:
#######################################################################
# Do some preliminary checking
#######################################################################
    - name: Install the latest version of the doUpdates script
      copy:
        src: /root/ansible/Updates/files/doUpdates
        dest: /usr/local/bin
        mode: 0774
        owner: root
        group: root

    - name: Check for currently available updates
      command: doUpdates -c
      register: check
    - debug: var=check.stdout_lines

#######################################################################
# Do the updates.
#######################################################################
# Install all available updates
    - name: Install all current updates
      dnf:
        name: "*"
        state: latest
      when: (check.stdout | regex_search('updates ARE available')) and run == "true"

    - name: Update the man database
      command: mandb
      when: run

    - name: Reboot if necessary and reboot extra variable is true
      reboot:
      when: (check.stdout | regex_search('reboot will be required')) and reboot == "true" and run == "true"

[次のこともお勧めします:AnsibleTowerの紹介]

この2回目のプレイ全体は、2行を除いて、最初のプレイとほぼ同じです。

シリアル :この追加のステートメントは、Ansibleに、一度に1つのホストで、つまり、並列ではなく直列でこの再生を実行するように指示します。 all_serversの場合 インベントリ内のグループに10台のサーバーが含まれている場合、このプレイが一度に2台のサーバーに対して実行されるように、2台などのより高い制限を使用できます。この場合、wallyが必要です 、ファイアウォール、yorktownが稼働するようにする サーバーはインターネットにアクセスして、更新されたパッケージをダウンロードできます。両方が同時に実行されない限り、これら2つのホストがどちらのシーケンスで更新されるかは関係ありません。

再起動 :Ansibleには再起動機能が組み込まれているため、このプレイではLinuxのpoweroffコマンドの代わりにそれを使用できます。 Ansible再起動機能の重要な機能は、再起動が成功し、リモートホストが稼働しており、SSH通信が再び機能していることを確認することです。このデフォルトのタイムアウトは10分で、その後Ansibleはエラーをスローします。

3回目のプレイ

そして、これが3番目のプレイです。この再生により、ネットワーク上の残りのすべてのホストが更新されます。これらのホストの名前は、[ワークステーション]に含まれています。 /etc/ansible/hostsのグループ インベントリファイル。

#######################################################################
#######################################################################
# Play 3 - Do all workstations except david
#######################################################################
#######################################################################
- name: Play 3 - Install updates for all workstations except david
  hosts: workstations
  strategy: free
  remote_user: root
  vars:
    run: false
    reboot: false

  tasks:
#######################################################################
# Do some preliminary checking
#######################################################################
    - name: Install the latest version of the doUpdates script
      copy:
        src: /root/ansible/Updates/files/doUpdates
        dest: /usr/local/bin
        mode: 0774
        owner: root
        group: root

    - name: Check for currently available updates
      command: doUpdates -c
      register: check
    - debug: var=check.stdout_lines

#######################################################################
# Do the updates.
#######################################################################
# Install all available updates
    - name: Install all current updates
      dnf:
        name: "*"
        state: latest
      when: (check.stdout | regex_search('updates ARE available')) and run == "true"

    - name: Reboot if necessary and reboot extra variable is true
      reboot:
      when: (check.stdout | regex_search('reboot will be required')) and reboot == "true" and run == "true"

このプレイブックには、ホストのリスト以外に1つだけ変更があります。

戦略無料 戦略は、Ansibleにこのプレイのタスクを自由に実行するように指示します。このプレイのタスクは、ホストが実行できるのと同じ速さで各ホストで実行されます。これは、一部のホストが、プレイブックの最初のタスクでさえ、他の遅いホストが完了する前に最後のタスクを完了する可能性があることを意味します。 STDOUTデータストリームを読むと、まるで自由に見えるかもしれません。

各戦略は個別のプラグインであり、このキーワードで使用できるプラグインは他にもいくつかあります。デフォルトは線形です 、次のタスクに進む前に、すべてのホストで各タスクを実行します。 host_pinned プラグインは、次のホストに移動する前に、各ホストでプレイ中のすべてのタスクを実行します。 デバッグ プラグインはタスクをインタラクティブに実行するため、プレイをデバッグできます。

プレイブックの実行

次のコマンドを使用してこのプレイブックを実行します:

# ansible-playbook -e "run=true reboot=true" doUpdates.yml

-e オプションは「追加変数」を表します。ここでは、各プレイで定義された2つの変数の値を指定します。この場合、両方を trueに設定します 更新を実行し、必要に応じて再起動(電源オフ)を実行できるようにします。

STDOUTは再現しません かなり長いので、ここのデータストリーム。

最終的な考え

ネットワークの詳細を反映するためにいくつかの変更を加えると、このプレイブックを使用して更新タスクを自動化できます。私と同じようなプレイブックを使用して更新を実行することは、Ansibleの使用を開始するための良い方法です。複雑なタスクを実行できるいくつかのキーワードを使用していますが、これは比較的単純なプレイブックです。パーソナルワークステーションを更新するための最初のプレイから始めましたが、残りはほとんどコピー/貼り付けでしたが、ホストのさまざまなグループのニーズに対応するためにいくつかの小さな変更が加えられました。

はい、これを行う他の方法があります。おそらく、3回のプレイではなく、1回または2回のプレイで条件文を使用してさまざまなタスクを使用できたはずです。または、条件とブロックを使用して、特定のホストを異なる方法で処理することもできます。個人的には、個々のプレイは、1つのプレイでタスクを処理する方法を変更しても、他のプレイに影響を与えないように、ロジックを十分に分離するのに役立つと思います。私の意見では、全体的なロジックが記述、理解、および管理が簡単であるため、この分離もよりエレガントです。

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

リソース

私が見つけた最も完全で有用なドキュメントは、AnsibleWebサイトのAnsibleユーザーガイドです。このドキュメントは参照用であり、ハウツーまたは入門用のドキュメントではありません。

Opensource.comは、Ansibleに関する多くの記事を何年にもわたって公開しており、それらのほとんどが私のニーズに非常に役立つことがわかりました。 Red Hat Enable Sysadmin Webサイトにも、有益であることがわかったAnsibleの記事がたくさんあります。

良いが簡潔なmanページもいくつかあります。


Linux
  1. PrometheusとGrafanaを使用してLinuxサーバーを監視する

  2. FreeIPAサーバーでユーザーとグループを管理する方法

  3. Ansibleを使用してUbuntu20.04にRedis6をインストールおよび構成する方法

  1. Ansibleの静的および動的ホストインベントリを管理する方法

  2. Ansibleを使用してUbuntu20.04にElasticsearchをインストールおよび構成する

  3. サーバーログの使用

  1. Ansibleガイド:Ansibleを使用してファイルを管理する

  2. Raspberry Piファイアウォール:UFWを使用してインストールおよび管理する方法

  3. WindowsServer2016および2019でWindowsUpdateを確認する