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

AnsibleのYAMLを理解する

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ファイルを確認します。

プレイブックの構造を理解したら、モジュールのドキュメントに従って、プレイブックで実行するタスクを実行するだけです。利用可能なモジュールは何百もあるので、それらを探索し始めて、この素晴らしいツールで何ができるかを見てください。


Linux
  1. 初心者向けのYAML

  2. Linuxシステム管理のためのAnsibleの役割の簡単な紹介

  3. クラウドサーバーのRAMを理解する

  1. 自動化のためにAnsibleとanacronを使用する方法

  2. オープンソースセキュリティに関するリーナスの法則を理解する

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

  1. ジュニアシステム管理者向けのテクノロジーを知る必要がある

  2. Linuxシステム管理者向けのAnsibleの謎を解き明かす

  3. 静的IPのNetplanYamlの例が必要ですか?