仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

システム設定をデジタル化して一元管理するためのオープンソースのフレームワーク「Exastro ITA」を触ってみる

Exastro IT Automationはシステム設定をデジタル化して一元管理するためのオープンソースのフレームワークです。元々はNECが開発したソフトウェアですが、現在はオープンソースで開発されています。

機能は大きく分けて2つで、インフラ構築のための設計書の管理機能と、様々な自動化ソフトウェアを介した自動実行という機能が存在します。代表的な自動化ソフトウェアとしてはAnsibleやAnsible Tower、Terraform、Cobbler等が存在します。

f:id:virtualtech:20211006160449p:plain

構成図はExastro IT Automation の概要より引用。

概要

Exastro IT Automation はシステム構築を取り巻く次のような問題を解決できるツールです。

  • データ多重管理による設計ミス
  • 複雑な人手作業によるオペレーションミス
  • 作業記録不足による障害対応の遅延

データはExastro ITAのパラメータシートを使って一括管理できます。 処理を記述するコードはExastro ITAで管理できます。コードを修正したら再度Exastro ITAにアップロードするだけで利用可能になります。

構築作業は自動による実行が可能です。実行状況はWebベースのインターフェイスでわかりやすく表示できます。作業記録も管理でき、作業可否のレポートもきっちり残します。

現在のExastro ITA 1.8系では、自動化ソフトウェアとしてAnsible Core、Ansible Tower、Terraform、Cobblerを実行するドライバーが用意されています。

インストール

インストール方法は公式サイトにいろいろな方法がまとめられています。ちょっと触ってみたい場合は、スクリプトを使ってインストールする方法やコンテナーで動かす方法があります。

セットアップスクリプトを利用

RHEL 7,8 or CentOSの7,8,8-Streamがサポートされています。

最新バージョンをGitHubのreleasesで確認します。バージョン1.8.1が現時点では最新です。

以下のようにセットアップします。 RHEL,CentOS以外の他ディストリビューションで動かしてみたい場合はコンテナーで実行してみてください。

curl -OL https://github.com/exastro-suite/it-automation/releases/download/v1.8.1/exastro-it-automation-1.8.1.tar.gz
tar zxf exastro-it-automation-1.8.1.tar.gz
cd it-automation-1.8.1/ita_install_package/install_scripts

(アンサーファイル ita_answers.txt を編集)

sh ita_installer.sh

アンサーファイルについて

最低限必要なのは、linux_osの指定とデータベースのrootパスワードやDB名、DBユーザーとパスワードの指定、インストールしたいコンポーネントの指定です。CobblerとCI/CD for IaC機能がオプションで追加インストールできます。

RHELのOSにExastro ITAをインストールする場合は、インストールスクリプトの実行前に事前にサブスクリプション登録をしておく必要があります。CentOSの場合は特に事前に必要な作業はありません。

コンテナーで実行

ホストにDockerもしくはPodmanを事前にインストールしてから実行します。Dcokerの場合は以下のように実行します。Podmanの場合はdockerコマンドをpodmanに置き換えて実行してください。

docker run --privileged --add-host=exastro-it-automation:127.0.0.1 -d -p 8080:80 -p 10443:443 --name exastro01 docker.io/exastro/it-automation:1.8.1-ja

 ログイン

デフォルトのユーザーとパスワードは以下のようになっているので、それぞれ入力してログインすると、パスワードの変更を求められます。現在のパスワードに「password」を入力して、適切なパスワードを設定します。

デフォルトユーザー:administrator パスワード:password

すると、次のような画面に切り替わります。Exastro ITAのセットアップは完了です。

f:id:virtualtech:20211006160609p:plain

Ansible Driverを使ってみる

Ansibleを使うには、クライアントマシンにAnsibleをインストールすると思いますが、Exastro ITAの場合はExastro ITAサーバーにAnsible環境が自動でセットアップされた状態になりますので、これらのコード実行のために各クライアントにAnsibleをインストールする必要はありません。インベントリーやPlaybookもExastro ITAのデータボリュームに格納されます。

この自動化のためにクライアントマシンには何もセットアップする必要が無いというのはExastro ITAの良いところだと思います。

