Ansibleチュートリアル–Ansibleプレイブックの書き方を学ぶ



このAnsibleチュートリアルブログでは、Ansibleプレイブック、アドホックコマンドを作成し、ハンズオンを実行してNginxをホストマシンにデプロイする方法を学習します。

Ansibleチュートリアル

私の前のブログを読んで学んでいただければ幸いです そしてAnsibleの最もよく使われる用語。まだ読んでいない場合は、このAnsibleチュートリアルをよりよく理解できるようにチェックしてください。また、Ansibleがの重要な部分を構成していることも知っておく必要があります 構成管理、展開、およびオーケストレーションのためのツールとして。

この「Ansibleチュートリアル」の概要を説明します。





AnsiblePlaybookチュートリアル| DevOpsトレーニング|エドゥレカ

Ansibleチュートリアル–Ansibleプレイブックの作成

AnsibleのプレイブックはYAML形式で書かれています。これは、人間が読める形式のデータシリアル化言語です。通常、構成ファイルに使用されます。また、データが保存されている多くのアプリケーションで使用できます。



Ansibleの場合、ほぼすべてのYAMLファイルはリストで始まります。リスト内の各項目は、一般に「ハッシュ」または「辞書」と呼ばれるキーと値のペアのリストです。したがって、YAMLでリストと辞書を作成する方法を知る必要があります。

リストのすべてのメンバーは、「-」(ダッシュとスペース)で始まる同じインデントレベルで始まる行です。値がリストまたは両方の混合である辞書または混合辞書のリストなど、より複雑なデータ構造が可能です。

例えばedurekaの部門のリストについては:



部門:-マーケティング-販売-ソリューション-コンテンツ作成-サポート-製品

それでは、辞書の例を挙げましょう。

-米国-大陸:北アメリカ-首都:ワシントンDC-人口:3億1900万人

ホストとユーザー:

プレイブックのプレイごとに、インフラストラクチャ内のどのマシンをターゲットにし、どのリモートユーザーがタスクを完了するかを選択できます。 Ansibleインベントリにホストを含​​めるために、ホストマシンのIPアドレスを使用します。

通常、ホストは、コロンで区切られた1つ以上のグループまたはホストパターンのリストです。リモートユーザーは、ユーザーアカウントの名前にすぎません。

変数:

Ansibleは、以前に定義された変数を使用して、プレイブックとロールの柔軟性を高めます。これらを使用して、指定された値のセットをループし、システムのホスト名などのさまざまな情報にアクセスし、テンプレート内の特定の文字列を特定の値に置き換えることができます。

Ansibleは、システムごとに個別の豊富な変数セットをすでに定義しています。 Ansibleがシステムで実行されるときはいつでも、システムに関するすべての事実と情報が収集され、変数として設定されます。

しかし、 ルール 変数に名前を付けるため。変数名は、文字、数字、およびアンダースコアである必要があります。変数は常に文字で始まる必要があります。例えば。 wamp_21、port5は有効な変数名ですが、01_port、_serverは無効です。

タスク:

タスクを使用すると、構成ポリシーの一部を小さなファイルに分割できます。タスクには、他のファイルからのプルが含まれます。 Ansibleのタスクは、英語の意味とほぼ同じです。

例:インストール、更新など。

ハンドラー:

ハンドラーはAnsibleプレイブックの通常のタスクと同じですが、タスクに通知ディレクティブが含まれていて、何かが変更されたことを示している場合にのみ実行されます。たとえば、構成ファイルが変更された場合、構成ファイルを参照するタスクがサービス再起動ハンドラーに通知する場合があります。

Apachehttpdサーバープログラムを起動するプレイブックの例を挙げましょう。

----ホスト Webサーバー その http_port 80 最大クライアント 200 remote_user ルート タスク - 名前 Apacheが最新バージョンであることを確認してください ヤム name = httpd state = latest - 名前 apache構成ファイルを書き込む テンプレート src = / srv / httpd.j2 dest = / etc / httpd.conf 通知する - Apacheを再起動します - 名前 Apacheが実行されていることを確認します(そして起動時に有効にします) サービス 名前= httpd状態=開始可能=はい ハンドラー - 名前 Apacheを再起動します サービス name = httpd state = restarted

この例が、私が上で述べたプレイブックコンポーネントのすべての説明に関連していることを願っています。それでもはっきりしない場合でも、このブログの後半で疑問がすべて明らかになることを心配しないでください。

これはすべてプレイブックについてです。あなたが書くプレイブック。ただし、Ansibleには、使用できるさまざまなモジュールも用意されています。

Ansibleチュートリアル–モジュール

Ansibleのモジュールはべき等です。 RESTfulサービスの観点から、操作(またはサービス呼び出し)がべき等であるために、クライアントは同じ結果を生成しながら同じ呼び出しを繰り返し行うことができます。つまり、複数の同一のリクエストを行うことは、単一のリクエストを行うことと同じ効果があります。

Ansibleにはさまざまなタイプのモジュールがあります

  • コアモジュール
  • エクストラモジュール

コアモジュール

これらはコアAnsibleチームが維持するモジュールであり、常にAnsible自体に同梱されます。また、すべてのリクエストに対して、「エクストラ」リポジトリよりもわずかに高い優先度を受け取ります。

これらのモジュールのソースは、Ansible-modules-coreのGitHubでAnsibleによってホストされています。

エクストラモジュール

これらのモジュールは現在Ansibleに同梱されていますが、将来は個別に出荷される可能性があります。また、ほとんどがAnsibleコミュニティによって管理されています。非コアモジュールは引き続き完全に使用できますが、問題やプルリクエストに対する応答率がわずかに低くなる可能性があります。

