Ansibleプレイブックファイルを作成する過程で、既存のプレイブックで定義されているコードの一部を再利用できることに気付いたかもしれません。たとえば、別のリモートホストのホスト名、ユーザー、パスワードが異なる1つの管理対象ホストにMariaDBデータベースサーバーをインストールするためのコードを再利用できます。これにより、新しいプレイブックファイルを最初から作成する際に使用されていた時間とエネルギーを大幅に節約できます。そして、ここでAnsibleの役割の概念が登場します。
Ansibleの役割は、タスクを個々のファイルに転用するという概念であり、管理と操作が簡単です。各ロールは、その実装に必要な一連のタスク、変数、およびハンドラーを提供します。ロールを使用すると、ユーザーは長くて複雑なプレイブック構造を、より単純で、より短く、よりすっきりとしたプレイブックファイルに再編成できます。前述したように、ロールは再利用可能であることが意図されており、プレイブックファイルでロールを呼び出すと、コードが簡素化され、重複がなくなります。アプリケーションのインストールや構成などの反復的なタスクは、個別のファイルにパッケージ化して、さまざまな管理対象ホスト間で再利用できます。
このガイドでは、プレイブックでAnsibleロールを作成して使用する方法を学習します。デモンストレーションのために、Apache Webサーバーをインストールし、ポート80を開くようにファイアウォールを構成する役割を作成します。
Ansibleロールを作成する方法
まず、単純なAnsibleロールを作成します。ロールを作成するには、以下のコマンド構文を使用します。ここで myrole 役割の名前です。
$ ansible-galaxy init myrole
たとえば、 test_roleというロールを作成するには コマンドを呼び出します。
$ ansible-galaxy init test-role
出力から、コマンドが test-roleを生成することがわかります。 ディレクトリであり、デフォルトでは、いくつかのデフォルトディレクトリが含まれています。 ツリーを使用できます 示されているようにそれらをリストするコマンド。
$ tree test-role
各ディレクトリに含まれる内容の概要を説明しましょう
「デフォルト ’フォルダ–このディレクトリには、ロールに必要なデフォルトの変数が保持されます。これらの変数の優先度は最も低いため、オーバーライドするのは非常に簡単です。
「ファイル ’フォルダ–このフォルダは、管理対象ホストまたはリモートホストにコピーされるファイルで構成されます。
「ハンドラー ’フォルダ–ディレクトリには、通常「notify」ディレクティブによって呼び出されるハンドラが含まれています。 Ansibleハンドラーについて詳しく知ることができます。
「メタ ’フォルダ–インスタンスの作成者、依存関係などのロールのメタデータで構成されます。
「タスク ’フォルダー–ロール自体によって実行されるタスクのリストを定義するYAMLファイルが含まれています。 main.ymlが含まれています ファイル。
「テンプレート ’フォルダ–ディレクトリは、役割を構成するのに適していると見なされるように変更できるテンプレートファイルで構成されています。
「テスト ’フォルダ–テストをAnsibleプレイブックファイルと統合します。
「変数 ’フォルダ–後でロールによって使用される変数で構成されます。役割。これらの変数は、「デフォルト」の変数と比較して優先度が高くなります ’ディレクトリ。
デモンストレーションの目的で2つの役割を作成します。
git 役割–これにより最新バージョンのGitがインストールされます。
apache 役割-これにより、ApacheWebサーバーがインストールされます
次のように作成します:
$ sudo ansible-galaxy init git
$ sudo ansible-galaxy init apache
その後、 main.yml を編集して、各役割を定義する必要があります。 「タスク」のファイル 各役割の’フォルダ。 gitを定義することから始めましょう 役割。
$ sudo vim git/tasks/main.yml
図のようにgitロールのタスクを定義します。
main.ymlを保存します ファイルを作成して終了します。
次に、Apacheロールのタスクを定義します。
$ sudo vim apache/tasks/main.yml
ApacheWebサーバーをインストールするタスクを指定します。
同様に、 main.ymlを保存します ファイルを作成して終了します。
プレイブックファイルを作成し、役割を呼び出します
各役割のタスクがmain.ymlで定義されたら 各役割のファイルを作成し、プレイブックファイルを作成して、図のように役割を参照します。
$ sudo vim roles_demo.yml
注:
プレイブックで役割へのフルパスを指定する必要があります。
役割:
- / path / to / role
この例では、ロールはプレイブックファイルと同じディレクトリにあり、名前で呼び出すだけでうまくいきます。
最後に、プレイブックファイルを実行します。
$ sudo ansible-playbook /etc/ansible/roles_demo.yml
プレイブックファイルで定義された役割が参照され、それぞれのタスクが実行されます。ここで、AnsibleはgitとApacheWebサーバーの両方をインストールします。
表示されているコマンドを実行して、インストールを確認できます。
$ git --version
$ apachectl -v
お気づきのとおり、タスクはプレイブックファイルで指定された役割によって参照されているため、プレイブックファイルは簡潔でわかりやすくなっています。
まとめ
Ansibleの役割は、プレイブックファイルの整理に役立ち、コードの重複を回避するのに役立ちます。それらを再利用して他のプレイブックファイルで参照し、異なるノードで同様のタスクを実行できるため、新しいプレイブックの作成に使用できた時間とエネルギーを節約できます。全体として、役割によって作業が容易になります。