Ansibleを使った構築の自動化を利用する前に、対象のノードを登録する必要があります。

機器登録

機器登録の画面で、対象のノードを登録していきます。SSH接続が可能なサーバーを事前に用意しておきます。パスワード認証もしくは公開鍵認証でアクセスできる環境を用意します。パスフレーズのあるなしのいずれもサポートしています。対象のノードでは指定したユーザーでsudoコマンドが実行できる設定になっている必要があります。

f:id:virtualtech:20211006160828p:plain

対象のサーバーが多い場合は、機器登録の画面からノード登録用のExcelファイルをダウンロードできるので、それにノード情報を記述してアップロードすることで、ノードの一括登録が可能になっています。

Exastro ITAでPlaybookを実行するために

対象のホストが登録できたので、さっそくAnsible Driverを使って自動化をしてみましょう。まずその前に、登録したサーバーに対してExastro ITAノードからpingを実行してみたいのと思います。

必要なのはPingを実行するコードを書いたPlaybookとExastro ITAです。

Exastro ITAではオペレーション、Movement、Symphony、ConductorといったExastro ITA独自のコンポーネントがいくつか存在します。

オペレーションとは

ジョブと(ジョブによりますが)変数に対する具体値の束を管理するためのものです。

Movementとは

Exasro ITAはジョブのことをMovementと呼んでいます。

Symphony,Conductorとは

複数のMovementをまとめるためのものと私は理解しています。 条件分岐などを使いたい場合はConductorが最適です。

Playbookで注意するべきこと

Exastroで取り扱うPlaybookはAnsible Playbookそのままというわけでは無く、インクルードを想定した記述にする必要があります。 例えば、今回pingを実行するためのコードを書こうとするとしましょう。Ansible Playbookではこんな感じのコードを書くと思います。

---
- hosts: all
  tasks:
   - name: try ping
     ping:

このファイルをそのままExastro ITAで使おうとするとインデントの問題などによって失敗します。

ExastroではいくつかのAnsibleの実行モードがあるのですが、一番基本であるAnsible-Legacyを使ってジョブを実行すると実行毎に作業ログが残ります。この画面から各項目を選択すると、作業実行時に使った入力データ、それに対する出力データ、ジョブ成功の可否、作業時間などを確認できるのですが、そのうちの入力データのアーカイブを展開すると、なぜAnsible PlaybookをそのままExastro ITAで実行すると失敗するのかがわかります。

アーカイブを展開すると、playbook.ymlと言う名前のファイルがルートに存在します。これを開くと次のような内容が書かれています。

- hosts: all
  remote_user: "{{ __loginuser__ }}"
  gather_facts: no
  become: yes

  tasks:
    - include: child_playbooks/0000000001-ping.yaml

タスクの中にincludeでほかのPlaybookが定義されています。 インクルードで指定されているこのファイルを開いてみます。pingをするだけのコードなので極めてシンプルです。

- name: try ping
  ping:

このように、Exastro ITAに登録するPlaybookは名前とコードだけを記述したファイルを書けば良いことがわかります。

また、次のように複数の処理を一つのPlaybookに記述することも可能です。ただ、コードの再利用の観点を考えると、「一つのコード = 一つの処理」としたほうが適切です。

  - name: Get deb package focal
    get_url:
      url: http://example.com/example.deb

  - name: Install example repo
    shell: dpkg -i /home/ubuntu/example.deb

  - name: Install packages
    apt:
      update_cache: yes
      name:
        - example-packages

ノードでpingを実行してみる

Playbookの書き方について説明したところで、では実際にコードを用意してExastro ITAで実行してみましょう。まずはPlaybookですが、前にで説明に使ったコードを用意してみます。

Playbookの用意

名前は何でも良いですが、ここでは「ping.yaml」と言うファイル名で保存することにします。

- name: try ping
  ping:

オペレーションの作成

次にExastro ITAにログインして、オペレーションを作成します。 「メインメニュー > 基本コンソール > オペレーション一覧」をクリックします。 右ペインのいくつか表示されている項目から「登録」をクリックして「登録開始」ボタンをクリックします。

オペレーション名と実施予定日時を設定します。入力したら「登録」ボタンをクリックします。

Movementの作成

