#はじめに
Exastro IT Automationは、システム情報を構成管理、自動化するためのフレームワークです。
システムに実行する手順をコード化(IaC)し、代入されるパラメータを構成管理することで、システム情報を見える化し、構築・運用の自動化を効率的に実現することができるツールとなっています。
今回はExastro IT Automation(以下、ITA)を体感できるクイックスタートとして、ITAの標準的な連携機能であるAnsibleドライバを使って、Linuxサーバ構築でよく行うyumパッケージのインストール作業を構築対象サーバごとにパラメータ管理し、構築作業の自動化を実施してみます。
ITAのインストールや利用方法の詳細については、以下のサイトを読んでみてください。
- [Exastro IT Automationをインストールしてみた(v1.8.0)] (https://qiita.com/standsetx/items/53553a0f78edc3097812)
- Exastro IT Automation ver1.8の新機能をまとめてみた
- [Exastroコミュニティ (Github)] (https://exastro-suite.github.io/it-automation-docs/index_ja.html)
- [利用手順マニュアル メニュー作成機能] (https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_メニュー作成機能.pdf)
- システム構築・運用の効率化ガイドブック
###作業環境
- Exastro IT Automation 1.8.0
- CentOS Linux 7.8(ITAサーバ用)
- CentOS Linux 7.8(ターゲットマシン用)
- Windows 10(クライアント)
- Google Chrome (Win10側)
#今回紹介するシナリオ
自動化するための作業には、仕込みとして1度だけ実施すべき作業と、繰り返し実施する作業があります。
今回のシナリオでは、1~4が仕込みの作業にあたります。5を行い6~9,10~13は繰り返し実施する作業にあたります。
【仕込編】
- Playbookをアップロードしてジョブ(Movement)に紐付ける
- ジョブ(Movement)をジョブフロー(Conductor)に組み込む
- CMDBにパラメータシートを設定
- パラメータシートの項目とPlaybookの変数の紐付け
【実行編(1回目)】
5. ITAのCMDBの機器一覧(デフォルト)にターゲットとなるLinuxマシンを登録
6. 作業名(Operation)の登録
7. パラメータシートにデータを登録
8. ジョブフロー(Conductor)の実行
9. 実行結果の確認
【実行編(2回目)】
10. 作業名(Operation)の登録
11. パラメータシートにデータを登録
12. ジョブフロー(Conductor)の実行
13. 実行結果の確認
【参考】
CMDBパラメータの履歴管理の方法
今回は以下のPlaybookを利用します。
- name: install the latest version of packages
yum:
name: "{{ item }}"
state: latest
with_items:
- "{{ VAR_packages }}"
#【仕込編】
##1. Playbookをアップロードしてジョブ(Movement)に紐付ける
###1.1 Movementを登録
まずはMovementの登録を行っていきます。
「Ansible-Legacy」メニューグループ >> 「Movement一覧」メニューを選択します。
登録するデータは以下になります。
Movement名 | ホスト指定形式 |
---|---|
パッケージインストール | IP |
「登録」ボタンをクリックして登録します。
###1.2 Playbookアップロード
次にPlaybookのアップロードを行います。
「Ansible-Legacy 」メニューグループ >> 「Playbook素材集」メニューを選択して、用意しておいたyum_package_install.yml
をPlaybook素材へアップロードします。
登録するデータは以下になります。
Playbook素材名 | Playbook素材 |
---|---|
yum_package_install | yum_package_install.yml |
ファイル選択からPlaybookをアップロードした際に事前アップロードを押さないとうまく登録が行えないため注意してください。
アップロード情報が表示されていることを確認し「登録」ボタンをクリックして登録します。
###1.3 アップロードしたPlaybookをMovementに紐付け
次にアップロードしたPlaybookをMovementに紐付けます。
「Ansible-Legacy 」メニューグループ >> 「Movement-Playbook紐付」メニューを選択します。
登録するデータになります。
Movement | Playbook素材 | インクルード順序 |
---|---|---|
1:パッケージインストール | yum_package_install | 1 |
「登録」ボタンをクリックして登録します。
****
##2. ジョブ(Movement)をジョブフロー(Conductor)に組み込む
次にMovementをConductorに組み込んでいきます。
「Conductor」メニューグループ >> 「Conductorクラス編集」メニューを選択します。
最初にConductor名と説明の入力を行います。
登録するデータは以下になります。
Conductor名 | 説明 |
---|---|
パッケージインストール | パッケージインストール(サンプル) |
次に右側のMovementタブから作成したMovementをドラッグ&ドロップします。
Start - Movement - Endの順で線をつなぎ「登録」ボタンをクリックして登録します。
##3. CMDBにパラメータシートを設定
パラメータシートの設定を行う前にITAのメニューグループとメニューの関係について、整理してみました。
下図のように、メニューグループ内にたくさんのメニューが入っていて、メニュー=パラメータシートと考えてよいと思います。
今回はクイックスタートなのでデフォルトのメニューグループ(入力用、代入値登録用、参照用)を使用しますが、自分でメニューグループやメニューを作成することが可能です。
詳しくは、ITAの利用手順マニュアル メニュー作成機能を参照ください。
###3.1 パラメータシートを作成する
パラメータシートの作成を行います。
「メニュー作成」メニューグループ >> 「メニュー定義/作成」メニューを選択します。
登録するデータは以下になります。
メニュー名 | 作成対象 | 表示順序 |
---|---|---|
インストールパッケージ一覧 | パラメータシート(ホスト/オペレーション含む) | 1 |
次にカラムグループを作成します。
登録するグループ名になります。
グループ名 |
---|
インストールパッケージ |
グループが作成出来たら項目を作成していきます。
登録するデータは以下になります。
今回はプルダウン選択内にデフォルトで用意されているメニュー作成:選択1:*-(ブランク)を利用します。
「*」を選択するとインストールの対象、「ブランク(空白)」を選択するとインストールの対象外といった形で使用することができます。
項目名 | 入力方式 | 選択項目 |
---|---|---|
httpd | プルダウン選択 | メニュー作成:選択1:*-(ブランク) |
mariadb-server | プルダウン選択 | メニュー作成:選択1:*-(ブランク) |
php | プルダウン選択 | メニュー作成:選択1:*-(ブランク) |
perl | プルダウン選択 | メニュー作成:選択1:*-(ブランク) |
python | プルダウン選択 | メニュー作成:選択1:*-(ブランク) |
次に先ほど作成したカラムグループの領域に項目をドラッグ&ドロップしていきます。
以下の図のように設定ができたら、「作成」ボタンをクリックして作成します。
パラメータシートの確認方法
##4. パラメータシートの項目とPlaybookの変数の紐付け
仕込偏の最後にパラメータシートの項目とPlaybookの変数を代入値自動登録にて紐付けます。
一度紐付け設定を行っておけば、パラメータシートにデータを登録するだけで、Playbook実行時に登録データが利用できます。
代入値自動登録の1つのポイントとして、変数紐づけの登録方式は以下の3タイプがあります。
登録方式 | 今回使用 | 説明 |
---|---|---|
Value型 | 基本的なタイプであり、表の中の値を変数に紐づけるものです。 | |
Key型 | ● | 表の項目(列名)を変数に紐づけるものです。 項目の設定値が空白の場合は紐づけ対象外になります。 |
Key-Value型 | 項目の名称(Key)と設定値(Value)の両方を変数に紐づけることができます。 |
今回のシナリオでは、表の項目(列名)をPlaybookに具体値として代入したいので、登録方式は「Key型」を選択します。
詳細はこちらシステム構築・運用の効率化ガイドブックを参照してください。
それでは実際に登録をしていきます。
「Ansible-Legacy」メニューグループ >> 「代入値自動登録設定」メニューを選択します。
登録するデータは以下になります。
メニューグループ:メニュー | 項目 | 登録方式 | Movement | Key変数 変数名 |
代入順序 |
---|---|---|---|---|---|
2100011611:代入値自動登録用:2:インストールパッケージ一覧 | パラメータ/インストールパッケージ/httpd | Key型 | 1:パッケージインストール | 1:VAR_packages | 1 |
2100011611:代入値自動登録用:2:インストールパッケージ一覧 | パラメータ/インストールパッケージ/mariadb-server | Key型 | 1:パッケージインストール | 1:VAR_packages | 2 |
2100011611:代入値自動登録用:2:インストールパッケージ一覧 | パラメータ/インストールパッケージ/php | Key型 | 1:パッケージインストール | 1:VAR_packages | 3 |
2100011611:代入値自動登録用:2:インストールパッケージ一覧 | パラメータ/インストールパッケージ/perl | Key型 | 1:パッケージインストール | 1:VAR_packages | 4 |
2100011611:代入値自動登録用:2:インストールパッケージ一覧 | パラメータ/インストールパッケージ/python | Key型 | 1:パッケージインストール | 1:VAR_packages | 5 |
「登録」ボタンをクリックして登録します。
表示フィルタを開き、「フィルタ」ボタンをクリックすると登録したデータを確認することができます。
5件のデータが登録できていることを確認してください。
ここまでで仕込偏は終了になります。
#【実行編1回目】
##5. ITAのCMDBの機器一覧(デフォルト)にターゲットとなるLinuxマシンを登録
最初にターゲットとなるLinuxマシンを登録を行います。
「基本コンソール」メニューグループ >> 「機器一覧」メニューを選択します。
登録しなければならない項目は以下になります。各自で用意したターゲットサーバーの情報を入力してください。
HW機器種別 | ホスト名 | IPアドレス | ログインユーザID | ログインパスワード 管理 |
ログインパスワード | Legacy/Role利用情報 認証方式 |
---|---|---|---|---|---|---|
SV | (任意のホスト名) | (任意のIPアドレス) | (任意のログインユーザID) | ● | (任意のパスワード) | パスワード認証 |
「登録」ボタンをクリックして登録します。
##6. 作業名(Operation)の登録
次にOperationの登録を行います。
「基本コンソール」メニューグループ >> 「オペレーション一覧」メニューを選択します。
登録するデータは以下になります。
オペレーション名 | 実施予定日時 |
---|---|
オペレーション1 | (任意の実行予定日時) |
「登録」ボタンをクリックして登録します。
##7. パラメータシートにデータを登録
次にターゲットマシンに設定するデータの登録を行います。
データの登録先はパラメータシート(インストールパッケージ一覧)です。
「入力用」メニューグループ >> 「インストールパッケージ一覧」メニューを選択します。
登録するデータは以下になります。
ホスト名 | オペレーション | httpd | mariadb-server | php | perl | python |
---|---|---|---|---|---|---|
(機器登録で登録したホスト名) | (選択した実行予定日時)_1:オペレーション1 | * | * | * | * |
「登録」ボタンをクリックして登録します。
代入値自動登録設定の時と同様に表示フィルタを開き、「フィルタ」ボタンをクリックすると登録したデータを確認することができます。
データに間違いがないかを確認してください。
##8. ジョブフロー(Conductor)の実行
ここまで色々と登録や作成を行ってきましたがいよいよ実行になります。
「Conductor」メニューグループ >> 「Conductor作業実行」メニューを選択します。
次に作成したジョブフロー(Conductor)と作業名(Operation)のラジオボタンを選択します。
最後に「実行」ボタンをクリックして実行します。
ジョブフロー(Conductor)が正常終了すると、以下の画面が表示されターゲットマシンへの設定も完了です。
ジョブ(Movement)を選択し、Doneのアイコンまたは右側のOperation statusをクリックすると詳細を確認することができます。
詳細画面のInputDataから実行時のPlaybook一式(host_varsやinventryを含む)をダウンロードできます。
また、ResultDataから実行結果をダウンロードできます。
##9. 実行結果の確認
前の手順で表示した詳細画面の進行状況(実行ログ)でAnsibleの実行ログを確認することができます。
今回オペレーション1ではhttpd,php,perl,pythonをインストールをするように設定を行いました。
以下は実行ログから抽出したログの一部になります。
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
Installed:
httpd.x86_64 0:2.4.6-97.el7.centos
Dependency Installed:
httpd-tools.x86_64 0:2.4.6-97.el7.centos mailcap.noarch 0:2.1.41-2.el7
Complete!
"]}
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
Installed:
php.x86_64 0:5.4.16-48.el7
Dependency Installed:
libzip.x86_64 0:0.10.1-8.el7 php-cli.x86_64 0:5.4.16-48.el7
php-common.x86_64 0:5.4.16-48.el7
Complete!
"]}
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
Updated:
perl.x86_64 4:5.16.3-299.el7_9
Dependency Updated:
perl-libs.x86_64 4:5.16.3-299.el7_9
Complete!
"]}
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
Updated:
python.x86_64 0:2.7.5-90.el7
Dependency Updated:
python-libs.x86_64 0:2.7.5-90.el7
Complete!
"]}
PLAY RECAP *********************************************************************
hostA : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ログを確認すると新たにhttpdとphpがインストールされたことが確認できます。
また既にCentOS7にデフォルトでインストールされているparlとpythonはバージョンアップを行ったことが確認できます。
以下のようにターゲットマシンでも、パッケージがインストールできていることを確認できます。
$ yum list installed httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* extras: ftp-srv2.kddilabs.jp
* updates: ftp-srv2.kddilabs.jp
Installed Packages
httpd.x86_64 2.4.6-97.el7.centos @updates
#【実行編2回目】
2回目で行う作業は実行1回目の6~9と同じになります。それぞれ登録するデータが異なるので間違えないよう注意してください。
##10. 作業名(Operation)の登録
Orerationの登録を行います。
登録するデータは以下になります。実施予定日時は1回目で登録した日時よりも後の日時を選択してください。
オペレーション名 | 実施予定日時 |
---|---|
オペレーション2 | (任意の実行予定日時) |
##11. パラメータシートにデータを登録
次にパラメータシートにデータを登録していきます。
登録するデータは以下です。
ホスト名 | オペレーション | httpd | mariadb-server | php | perl | python |
---|---|---|---|---|---|---|
(一回目に選択した時と同じホスト名) | (選択した実行予定日時)_1:オペレーション2 | * | * | * | * | * |
##12. ジョブフロー(Conductor)の実行
それでは実行していきましょう。
ジョブフロー(Conductor)と2回目で作成した作業名(Operation)のラジオボタンを選択し実行ボタンをクリックします。
##13. 実行結果の確認
実行結果の確認を行っていきます。
1回目と同様にAnsibleの実行ログを開きます。
以下は実行ログから抽出したログの一部になります。
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
"results": ["All packages providing httpd are up to date",
""]}
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
Installed:
mariadb-server.x86_64 1:5.5.68-1.el7
Dependency Installed:
mariadb.x86_64 1:5.5.68-1.el7
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
perl-DBD-MySQL.x86_64 0:4.023-6.el7
perl-DBI.x86_64 0:1.627-4.el7
perl-IO-Compress.noarch 0:2.061-2.el7
perl-Net-Daemon.noarch 0:0.48-5.el7
perl-PlRPC.noarch 0:0.2020-14.el7
Dependency Updated:
mariadb-libs.x86_64 1:5.5.68-1.el7
Complete!
"]}
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
"results": ["All packages providing php are up to date",
""]}
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
"results": ["All packages providing perl are up to date",
""]}
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~~
"results": ["All packages providing python are up to date",
""]}
PLAY RECAP *********************************************************************
hostA : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
オペレーション2ではすべての項目で*を選択して実行しました。
新たにmariadbのインストールを行った為、インストールや他のパッケージとの依存関係の解決を行ったことが確認できます。
また他の4つのパッケージ(htpd,php,perl,python)は既にインストール済みでしたが、Ansible実行の「冪等性」の特性によりエラーにはならず、バージョンアップの確認が行われすべて最新版だったことが確認でき、サーバ状態が保たれたことをがわかります。
#【参考】CMDBパラメータの履歴管理の方法
ITAではCMDBに「誰が・いつ・何をしたのか?」を履歴管理し、その時の時点でシステムのパラメータはどうなっているのかを抽出できる機能があります。
今回実施したデータを参照していきます。
「参照用」メニューグループ >> 「インストールパッケージ一覧」メニューを選択します。
まずは基準日時を指定せずにフィルタをクリックしてみます。
現時点での最新のデータが表示されることが確認できます。
次に2回目の実行を行った日時より前の日時でフィルタをしてみます。
1回目の実行結果が表示されることが確認できます。
最後に1回目に実行した日時より前の日時でフィルタをしてみます。
1回目の設定も行っていないため、何も表示されないことが確認できます。
このようにパラメータの履歴管理をすることにより、設計者や運用者がストレスなくシステム更改を行えることがITAの魅力の一つです。
#まとめ
今回はクイックスタートとしてLinuxのパッケージインストールを、1台のサーバへ自動構築してみましたが、以下のように複数機器に対し、登録内容を変えて構成管理・同時実行するも可能です。
ホスト名 | オペレーション | httpd | mariadb-server | php | perl | python |
---|---|---|---|---|---|---|
hostA | オペレーション1 | * | * | * | * | |
hostA | オペレーション2 | * | * | * | * | * |
hostB | オペレーション2 | * | * | * | ||
hostC | オペレーション2 | * | * | * | ||
hostD | オペレーション2 | * |
さらに今回と同様の作業で、例えばコンフィグファイルの設定値変更やサービスの有効化・起動などを自動化することが可能だと思いますので、ぜひ実際に実行してみてください。
#関連リンク
- [Exastro IT Automationをインストールしてみた(v1.8.0)] (https://qiita.com/standsetx/items/53553a0f78edc3097812)
- Exastro IT Automation ver1.8の新機能をまとめてみた
- [Exastroコミュニティ (Github)] (https://exastro-suite.github.io/it-automation-docs/index_ja.html)
- [利用手順マニュアル メニュー作成機能] (https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_メニュー作成機能.pdf)
- システム構築・運用の効率化ガイドブック