Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@muddydixon

Ansibrest の紹介

More than 3 years have passed since last update.

この記事はAnsible Advent Calendarの9日目です

うちのチームでは現在、環境の共有も含めて Docker / Ansible を利用しています。
また、新しくサービスを作る際もなるべく docker-compose.yml を最初に作ることで、開発初期から適切な分担で作業をすることができるので、オススメです。
とはいえ、サーバすべてを Docker で運用することはないのでやっぱり ansible は不可欠です。

Ansible の悲しみ

  • Ops/Deploy 用のサーバの ansible と手元の ansible のバージョンの差異
    • サービス A の Ops サーバとサービス B の Ops サーバの ansible でバージョンが違ったりの両方を対応できない
  • 実行は Ops または手元のマシンから実行するしか無いが、わざわざ Ops サーバに入りたくない

Ansibrest

上記を解決するために、以前ブログにも書きましたが、 Ansibrest というツールを作りました。

ansible tower の機能が少なく、アンオフィシャルバージョンくらいの認識でいいです

その後、社内の開発環境に入れて Mattermost と連携して遊んだりしていたのですが、別件で多忙になり、放置していました。
気がつくと社内ではパッとしないままにもかかわらず「さくらのナレッジ」で紹介されたりしていました(こないだ知った)。

使ってくださる方がいるなら、と重い腰を上げて、社内での本格利用も検討しながら、必要な機能を追加していきました

  • 全面的なリファクタリング
    • lib/ansible.js
  • Error メッセージの表示改善
  • ExtraVars 対応
  • WebSocket による「長い Playbook」に対応
    • こいつがコードを汚くしているのでもう一度リファクタかけ直す予定
  • ansible 1.X 系 / 2.X 系の対応
  • Dockerize (ansible 2系 同梱)

結構色々、変更したのでぜひお試しください。

使い方

GUI

% docker run -d -p 2400:2400 -v $ANSIBLE_PATH:/opt/ansible muddydixon/ansibrest
% docker run -d -p 2400:2400 -v $YOURANSIBRRESTFILE:/opt/ansibrest/.ansibrest \
                           -v $ANSIBLE_PATH:/opt/ansible \
                           muddydixon/ansibrest

こんな感じで、 playbook があるディレクトリをボリュームマウントするだけで試すことができるはずです。

image

image

ちゃんと ExtraVars として {"version": 2} と入力して実行すると

image

の最後のタスクできちんと反映されています!

CUI

ansib"rest"の名前をつけているので curl 等で playbook を実行できるようにしてあります。

curl -X POST "http://dev.docker.com:2400/api/playbooks/sample1.yml"
{"stdout":"\nPLAY [Sample 1 tasks 1] ********************************************************\n\n\nTASK [setup] *******************************************************************\n\nok: [localhost]\n\n\nTASK [debug] *******************************************************************\n\nok: [localhost] => {\n    \"inventory_hostname\": \"localhost\"\n}\n\n\nPLAY [Sample 1 tasks 2] ********************************************************\n\n\nTASK [setup] *******************************************************************\n\nok: [localhost]\n\n\nTASK [debug] *******************************************************************\n\nok: [localhost] => {\n    \"inventory_hostname\": \"localhost\"\n}\n\n\nPLAY RECAP *********************************************************************\n\nlocalhost                  : ok=4    changed=0    unreachable=0    failed=0   \n\n\n","stderr":""}%       

ちゃんと叩けますので、例えば(というかこちらがメインの目的だったのですが)、 Ops サーバにこれをインストールしておくことで、 Slack Command などでデプロイができるようになるのです。勝つる!!!

今後

ansible tower に有るような認証用の設定がまだ残念でマウントまたは playbook 内にごにょごにょする必要があるところを直したいと思っています。

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
muddydixon
JavaScript (HTML5, Node, jQuery) Perl R Hadoop MongoDB DataMining MachineLearning InfoGraphics
tver-technologies
Innovate TVision, Designing Value / テレビ・動画配信の可能性を切り拓き、新しい価値をデザインしていきます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?