Ansibrest というツールを作りました

ものすごい久しぶりに記事を書く。理由は気がつかないままに bang されてたから (stanaka さん, daiksy さん, songmu さんありがとうございます)

掲題の通り Ansibrest というツールを作った

  • github
  • 最近のプロダクトでは ansible をほぼ全面的に使ってる
  • チーム的にもうちのチームはほとんどが ansible に移行した(利用し始めた)
  • 遅まきながらようやく chatops 環境が整いつつある(この辺りは情報解禁されたらどこかで書きたい)

Ansible はとてもよいツールなので積極的に使っていきたいけど、結局どこかの端末にログインしてコマンドを実行するか、 Jenkins おじさんの手をわずらわせるかしないといけない。 slack とかで利用するときも直接叩くなんてことはなく実際には jenkins おじさんに頼んで ansible を実行してもらう。

かといって jenkins おじさんを定常的に育てるのは手間でもっとカジュアルに ansible を叩きたいと思ったので ansibrest 作った。 やれることは単純でプロダクトのリポジトリ内に次みたいな構成で ansible playbook があるとする

% tree -L 2 ansible                   
ansible
├── group_vars
│   └── development.yml
├── inventories
│   └── development
├── roles
│   └── sample2
├── sample1.yml
└── sample2.yml

この状態で

% npm install ansibrest -g

としたのち

% ansibrest 

とするとデフォルトでは2400番でWebサーバが立ち上がる。

キャプチャを見ればわかると思うけど、 playbook の一覧、それぞれの playbook のタスク一覧と inventories の設定を閲覧できて、その場で実行ができる。

  • トップ f:id:muddydixon:20160308004640p:plain

  • 実行 f:id:muddydixon:20160308004704p:plain

  • playbook タスクリスト f:id:muddydixon:20160308004720p:plain

あと、当然これは API を持っている。

% curl -X POST "http://localhost:2401/api/playbook/sample2.yml"

こんな感じで叩くことができる。

としておけば op サーバあたりで git clone して、 ansibrest を上げておけば、 hubot から簡単に実行できる。

カジュアルにチーム皆の(slackの)前で

@repo_hubot play sample2.yml development

とか実行することができる(はず

残項目

  • playbook は通常、結構時間がかかるので、ウェブから実行する場合には stream / websocket にしたいところ(hubotの場合はなんか進捗的なやつを定期的に処理できるようにするか)
  • sshの鍵とかそういうのの管理ができない
    • これはしないほうがいい気もする
  • ansible ini フォーマットと yaml が混ざってるし、 playbook 作る人によって書き方違うのでアレなのどうしたらいいのか