Kompira Enterprise から Ansible の Playbook を実行する

Kompira Enterprise で構成管理ツールを操作して、構成管理作業の自動化を行いたい場合があると思います。

そこで本稿では、構成管理ツール「Ansible」において構成内容を記述したファイルである Playbook を、 Kompira Enterprise から実行する方法を紹介します。

※ 本稿では既に Kompira Enterprise サーバーに Ansible がインストールしてある状態を想定しています。インストール方法に関しては「インストールガイド」を参照してください。


動作確認環境

ソフトウェア バージョン
Kompira Enterprise 1.5.5.post11
Kompira Enterprise サーバー OS CentOS 7.8.2003
接続先サーバー OS CentOS 7.8.2003

または

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post7
Kompira Enterprise サーバー OS CentOS 7.8.2003
接続先サーバー OS CentOS 7.8.2003

全体構成図

本稿で扱う構成を以下に示します。

inventory の設定

始めに、Ansible の inventory の設定を行います。

Kompira Enterprise サーバーのコンソール上で inventory ファイルを開いて以下のようにグループ名を [kompira] として、今回 Ansible を実行する接続先の情報を追加してください。

[kompira]
<ユーザー名>@<接続先ホスト名 or IP アドレス>

※ inventory ファイルのデフォルトのパスは /etc/ansible/hosts になります。

※ <ユーザー名> 、<接続先ホスト名 or IP アドレス> は、ご自身の環境の接続先情報に置き換えて入力してください。

※ <ユーザー名> は root 権限を持っているものにしてください。

Playbook の作成

次に、今回 Ansible で実行する内容を記述した Playbook を作成します。

Playbookについての詳細は、「Playbook の概要」を参照してください。

今回は、Apache をインストールして、引数で指定したユーザー ID 、パスワードをもつユーザーを追加するように記述した Playbook「kompira_test.yml」を、/tmp に以下のような YAML 形式で作成します。

kompira_test.yml

- hosts: kompira
  become: yes
  tasks:
    - name: install Apache
      yum: 
        name: httpd

    - name: start httpd
      service: 
        name: httpd
        state: started

    - name: add user
      user:
        name: "{{ user_name }}"
        password: "{{ password | password_hash('sha512') }}"

ssh 公開鍵登録

接続先サーバーに対して Playbook を実行するため、公開鍵による ssh 接続を行えるように設定します。

公開鍵認証を使ってssh接続をする」の「証明書の作成」、「リモートサーバーでの証明書の登録」を参考に鍵ファイル「kompira.key」 を作成し、「kompira」 ユーザーが接続先に対して公開鍵による ssh 接続が行えるように設定してください。

完了したら Kompira Enterprise サーバーのコンソール上で以下のように入力して、パスワード入力無しで ssh 接続ができることを確認してください。

$ su kompira -c "ssh -i ~/.ssh/kompira.key <ユーザー名>@<接続先ホスト名 or IP アドレス>"

ジョブフローの作成・実行

以下のようなジョブフロー「Playbook実行」を作成してください。

Playbook実行

| user_name |
| password |
 
["ansible-playbook /test/kompira_test.yml --extra-vars 'user_name=${user_name} password=${password}' -i /etc/ansible/hosts"
] =>
{ if $STATUS != 0 |
  then:
    print("エラーが発生しました")
  else:
    [
        __host__ = "<接続先ホスト名 or IP アドレス>",
        __user__ = user_name,
        __password__ = password
    ] ->
    print("ユーザー名")->
    ["whoami"] ->
    print("httpd の状態")->
    ["systemctl status httpd"]
}

※ inventory ファイルのパスがデフォルトと異なる場合、「 /etc/ansible/hosts」の部分を正しいパスに書き換えてください。

※ <接続先ホスト名 or IP アドレス> は、inventory で設定したものと同じ値を入力してください

※ Kompira Enterprise 1.5 系の場合は print($RESULT) で結果を出力してください。

このジョブフローでは Playbook の内容を実行した後、作成したユーザーとパスワードで接続先にログインして、ログインユーザー名と httpd の稼働状況を確認します。

作成したら「user_name」、「password」に新規登録するユーザー名、パスワードを入力して実行してください。今回はそれぞれ「test」、「kompira」とします。

実行結果は以下のようになります。

実行結果をさらに下に進めると、ログインユーザー名が test になっていて、httpd の Active が active (runnning) になっていることから、Playbook の内容が正しく反映されていることがわかります。

以上のようにして、Kompira Enterprise から Playbook を実行することができました。これを利用することで既存の Playbook を Kompira Enterprise に流用できるのはもちろんのこと、定期的に Playbook を実行したり、構成管理部分を Ansible に任せてそのほかの処理は Kompira Enterprise が行うといったような作業分担も可能になります。

TOP