GrafanaをインストールするAnsible Playbook

動かない手順が載ってるドキュメントほど危険なものはない。と言いますが(出典不明)、Grafanaは残念ながらそれのようで、APTレポジトリを追加してインストールする手順が動きません。。

仕方ないのでdebパッケージをダウンロードしてきてインストールするパターンでつくりました。レポジトリが使えればapt-get installさえすれば最新版が入ったんですが、debパッケージを生で使うということでバージョン確認とかは自前でやらないといけません。 Ansible初心者すぎるので、Playbookつくってみたときのメモ。

これを参考にしました:

Registerd Variables

参考:Variables — Ansible Documentation

コマンドの実行結果とかexit codeとかを使いたいときはregisterを使います。

  - command: ls
    register: ls_result

とか書いておくと、あとでこの結果を使えます。exit codeはls_result.rc、標準入力はls_result.stdoutでアクセスできるらしいです。(「らしいです」というのは、commandとかshellのReturn variables?についてドキュメントを探し回ったけど書いてる場所がわからなかったから…)

failed_when,registered_when

さっきの結果を使って、

  - command: ls
    register: ls_result
    changed_when: '"somefile" not in ls_result'

のような条件が書けます。ここで、行すべてを' 'で囲っているのはYAMLの文法的に

the YAML parser is expecting to see the line ended with the same kind of quote.

だかららしい。(と、エラーメッセージに書いてあった)。めんどくさい。

この結果をさらに参照して、

  - command: touch somefile
    when: not ls_result.changed

のように、ファイルがないときだけtouchする、みたいな条件分岐が書けます。

Jinja2の文法

例えば、バージョン番号の比較みたいなことは、

   (grafana_check_version | version_compare("{{ grafana_version }}", "<"))

のように書けばいけるらしい。まだよく分からない。

参考:Jinja2 filters — Ansible Documentation