SQLを実行するAnsible util taskを作った
SQLを実行するAnsible util taskを作った
背景
Grafanaのセッション・ダッシュボード情報のストレージは選べる。 もともとサービス内の別の箇所でPostgresを使っていたが、インスタンスのリソースが余っていたため、 Grafanaのデータベースも同じインスタンス上に共存させることを考えた。Grafanaの(おそらく)バグで少し苦労したので記録を残す。
現象としてはこのIssueと一緒。 上記のIssue関連PRはマージされているけど手元ではうまくいかなかった。
サービスのデプロイはAnsibleで行っている。そしてデータベースのテーブル管理はアプリケーションの責任。 そのためAnsibleでも、データベー, ユーザーは設定できるけど テーブルの設定は出来ない。
テーブルがなければアプリケーション側で勝手に作成して欲しい。 しかし先ほどIssueの通りGrafanaはPostgresを使った時には機能しないケースがある。 そしてバージョンなど詳細は異なるが自分も踏んだ。MySQLでは機能しているらしい。
そんなわけでAnsibleで無理やり対処した。(時間ができたらバグレポートかPR出したいけど..業務でやりたい)
対応内容
ロールを利用するように requirements.yml に下のように追加して、 pre_tasks として呼び出す。 cloudalchemy.grafana が Grafana 立ち上がるのを待ちテーブルがないと立ち上がらないため pre_tasks として呼び出す必要がある。
requirements.yml
|
|
ロールのインストールは下みたいにすればよろし。
|
|
利用するにはプレイブックでこんな感じに書く。
site.yml
|
|
追加説明
Postgres のデータベースを定義する postgresql_db はリモートホストに ansible_python 用の psycopg2 がインストールされている必要がある。 python2,3 の両方に対応できるように事前に apt で入れてる。ここはディストリビューションに合わせて頑張る。
テーブルを作ってる DDL は上記のIssueからコピペした。
yaml では |
でヒアドキュメントみたいなことができるので意外と綺麗にクエリを yaml に埋め込める。