LoginSignup
2
1

More than 5 years have passed since last update.

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

Posted at

はじめに

第一回目は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を通す術はあるか?

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1