BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】AnsibleTowerでPlaybookの実行を行なう

 こんにちは!
 BFT名古屋支店の、佐野です。

 以前にお送りした記事で、AnsibleTowerおよびAWXのできることについて大まかに解説を行ないました。
 今回はより込み入った、かつ基本的な部分として、AnsibleTowerおよびAWXにおけるPlaybook実行の流れの説明と、実行を行なう中で作成する要素についての解説をお送りいたします。
 既にAnsibleTowerやAWXに触れている方にとっては既知も既知の内容であるかもしれませんが、おさらいという形で見て頂ければ幸いです。


はじめに:AnsibleTowerでPlaybookを実行するために必要なもの

 AnsibleTowerにおいて、Playbookの実行は“ジョブ”という実行単位で取りまとめられ、ジョブテンプレートというパラメーターセットでPlaybookの実行に必要な要素をひとつにまとめた後にジョブとして実行することができます。
 このジョブテンプレートを作成する際には、最低限として以下のものが必要となります。

要素 概要
インベントリー 管理対象となるクライアントサーバをグループ単位でまとめたファイル
プロジェクト ローカルディレクトリ内のPlaybookやGitのリポジトリにあるPlaybookをまとめる論理コレクション
Playbook 管理対象に対してAnsible(Tower)で実行する処理を書いたファイル
認証情報 AnsibleTowerで管理対象のクライアントサーバに接続するために必要な鍵ファイルやユーザ名・パスワードをまとめたファイル

 今回は以上の内、Playbookを除いたジョブテンプレート作成に必要な要素の作成についてと、作成したこれらを紐づけたジョブテンプレートの作成とテスト実行までを解説いたします。


インベントリーの作成

 先に触れた通り、インベントリーとはPlaybookを実行する対象となるクライアントを定めるためのファイルとなります。
 Ansibleにおけるインベントリファイルに相当し、設定内容もそれとほぼ同じとなります。
 大きく異なるのは、作成するインベントリーは作成時に属する組織を選択しなければいけないという点です。
 以下で説明するプロジェクト、インベントリ、認証情報は全て何らかの組織に属させる必要があることに注意してください。

 作成手順ですが、まずAnsible Tower管理画面の左ペインにある「インベントリー」をクリックします。

f:id:bftnagoya:20210219183714p:plain

 その後、インベントリ―一覧画面右側から「+」をクリックし、「インベントリ」をクリックします。 

f:id:bftnagoya:20210219183716p:plain

 新規インベントリーの画面に遷移したら、「名前」に作成するインベントリーの名前を入力し、「組織」に作成するインベントリーを属させる組織を選択します。
 その後、画面右下の「保存」をクリックします。

f:id:bftnagoya:20210219183720p:plain

 保存完了後、上部の「ホスト」をクリックします。

f:id:bftnagoya:20210219183723p:plain

 画面右上の「+」をクリックし、ホストの作成画面に遷移します。
 その後管理対象としたいクライアントのホスト名またはIPアドレスを入力し「保存」をクリックします。

f:id:bftnagoya:20210219183726p:plain

f:id:bftnagoya:20210219183729p:plain

 保存完了後「ホスト」をクリックし、管理対象として登録したクライアントのホスト名またはIPアドレスの項が以下のように「オン」になっていることを確認してください。

f:id:bftnagoya:20210219183706p:plain

 左ペインの「インベントリ―」をクリックし、作成したインベントリーが作成できていることを確認してください。

f:id:bftnagoya:20210219183710p:plain


プロジェクトの作成

 Playbookの配置をまとめるための論理コレクションのことをプロジェクトと言います。  AnsibleTower内にあるプロジェクトのベースパスにPlaybookとPlaybookディレクトリーを手動で配置し、利用できるようにするか、
 Gitなどのソースコード管理システムに配置されたPlaybookを引っ張ってくるために定義します。

 ここではAnsibleサーバにあるPlaybookを利用する場合の手順について説明します。
 GitのリポジトリにあるPlaybookを利用するプロジェクトの作成法については以下の記事をご覧頂ければと思います。

bftnagoya.hateblo.jp

AnsibleTowerサーバにあるPlaybookを利用する場合

 プロジェクトのベースパスである/var/lib/awx/projects/配下にPlaybookを保管するディレクトリを作成します。
 そしてAnsibleTowerで実行させたいPlaybookをそのディレクトリ内に配置します。
(この時、PlaybookとPlaybookを配置したディレクトリについて、それらがAnsible(Tower)を実行するユーザおよびグループで所有されており、パーミッションが適切に設定されていること確認してください)

 プロジェクトのSCMタイプで「手動」を選択することにより、以上の方法で配置したディレクトリを選択することができます。
 これにより、そのディレクトリに配置されたPlaybookをプロジェクトに属するPlaybookとして選べるようになります。

 今回は/var/lib/awx/projects/配下にPlaybook保管用ディレクトリを作成した後に実施する手順を解説いたします。
 まずAnsible Tower管理画面の左ペインにある「プロジェクト」をクリックします。

