Ansibleプレイブックを作成または使用する場合は、YAML構成ファイルの読み取りに慣れています。 YAMLは一見シンプルでありながら、不思議なことに一度に圧倒される可能性があります。特に、無限の可能性のあるAnsibleモジュールを自由に使用できると考える場合はなおさらです。 YAMLファイルにいくつかのオプションを書き留めてからAnsibleを実行するのは簡単なようですが、お気に入りのモジュールにはどのようなオプションが必要ですか?また、一部のキーと値のペアがリストであるのに、なぜですか?
YAML for Ansibleは複雑になる可能性があるため、AnsibleモジュールがYAMLにどのように変換されるかを理解することは、両方を改善するための重要な部分です。 YAMLがAnsibleモジュールでどのように機能するかを理解する前に、YAMLの基本を理解する必要があります。
YAMLのマッピングブロックとシーケンスブロックの違いがわからない場合は、YAMLの基本に関するこの簡単な紹介記事をお読みください。
コマンド構文
アドホックな使用とは別に、Ansibleはプレイブックを通じて使用されます。 。プレイブックは、1つ以上のプレイで構成されています 順序付きリスト(YAMLシーケンス )。各プレイで1つ以上のタスクを実行できます 、および各タスクはAnsibleモジュールを呼び出します。
Ansibleモジュールは、基本的にコマンドのフロントエンドです。 LinuxターミナルまたはMicrosoftのPowershellに精通している場合は、オプション(-long
など)を使用してコマンドを作成する方法を知っています。 または-s
)と引数(パラメータとも呼ばれます) 。
簡単な例を次に示します。
$ mkdir foo
このコマンドは、 mkdir
を使用します foo
というディレクトリを作成するコマンド 。
Ansibleプレイブックもコマンドを作成します。これらは同じコマンドですが、端末で使用しているものとは異なる構文を使用して呼び出されます。
[お楽しみいただけるかもしれません:Ansibleの使用を開始する]
AnsibleモジュールとYAML
ただし、Ansibleプレイブックのタスクとして、構文は大きく異なります。まず、演劇に名前が付けられます。これは、演じられていることを人間が読める形式で説明したものです。演劇は、 hosts
を含む多くのキーワードを受け入れます 実行するホストとremote_user
を制限する Ansibleがリモートホストにアクセスするために使用する必要のあるユーザー名を定義します。
演劇のキーワードはAnsible自体によって定義され、Ansible Playキーワードのドキュメントで利用できるキーのリスト(およびそれぞれがその値として期待する情報の種類)があります。
これらのキーは個別のリストアイテムではありません。 YAMLの用語では、マッピングです。 プレイに埋め込まれているシーケンス 。
簡単なプレイ宣言は次のとおりです。
---
- name: “Create a directory”
hosts: localhost
再生宣言の最後のマッピングブロックは、タスク
です。 キーワード。新しいシーケンスを開いて、再生が実行されるAnsibleモジュールと引数を定義します。ここで、なじみのない、YAML化された方法でなじみのあるコマンドを使用しています。実際、それはあなたにはあまり馴染みがないので、モジュールがあなたにどのような議論を期待しているかを発見するために、おそらくモジュールを読む必要があります。
この例では、組み込みのファイルモジュールを使用しています。モジュールのドキュメントから、必要なパラメータが path
であることがわかります。 、有効なPOSIXファイルパスが必要です。その情報を利用して、次のような非常に単純なAnsibleプレイブックを生成できます。
---
- name: "Create a directory"
hosts: localhost
tasks:
- name: "Instantiate"
file:
path: "foo"
YAMLのインデントの重要性にまだ慣れている場合は、タスクの名前がタスク
に対してインデントされていないことに注意してください。 name
新しいYAMLシーケンスブロックの開始です(これは、発生すると、タスク
の値として機能します 鍵)。 file
という単語 タスク定義の一部である、使用されているモジュールを識別し、 path
file
の必須パラメータです モジュール。
つまり、プレイのタスクはYAMLシーケンスブロックです モジュールとそのパラメーターを呼び出す定義の(つまり、順序付きリスト)。
このプレイをテストして、期待どおりに機能することを確認できますが、最初に yamllint
を実行します 構文上の驚きを避けるために、その上に:
$ yamllint folder.yaml || echo “fail”
$ ansible-playbook folder.yaml
[…]
TASK [Instantiate] ******************
fatal: [localhost]:
FAILED! => {“changed”: false,
“msg”: “file (foo) is absent, cannot continue” …
プレイブックは処理されましたが、タスクは失敗しました。 file
のパラメータリストを読む モジュールは、その動作が state
の値に大きく依存することを明らかにしています 。具体的には、デフォルトのアクションは、 path
のステータスを返すことです。 。
サンプルのYAMLファイルを変更してstate
を含めます マッピング:
---
- name: "Create a directory"
hosts: localhost
tasks:
- name: "Instantiate"
file:
path: "foo"
state: directory
成功するためにもう一度実行してください:
$ yamllint folder.yaml || echo “fail”
$ ansible-playbook folder.yaml
[…]
$ ls
foo
制御モジュール
すべてのAnsibleモジュールが単一のコマンドに直接マップされるわけではありません。一部のモジュールは、Ansibleがプレイブックを処理する方法を変更します。たとえば、 with_items
moduleは、別のモジュールで操作するアイテムを列挙します。あなたはそれを一種のdowhile
と考えるかもしれません またはfor
ループ。
そのドキュメントは、アイテムのリストという1つのパラメータのみを受け入れることを示しています。 YAML用語の「リスト」はシーケンスです 、したがって、ドキュメントのサンプルコードを見なくても、各アイテムはダッシュスペースで始まる必要があることがわかります。 (-コード> 。
これがフォルダ作成の新しい反復です。今回は複数のサブフォルダを使用します( recurse
を使用) ファイル
のパラメータ モジュール)およびファイルのアクセス許可を設定するための追加のパラメーター。追加の行にだまされてはいけません。これは基本的に以前と同じコードですが、 file
で説明されている追加のパラメーターがあります。 モジュールのドキュメントに加えて、 with_items
反復を有効にするモジュール:
---
- name: "Create directory structure"
hosts: localhost
tasks:
- name: "Instantiate"
file:
path: "{{ item }}"
recurse: true
mode: "u=rwx,g=rwx,o=r"
state: directory
with_items:
- "foo/src"
- "foo/dist"
- "foo/doc"
プレイブックを実行して結果を確認します:
$ yamllint folder.yaml
$ ansible-playbook folder.yaml
[…]
$ ls foo
dist doc src
[Ansibleについてもっと知りたいですか? RedHatから無料の技術概要コースを受講してください。 Ansible Essentials:自動化の技術概要のシンプルさ。 ]
Ansibleの原則
AnsibleプレイブックはYAMLのシーケンスです 、それ自体はマッピングで構成されています およびシーケンス 。
プレイブックにはAnsibleモジュールも含まれており、各モジュールは開発者が定義したパラメーターを受け入れます。必須パラメータとオプションパラメータの両方がモジュールのドキュメントにリストされています。
Ansibleプレイブックを作成するには、プレイに名前を付けるYAMLシーケンスを開始してから、1つ以上のタスクを(シーケンスで)リストします。各タスクで、1つ以上のモジュールを呼び出すことができます。
YAMLファイルに入力するデータの種類を理解して、インデントに細心の注意を払ってください。 回避すると役立つ場合があります インデントを論理継承の指標と見なし、代わりに、各行をそのYAMLデータ型(つまり、シーケンスまたはマッピング)として表示します。
yamllint
を使用する YAMLファイルを確認します。
プレイブックの構造を理解したら、モジュールのドキュメントに従って、プレイブックで実行するタスクを実行するだけです。利用可能なモジュールは何百もあるので、それらを探索し始めて、この素晴らしいツールで何ができるかを見てください。