はじめに
第一回目はAnsibleとDockerを使って、DBセットアップを自動化しました。今回はそれを拡張し、StackStormからAnsibleのPlaybookを叩ける様にします。
背景と目的
背景
前回は、Ansible Playbookを使ってDBコンテナの立ち上げとSQL Dumpの取り込みを自動化しました。しかし、まだansible-playbookコマンドをLinux CUIで叩く必要があります。
現段階でのDB立ち上げの手順
- Linuxサーバへのログイン
- コールセンターからの連絡を元に、設定ファイルの作成
- 設定ファイルを引数としたPlaybookの実行
まだ、ログインしたり設定ファイルを作ったりと手間がかかります。
目的
ログインと設定ファイル作成の手間を省き、GUIで作業できるようにStackStormをフロントエンドとして立ち上げていきます。
今回やること
- Docker版StackStormの立ち上げ
- StackStormへのPackのインストールの自動化
- StackStormのWorkflowの取り込みの自動化
今回はやらないこと
- 独自Dockerイメージの作成
手順
Docker版StackStormの立ち上げ
Docker版StackStormの立ち上げは以下の記事を参照に実施しています。
ここでは自分が躓いた箇所と、自分なりの設定の取り込みを記載します。
https://qiita.com/shusugmt/items/18b5f4e44c720aae47ae
1. StackStormイメージの取得
githubよりst2-dockerのパッケージを取得します。
この中に含まれる設定ファイルを用いて、docker-composeのStackStormを立ち上げます。
# git clone git@github.com:stackstorm/st2-docker
2. st2-dockerの設定変更
st2-docerの立ち上げで一回躓きました。
コピーしてきたdocker-compose.ymlファイルに記載されているStackStormのイメージのTag指定で蹴られます。
内容を見るとLatest指定となっていますので、このままトラブルシューティングをするのではなく、安定版(と聞いている)2.7系を指定して利用することにします。image: stackstorm/stackstorm:2.7
また、作成したAnsible PlaybookとWorkflowのYAMLファイルを取り込むため、ローカルファイルをst2-dockerへマウントします。
volumes:
- /home/kannosan/ansible-playbook:/root/ansible-playbook # mount playbook
- /home/kannosan/rcp-pack:/root/rcpsupport # mount pack
ついでに標準ではHTTPSでの接続となりますが、HTTPからのリダイレクトも有効化されているので、Port 80も有効化しておきます。
docker-compose:Port Forward設定
ports:
- "443:443"
- "80:80" #Redirect http
まとめると以下のファイルが出来上がります。
services:
stackstorm:
#image: stackstorm/stackstorm:${TAG:-latest}
image: stackstorm/stackstorm:2.7
env_file:
- conf/stackstorm.env
- conf/mongo.env
- conf/rabbitmq.env
- conf/postgres.env
- conf/redis.env
ports:
- "443:443"
- "80:80" #Redirect test
networks:
- public
- private
volumes:
- stackstorm-packs-volume:/opt/stackstorm/packs
- stackstorm-virtualenvs-volume:/opt/stackstorm/virtualenvs
- stackstorm-configs-volume:/opt/stackstorm/configs
- stackstorm-log-volume:/var/log
- ./packs.dev:/opt/stackstorm/packs.dev
- ./runtime/entrypoint.d:/st2-docker/entrypoint.d
- ./runtime/st2.d:/st2-docker/st2.d
- ./conf/stackstorm.env:/st2-docker/env
- /home/kannosan/ansible-playbook:/root/ansible-playbook # mount playbook
- /home/kannosan/rcp-pack:/root/rcpsupport # mount pack
dns_search: .
3. st2-dockerの立ち上げ
StackStormを立ち上げます。
以下のコマンドはdocker-compose.ymlファイルが置いてあるディレクトリ以下で実行しましょう。
なお、StackStormの標準のUser/Passwordはst2-docker/conf/stackstorm.envに記載されています。必要に応じて編集してください。
# docker-compose up -d
4. PackのインストールとWorkflowファイルの取り込み
前の項目までで、StackStormの立ち上げまではできました。
ただし、このままではAnsible Packが入っていなかったり、Workflowファイルが取り込まれていないため、Ansible Playbookを叩くことができません。
Playbookを叩くために、それらの作業を実施していきます。
本来であればPackをインストールしてDocker Image化すると良さそうな感じですが、今回はStackStorm立ち上げ後にWorkflowの取り込みを行うため、スクリプトで実施します。
以下のスクリプトでは、Ansible Packを使うためのlibkrb5のインストールと、Ansible Packのインストール、そして、Workflowファイルが保存されている/root/rcpsupportディレクトリをStackStormのPackがインストールされる/opt/stackstorm/packsディレクトリへSymbolic Linkを貼る作業を行っています。
#! /bin/sh
docker-compose exec stackstorm apt-get install libkrb5-dev -y
docker-compose exec stackstorm st2 login st2admin -p <password> --write-password
docker-compose exec stackstorm st2 pack install ansible
docker-compose exec stackstorm ln -s /root/rcpsupport /opt/stackstorm/packs/rcpsupport
docker-compose exec stackstorm st2ctl reload
ここまでで、StackStormからAnsible Playbookを叩く準備ができました。
早速、WebGUIからStackStormへログインしてDBを立ち上げてみましょう…
"error": "RemoteError: Remote error: UnicodeEncodeError 'ascii' codec can't encode characters in position 21-27: ordinal not in range(128)
が、ここでトラブルが発生しました。
Unicodeのエラーなので、コールセンターから貰った日本語を含む共有フォルダパスがダメそう…
課題
StackStormは立ち上がりましたが、Unicodeで躓きました…
# update-locale LANG=ja_JP.UTF-8
も効いてない感じなのでトラブルシュートが必要です…
ここさえ解決できれば、WebGUIからDB立ち上げができるはず…
まとめ/次回予告
webhookへ向かうKanno-sanを待っていたのはまた、地獄だった。英語圏のソフトウェアに棲み着いたLang=en_US.UTF-8。日本語処理は絶望に沈む。次回「locale」。Lang=ja_JP.UTF-8を通す術はあるか?