人気のある「エクストラ」モジュールは、時間の経過とともにコアモジュールに昇格する可能性があります。

これらのモジュールのソースは、Ansible-modules-extrasのGitHubでAnsibleによってホストされています。

例:リモート管理モジュールの追加モジュールの1つはipmi_powerモジュールです。これは、リモートマシンの電源マネージャーです。実行するには、python2.6以降とpyghmiが必要です。

このモジュールを使用するには、以下に記述したようなアドホックコマンドを記述します。

ipmi_power:name = 'test.domain.com' user = 'localhost' password = 'xyz' state = 'on'

Ansibleチュートリアル–戻り値

Ansibleモジュールは通常、変数に登録できるデータ構造を返すか、Ansibleプログラムによって出力されたときに直接表示されます。各モジュールは、オプションで独自の戻り値を文書化できます。

戻り値の例は次のとおりです。

  • 変更:タスクが変更を加えるたびにブール値を返します。
  • failed:タスクが失敗した場合、ブール値を返します
  • msg:ユーザーに中継される一般的なメッセージを含む文字列を返します。

Ansibleチュートリアル–アドホックコマンド

アドホックコマンドは、何らかのアクションを実行するための単純な1行のコマンドです。 Ansibleコマンドで実行中のモジュールはアドホックコマンドです。

例えば:

ansible host -m netscaler -a'nsc_host = nsc.example.com user = apiuser password = apipass ' 

上記のアドホックコマンドは、netscalerモジュールを使用してサーバーを無効にします。 Ansibleには、アドホックコマンドを参照および記述できるモジュールが何百もあります。

さて、すべての理論的な説明で十分ですが、いくつかのハンズオンでAnsibleについて説明しましょう。

Ansibleチュートリアル–ハンズオン

ノード/ホストマシンにNginxをインストールするためのプレイブックを作成します。

さぁ、始めよう :)

ステップ1: SSHを使用してホストに接続します。そのためには、公開SSHキーを生成する必要があります。

以下のコマンドを使用します。

ssh-keygen

Sshキーの生成-Ansibleチュートリアル-Edureka

上のスナップショットでわかるように、コマンド ssh-keygen 公開SSHキーを生成しました。

ステップ2: 次のタスクは、ホストに公開SSHキーをコピーすることです。これを行うには、次のコマンドを使用します。

ssh-copy-id -i root @

上のスナップショットは、ホストにコピーされているSSHキーを示しています。

ステップ3: インベントリ内のホスト/ノードのIPアドレスを一覧表示します。

次のコマンドを使用します。

vi / etc / ansible / hosts

これにより、ホストのIPアドレスを一覧表示できるviエディターが開きます。これがあなたの在庫です。

ステップ4: 接続が確立されていることを確認するためにpingを実行しましょう。

上記のスナップショットは、制御マシンとホストの間で接続が確立されたことを確認します。

ステップ5: 次に、ホストマシンにNginxをインストールするためのプレイブックを作成しましょう。プレイブックはviエディターで書くことができます。そのためには、次のコマンドを使用して、プレイブックを作成するだけです。

vi

以下のスナップショットは、YAML形式で記述されたNginxをインストールするための私のプレイブックを示しています。

プレイブックのタスクは、YAMLで辞書のリストとして定義され、上から下に実行されます。複数のホストがある場合、次のホストに進む前に、各タスクがホストごとに試行されます。各タスクは、タスクの名前とsudo特権が必要かどうかを示す「name」や「sudo」などの複数のキーを持つことができる辞書として定義されます。

変数 サーバポート TCPポートでリッスンするように設定されています 8080 着信リクエストの場合。

ここでの最初のタスクは、Nginxのインストールに必要なパッケージを取得してからインストールすることです。内部的には、Ansibleはディレクトリが存在するかどうかを確認し、存在しない場合は作成します。存在しない場合は何もしません。

次のタスクはNginxを構成することです。Nginxでは、コンテキストに構成の詳細が含まれています。

ここで、テンプレートはホストにデプロイできるファイルです。ただし、テンプレートファイルには、Ansibleプレイブックの一部として定義された変数またはホストから収集されたファクトから取得されたいくつかの参照変数も含まれています。構成の詳細を含むファクトは、ソースディレクトリからプルされ、宛先ディレクトリにコピーされています。

Javaのクラスとインターフェイスの違い

ここでのハンドラーは、タスクまたは状態の変更の通知時にのみ実行されるアクションを定義します。このプレイブックでは、通知を定義しました。ファイルとテンプレートがホストにコピーされるとNginxを再起動するNginxハンドラーを再起動します。

ここで、ファイルを保存して終了します。

ステップ6: 次に、以下のコマンドを使用して、このプレイブックを実行しましょう。

ansible-playbook .yml

上のスクリーンショットで、タスクが実行され、Nginxがインストールされていることがわかります。

ステップ7: Nginxがホストマシンにインストールされているかどうかを確認しましょう。以下のコマンドを使用します。

ps waux | grep nginx

上のスクリーンショットを見ると、異なるプロセスID 3555と103316が実行されていることがわかります。これにより、Nginxがホストマシンで実行されていることが保証されます。

おめでとう! これで、Ansibleプレイブックを使用してNginxをホストに正常にデプロイできました。このAnsibleチュートリアルブログを楽しんでいただけたでしょうか。下記のコメント欄にご不明な点がございましたら、お気軽にお問い合わせください。

これを見つけたら「 Ansibleチュートリアル 」関連、 チェックアウト 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 Edureka DevOps認定トレーニングコースは、学習者がSDLCの複数のステップを自動化するためのPuppet、Jenkins、Ansible、Nagios、GitなどのさまざまなDevOpsプロセスとツールに関する専門知識を習得するのに役立ちます。