Posted at

サポートの作業を自動化していく(第二回 StackStorm編)

More than 1 year has passed since last update.


はじめに

第一回目は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からのコピー

# 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

まとめると以下のファイルが出来上がります。


docker-compose.yml

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を貼る作業を行っています。


install_packs.yml

#! /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

"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を通す術はあるか?