LoginSignup
5
6

More than 5 years have passed since last update.

Ansibleのロールベストプラクティスにあえて抗ってみるプラグイン

Last updated at Posted at 2015-10-04

(アホみたいな不具合が2箇所あったので、これから直します)

まえがき

先月あったAnsible Meetup Tokyoに参加した際のLT枠でyunanoさんが発表していたこの内容に触発されて、 rolesフォルダに置いてあるYAMLファイルの中身をロールとして展開して使うようにするプラグイン というのを作成してみました。
途中雑になりながらもテストコード書きながら実装進めてみたり、サンプルのplaybookも準備しながらコード書いたので実用は多分可能です。実用性は保証できないですが。

あと、「抗う」なんて書いてはみたもののある程度複雑なら普通にベストプラクティスに従うといいと思います。

実物

ここ↓
https://github.com/attakei/ansible-packed-role-plugin

こんな動きします。

ansible-packed-roles-plugin.gif

何をしてくれるか

  • コールバックプラグインの場所に plugins/packed_role.py を含まれるようにする
  • Playbookに指定されたロールがroles/フォルダにYAMLファイルとして置かれている

上記のように設定してPlaybookを実行すると、YAMLファイルをロールとして扱って動いてくれます。

もうちょっと細かく

↓のようなフォルダ構成を用意します。rolesフォルダの中にはYAMLファイルがあるだけでフォルダは無いです。

+ hosts
+ roles
  + nginx.yml
+ webserver.yml

playbook(webserver.yml)の中身。

- hosts: web
  roles:
    - nginx

nginx.ymlの中身。

tasks:
  - name: Install nginx
    sudo: yes
    yum: name=nginx state=present
  - name: Enable service nginx
    sudo: yes
    service: name=nginx enabled=yes state=started
handlers:
  - name: Reload nginx
    sudo: yes
    service: name=nginx state=reloaded

playbookを実行します。

$ ansible-playbook -i hosts webserver.yml

問題なくnginxのロールが実行されて、フォルダ構成が以下のように変わると思います。

+ hosts
+ roles
  + nginx/
    + defaults/
      + main.yml
    + files/
    + handlers/
      + main.yml
    + tasks/
      + main.yml
    + templates/
    + vars/
      + main.yml
  + nginx.yml
+ webserver.yml

副作用とか

現時点のプラグインだとrolesフォルダにロールの内容を直接展開してしまうため、余計なファイル群を大量に作ります。(それこそベストプラクティス通りのフォルダとmain.ymlを生成します)

+ roles
  + nginx/
    + files/
      + nginx.conf
    + tasks/
      + main.yml
  + nginx.yml

例えば、上のようなフォルダ構成になっていた場合には、nginxロールを指定したplaybook実行時ににnginx.ymlの中身を無条件展開するため、nginx/tasks/main.ymlを編集していた場合は中身を上書きしてしまいます。

やってみたいこと(やるべきこと)

  • YAMLファイルの出力先を既存のrolesフォルダとは別にする
  • main.yml以外を出力できるようにする
  • YAMLファイルも別のフォルダに置く?
  • もうちょっと英語ドキュメントちゃんとする

謝辞(参考にしたページまとめ)

5
6
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
5
6