前回の記事では、Ansibleアドホックコマンドについて説明しました 。私たちがそこで学んだことは何でもこの記事に適用されますが、別の方法で適用されます。このチュートリアルでは、AnsibleのPlaybookとは何か、AnsiblePlaybookの操作方法を例を挙げて説明します。
Ansible Playbookとは何ですか?
プレイブックはYAML 環境内の管理対象ホストに対して1つ以上のタスクを実行するために使用されるファイル。
アドホックコマンドとプレイブックの主な違いは、アドホックコマンドを使用すると、単純なワンライナーを作成したり、シェルスクリプトでアドホックコマンドを使用して単純なタスクを実行したりできることです。複雑な繰り返し操作を行いたい場合は、プレイブックを作成して中央リポジトリに保存し、必要に応じて使用する必要があります。
あなたがシステム管理チームの一員であると仮定しましょう。新しいサーバーが構築されるときはいつでも、あなたのチームはあなたの会社の方針に従ってサーバーを強化する責任があります。
この場合、プレイブックを作成してサーバーを強化できます。これで、強化が必要なN個の新しいホストに対して同じプレイブックを使用できます。
MyAnsibleLabの構造
2つのUbuntu20.04LTSノードで作成されたansibleラボを使用します。必要に応じて、次の記事を参照して同じラボ設定を複製できます。
最初のAnsiblePlaybookを作成する
前に述べたように、Playbookは YAMLで記述されています フォーマット。プレイブックには.yml
が必要です または.yaml
拡大。 YAMLについて知りたい場合は、以下のリンクをご覧ください。
以下は、プレイブックがどのように機能するかを示すために使用するサンプルプレイブックです。これは、ノードにログインしたときにカスタムバナーメッセージを設定するための簡単なプレイブックです。
- name: First Play - Modify banner message hosts: ubuntu2 gather_facts: false become: yes tasks: - name: Remove Execute Permission from /etc/update-motd.d/* file: path: /etc/update-motd.d/ mode: u=rw,g=rw,o=rw recurse: yes - name: ADD BANNER MESSAGE copy: content: "Welcome to OSTechnix" dest: /etc/motd
このハンドブックの各セクションを見てみましょう。プレイブックは2つのセクションに分かれています。最初のセクションには、プレイ名、ターゲットホスト、特権昇格などのプレイ定義が含まれています。
- 名前 -プレイブックには、ターゲットホスト、パラメーター、およびタスクの論理グループにすぎないプレイ名を付ける必要があります。プレイブックには複数のプレイを含めることができます。劇にわかりやすい名前を付けます。
- ホスト -ターゲットホスト。 Ansibleはインベントリファイルをチェックし、ホストで指定された値がインベントリファイルで利用可能かどうかを確認します。
- になる -「はい」に設定した場合 sudo権限でタスクを実行します。
/etc/
の下で権限を変更しているので ディレクトリの場合、タスクは昇格された特権で送信する必要があります。
詳細については、特権の昇格に関する包括的な記事をご覧ください。
2番目のセクションでは、タスクを定義します。キーワード"tasks"を使用する必要があります タスクを定義します。ここでは、2つのタスクを作成しました。各タスクには、キーワード "name"を使用して名前を付ける必要があります 。
- 最初のタスクは、
/etc/update-motd.d/*
から実行権限を削除します ディレクトリ。 ファイルを使用しています このためのモジュール。 - 2番目のタスクは文字列"Welcometo OSTechnix"を書き込みます
/etc/motd
へ コピーを使用したファイル モジュール。
プレイブックを実行する前に、ターゲットノード( managed2.anslab.com )の状態を確認します。 )ノードにログインします。ノードにログインすると、デフォルトのバナーメッセージが表示され、すべてのファイルに実行権限が設定されていることがわかります。
$ ssh [email protected]
プレイブックを実行するには、ターミナルから次のコマンドを実行します。
$ ansible-playbook <playbook-name> # SYNTAX $ ansible-playbook banner_mod.yml
出力を理解してみましょう。
1。 プレイブックを実行すると、最初に表示されるのはプレイ名です。
PLAY [Modify banner message] *
2。 最初のタスクのAnsible実行は、「事実の収集」です。 。プレイブックではこのタスクを定義していませんが、オフにしない限り実行されます。
TASK [Gathering Facts] *
ok: [managed2]
3。 これで、プレイの一部としてYAMLファイルで定義したタスクが1つずつ実行を開始します。 Ansibleはプレイブックを上から下に読み取るため、タスクはプレイブックで定義された順序で実行されます。
TASK [Remove Execute Permission from /etc/update-motd.d/*] ******************************************************************************************* changed: [managed2] TASK [ADD BANNER MESSAGE] **************************************************************************************************************************** changed: [managed2]
4。 すべてのタスクが完了すると、さまざまなタスクの合計ステータス数を示す再生の要約が表示されます。この場合、ファクトの収集を含めて合計3つのタスク(ok =3)が実行され、2つのタスク(changed =2)のみが管理対象ノードに変更を加えました。
PLAY RECAP ****************************************** managed2 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
これで、管理対象ノードを検証して、変更が正常に適用されたかどうかを確認できます。
ファクト収集を無効にする
プレイブックを実行するときに前のセクションで予告したように、ansibleはセットアップモジュールを実行することにより、管理対象ノードに関するファクトを収集します 。プレイブックに次の行を追加することで、ファクトの収集を無効にできます。
gather_facts : false
これで、プレイブックを再度実行すると、プレイブックで定義された2つのタスクのみが表示されます。 Ansibleはべき等であるため、オブジェクトが既に変更されている場合、ansibleはオブジェクトの状態を変更しようとはしません。したがって、出力は OKとして表示されます。 。
ファクトを収集すると、多数のホストに対してプレイブックを実行する必要がある場合に、プレイの実行が遅くなります。これは、ansibleが管理対象ノードに接続し、ノードに関する大量のデータを収集する必要があるためです。これは、すべての場合に必要なわけではありません。
以下の事実の有無にかかわらず、実行時間の違いを確認できます。
$ time ansible-playbook banner_mod.yml # WITHOUT FACTS real 0m1.642s user 0m0.731s sys 0m0.220s $ time ansible-playbook banner_mod.yml # WITH FACTS real 0m2.547s user 0m1.139s sys 0m0.187s
複数の再生を実行する
プレイブックには複数のプレイを含めることができます。下の画像でわかるように、2回目のプレイには、sshd
を再起動するタスクが1つあります。 サービスを使用したサービス 別のホストのモジュール。
- name: Second Play - Restart SSHD service hosts: ubuntu1 gather_facts: false become: yes tasks: - name: Restart SSHD in managed1.anslab.com service: name: sshd state: restarted
プレイブックをもう一度実行してみましょう。出力から、両方のプレイが正常に実行されていることがわかります。
$ ansible-playbook banner_mod.yml
これで、プレイブックの作成方法と実行方法を正しく理解できたはずです。 Playbookは、次のセクションで説明する追加の便利な機能をサポートしています。
Playbook構文の検証
--syntax-check
を使用できます プレイブックの構文エラーをチェックするためのフラグ。 "gather_facts"で意図的に構文エラーを作成しました プレイブックの行。
$ ansible-playbook --syntax-check banner_mod.yml
確認のプロンプト
--step
を使用する場合 フラグを立てると、プレイ中のタスクごとに、タスクを続行するための確認を求めるプロンプトが表示されます。
$ ansible-playbook --step banner_mod.yml
ドライランの実行
管理対象ノードでタスクを実行する代わりに、-C
を使用して実行をシミュレートできます。 または--check
フラグ。
$ ansible-playbook -C banner_mod.yml
特定のタスクから開始
特定のタスクからプレイブックの実行を開始するオプションがあります。下の画像から、Play2(task1)から開始したことがわかるので、play1の両方のタスクがスキップされます。フラグ--start-at-task
を使用します タスク名を引数として渡します。
$ ansible-playbook banner_mod.yml --start-at-task "Restart SSHD in managed1.anslab.com"
タグを使用してタスクを実行する
タグを使用してプレイとタスクをグループ化できます 。タグを使用すると、特定のタグを使用してそれらのタスクのみを実行するか、タスクをスキップできます。
「タグ」を使用した以下の画像をご覧ください。 キーワードを設定し、それにいくつかの値を設定します。 1つのタグに複数の値を追加することもできます。
次のコマンドを実行して、タスクのリストとそのタグを取得できます。
$ ansible-playbook banner_mod.yml --list-tasks
$ ansible-playbook banner_mod.yml --list-tags
-t
を使用します フラグを立て、引数としてタグ名を渡します。以下に示すように、特定のタグベースのタスクまたは複数のタグを実行できます。以下の例では、2つの異なる演劇からの2つの異なるタグを使用しています。
$ ansible-playbook -t "set_perm","restart service" banner_mod.yml
--skip-tags
を使用して、タスクをスキップして他のすべてのタスクを実行することもできます。 フラグ。
$ ansible-playbook -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml
冗長性を高める
プレイブックが期待どおりに動作しない場合があります。バックグラウンドで発生しているものか、別のエラーである可能性があります。
問題をデバッグするには、プレイブックの実行時に詳細度(-v)を増やすことができます。冗長性には4つのレベルがあります。 ansible.cfg
で詳細度を設定できます プロパティ「verbosity=<level
」を追加してファイルを作成します "または-v
を使用して端末から またはANSIBLE_VERBOSITY環境変数。
$ ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(-vvvv)
[または]
$ ANSIBLE_VERBOSITY=4 ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(ENV VARIABLE)
並列処理の制御
プレイブックを実行すると、ansibleはタスクをバッチで実行します。デフォルトでは、ansibleは5つのノードでタスクを並行して実行し、5つのノードすべてですべてのタスクが完了すると、次の5つのノードのセットに移動します。
同様に、すべてのノードでタスクが完了するまで5つのバッチでタスクを実行し、次のタスクに移動して同じ手順を繰り返します。
「フォーク」を設定することで、並列処理を制御し、並列処理するノードの数を設定できます。 ansible.cfg
のパラメーター ファイル。
[defaults]
inventory = inventory
host_key_checking = False
forks=20
フォークの値を20に設定しました。これで、20ノードでタスクを並列処理します。同様に、要件に応じてカウントを増減できます。
ansible.cfg
で設定された値をオーバーライドできます -f
を渡してファイル または--forks
国旗。次のコマンドを実行すると、フォークの値20が15に上書きされます。
$ ansible-playbook banner_mod.yml -f 15
結論
この記事では、Ansibleプレイブックの作成方法と、プレイブックでサポートされているさまざまなパラメーターとオプションについて説明しました。変数、条件、ループなど、今後の記事で取り上げるプレイブックで使用できる機能は他にもたくさんあります。