Hinemos+Ansibleで、Hinemosエージェントインストールを自動化する
Jです。おつかれさまです。
Hinemosには、一括制御機能で、管理対象機器にHinemosエージェントをインストールすることが可能ですが、
Hinemosエージェントのインストール自動化を、Hinemosのジョブ+Ansibleで実現する方法を考えてみました。
Ansibleとは
Ansibleは、2012年にリリースされた、OSS構成管理ツールです。
- プロビジョニング対象にモジュールを置く必要が無い
- 構成を記述する定義ファイル(Playbook)を、YAMLという可読性が高い形式で記述できる
といった特徴があります。
Ansibleの詳細はこちら
http://www.ansible.com/home
利用した環境
仮想マシン3台
- サーバA:CentOS 6.4 (Hinemosマネージャ、Hinemosエージェント、Ansibleインストール済み)
- サーバB:CentOS 6.4
- サーバC:CentOS 6.4
事前準備
サーバAに、Hinemosマネージャ、Hinemosエージェント、Ansibleをインストールした上で、サーバAから、サーバB、サーバCに対しパスワード無しで
SSHログインできる様、以下の設定しました。
- サーバA(rootユーザ)の認証用公開鍵を作成
- サーバB(rootユーザ)、サーバC(rootユーザ)のauthorized_keysファイルに、1で作成した鍵を配置
なお、Hinemosマネージャの/opt/hinemos/sbin/に配置されている
一括制御機能用のスクリプト(hinemos_setup_collectiverun.sh)を使うと、この設定が簡単にできます。
Ansibleのhostsファイルの作成
Ansibleのプロビジョニング対象となる(Hinemosエージェントのインストール対象となる)
サーバB、サーバCを定義した"hosts"ファイルを、/etc/ansible/hostsに作成しました。
hosts
[managednode] サーバBのIPアドレス サーバCのIPアドレス
プレイブックの作成
以下処理を実行するプレイブック(agentinst.yml)を、/rootディレクトリ配下に作成しました。
- Hinemosエージェントのインストールパッケージダウンロード
- Hinemosエージェントパッケージの解凍
- Hinemosエージェントが必用とするrpmパッケージのインストール
- エージェントインストーラの実行
agentinst.yml
- hosts: managednode remote_user: root tasks: - name: test connection ping: remote_user: root - name: download agent from sourceforge get_url: url=http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fhinemos%2F60378%2Fhinemos_agent-4.1.1_rhel5-rhel6.tar.gz dest=/root/hinemos_agent-4.1.1_rhel5-rhel6.tar.gz - name: decompress file command: tar zxvf /root/hinemos_agent-4.1.1_rhel5-rhel6.tar.gz - name: install rpm packages yum: name={{item}} state=installed with_items: - java-1.7.0-openjdk - net-snmp - net-snmp-libs - coreutils - shadow-utils - gawk - grep - sed - krb5-workstation - passwd - openssh - openssh-clients - expect - name: change into script directory and run script command: chdir=/root/Hinemos_Agent-4.1.1_rhel5-rhel6 ./agent_installer_JP.sh -i -m '{{managerip}}' -s
スクリプトの作成
プレイブックをラップする簡単なスクリプト(agentinst.sh)を/rootディレクトリ配下に作成しました。
環境変数 "ANSIBLE_HOSTS"に、/etc/ansible/hostsを指定した上で、
プレイブック(agentinst.yml)を実行し、引数$1を{{managerip}}に渡すだけの簡単なものです。
agentinst.sh
#!/bin/bash export ANSIBLE_HOSTS=/etc/ansible/hosts /usr/bin/ansible-playbook /root/agentinst.yml --extra-vars "managerip=$1"
ジョブの登録
以下コマンドを、サーバ上で実行するHinemosのジョブを作成しました。
なお、xxx.xxx.xxx.xxxはHinemosマネージャサーバ(サーバA)のIPアドレスです。
実効コマンドは、rootユーザで実行されるように、Hinemosのジョブを設定します。
実効コマンド
/root/agentinst.sh xxx.xxx.xxx.xxx