次にMovementを作成します。 「メインメニュー > Ansible-Legacy > Movement一覧」をクリックします。 右ペインのいくつか表示されている項目から「登録」をクリックして「登録開始」ボタンをクリックします。

Movement名とホスト指定形式を設定します(ホスト七形式はここでは「IP」を設定します)。 入力したら「登録」ボタンをクリックします。

Playbook素材集の登録

次にPlaybook素材集の登録を行います。 「メインメニュー > Ansible-Legacy > Playbook素材集」をクリックします。 右ペインのいくつか表示されている項目から「登録」をクリックして「登録開始」ボタンをクリックします。

Playbook素材名の設定とPlaybook素材の指定を行います。ファイル指定したら「事前アップロード」ボタンをクリックしたあと、「登録」ボタンをクリックします。

PlaybookとMovementの紐付け

次にPlaybookとMovementの紐付けを行います。 「メインメニュー > Ansible-Legacy > Movement-Playbook紐付」をクリックします。 右ペインのいくつか表示されている項目から「登録」をクリックして「登録開始」ボタンをクリックします。

Movementを選択して、そのMovementが呼ばれたときに実行するPlaybook素材を選択します。複数のPlaybook素材を使う場合はインクルード順序で優先度をつけます。入力したら「登録」ボタンをクリックします。

作業対象ホストの設定

次に作業対象ホストの設定を行います。 「メインメニュー > Ansible-Legacy > 作業対象ホスト」をクリックします。 右ペインのいくつか表示されている項目から「登録」をクリックして「登録開始」ボタンをクリックします。

オペレーション、Movement、ホストをそれぞれ選択します。複数のノードで実行する場合は登録を繰り返します。設定が終わったら「登録」ボタンをクリックし、引き続き登録します。

Symphonyの設定

Exastro ITAでコードを実行するにはAnsible-Legacyの作業実行を使うほか、ConductorやSymphonyを使ってコード実行が可能です。今回はシンプルに一つの処理を実行するだけなので、Symphonyを使ってみます(条件分岐を使いたい場合はConductorを使うと便利)。

それではSymphonyの設定を行います。 「メインメニュー > Symphony > Symphonyクラス編集」をクリックします。 右ペインのいくつか表示されている項目から「登録」をクリックして「登録開始」ボタンをクリックします。

Symphony名称の入力を行い、右側にMovementが表示されているのでSymphonyに割り当てる処理を左側にドラッグアンドドロップします。すると次のように配置されます。

f:id:virtualtech:20211006161037p:plain

設定が終わったら「登録」ボタンをクリックします。

以上で、Exastro ITAでPlaybookを実行する準備は完了です。

Symphony作業実行

それではSymphonyをつかって「Ansibleノードから対象のノードへpingを実行する」ジョブを実行してみます。 「メインメニュー > Symphony > Symphony作業実行」をクリックします。 右ペインにいくつかの項目が表示されています。

Symphony一覧から定義したSymphonyとオペレーションを選択します。

f:id:virtualtech:20211006161120p:plain

画面をスクロールしてSymphony実行という項目までスクロールして、内容を確認します。

f:id:virtualtech:20211006161158p:plain

問題が無ければ「実行」ボタンをクリックします。次のメッセージで「OK」ボタンをクリックすると処理が行われます。 問題なければ次のように「Done」と表示されます。

f:id:virtualtech:20211006161246p:plain

「Done」アイコンをクリックすると、作業結果とログの画面に遷移されます。実行ログとエラーログなどを確認して、Ansible-Plybookコマンドを実行した時に表示されるログの確認やこのジョブで利用された入力データと出力データの確認ができます。

作業内容とデータ

f:id:virtualtech:20211006161311p:plain

実行ログとエラーログ

f:id:virtualtech:20211006161329p:plain

今回はExastro ITAのセットアップと簡単な使い方をご紹介しました。Exastro ITAは普段コマンドでAnsibleを使ったりTerraformを使っているような人にも役立つツールだと私は思っています。次回以降は次の内容をご紹介するのを予定しています。お楽しみに。

  • Exastro ITAのAnsible Driverでアプリケーションをデプロイしてみる
  • Terraform Driverを使ったAWSインスタンスの作成