f:id:bftnagoya:20210220205330p:plain

 その後、プロジェクト画面右の「+」をクリックします。

f:id:bftnagoya:20210220205333p:plain

 新規プロジェクトの画面に遷移したら、「名前」に作成するプロジェクトの名前を入力し、「組織」に作成するプロジェクトを属させる組織を選択します。
 「SCMタイプ」は“手動”を選択し、その後表示されるPlaybookディレクトリーで、前もって/var/lib/awx/projects/配下に作成したPlaybookを有するディレクトリーを選択します。
 その後、画面右下の「保存」をクリックします。

f:id:bftnagoya:20210220205337p:plain

 その後、Ansible Tower管理画面の左ペインにある「プロジェクト」をクリックし、作成できていることを確認してください。

f:id:bftnagoya:20210220205340p:plain


認証情報の作成

 クライアントに接続する際に要するSSH秘密鍵やユーザー名、パスワードを登録しておくことで、AnsibleTowerがその情報を使ってクライアントへの接続を行なえるようにするものが、AnsibleTowerにおける認証情報になります。
 以下の手順ではLinuxの管理対象へSSH接続を行なうための秘密鍵を持つ認証情報を作成します。

 まずAnsible Tower管理画面の左ペインにある「認証情報」をクリックします。

f:id:bftnagoya:20210220205344p:plain

 その後、認証情報の画面右の「+」をクリックします。

f:id:bftnagoya:20210220205347p:plain

 新規の認証情報の画面に遷移したら、「名前」に作成する認証情報の名前を入力し、「組織」に作成する認証情報を属させる組織を選択します。
 「認証情報タイプ」では、今回クライアント(PC)の認証情報を作成するため“マシン”を選択します。

f:id:bftnagoya:20210220205350p:plain

 「認証情報タイプ」でマシンを選択後、新たに項目が表示されます。
 「ユーザー名」にAnsibleTowerで管理対象に接続・処理を実行できるユーザーを入力し、「SSH秘密鍵」項目上に管理対象に接続するために必要な秘密鍵ファイル(.pem)をドロップ&ドラッグします。
 以上を入力後、画面右下の保存をクリックします。

f:id:bftnagoya:20210220205353p:plain

 保存完了後、左ペインから「認証情報」をクリックし、認証情報が作成されていることを確認してください。

f:id:bftnagoya:20210220205356p:plain


ジョブテンプレートの作成

 以上の手順で必要な要素がそろいましたので、Playbookを実行するためのパラメータ定義情報であるジョブテンプレートを作成していきます。
 まずAnsible Tower管理画面の左ペインにある「テンプレート」をクリックします。

f:id:bftnagoya:20210220205310p:plain

 その後、テンプレート画面右の「+」をクリックし、「ジョブテンプレート」をクリックします。

f:id:bftnagoya:20210220205313p:plain

 新規ジョブテンプレートの画面に遷移したら、「名前」に作成するジョブテンプレートの名前を入力し、「ジョブタイプ」は“実行”を選択、「インベントリー」および「プロジェクト」、「認証情報」は先までに作成したインベントリーとプロジェクト、認証情報を選択します。
 「Playbook」ではプロジェクト作成時に指定したPlaybookディレクトリの中にあるPlaybookがプルダウンで表示されるため、その中から実行したいPlaybookを選択します。
 「詳細」は実行結果の内容の粒度について、どの程度詳細に表示するかですが、ここでは“3(debug)”を選択します。
 以上項目をすべて入力後、画面右下の「保存」をクリックします。

f:id:bftnagoya:20210220205317p:plain

 その後、Ansible Tower管理画面の左ペインにある「テンプレート」をクリックし、作成したジョブテンプレートが存在することを確認します。
 存在することを確認後、「ロケット」マークをクリックし、テスト実行を行ないます。

f:id:bftnagoya:20210220205321p:plain

f:id:bftnagoya:20210220205323p:plain

 「ジョブ」画面に遷移し、「ステータス」が「成功」になることが確認できたら、ジョブテンプレートの作成と実行のテストが完了となります。

f:id:bftnagoya:20210220205326p:plain


さいごに

 AnsibleTowerおよびAWXにおけるPlaybook実行を行なうための流れ、および必要な要素の作成の手順になります。
 AnsibleTowerではPlaybookはジョブ毎の実行となり、AnsibleのようにインベントリーとPlaybookを逐一指定しての実行とはならないことが示せたかと思います。
 今回解説した手順はAnsibleTowerを扱う上で基本となるものでありますので、一連の流れとして覚えておくとよいかと思います。
 以上、お読みいただきありがとうございました。