Ansible GalaxyにGitBucketのroleを登録した

社内のsvn環境をgitに移行しようと思ってGitBucketの環境をansibleで構築してたのだけど、ふとAnsible Galaxyを見たらGitBucketのroleはまだ無かったし折角なので登録してみた。

https://galaxy.ansible.com/list#/roles/2155

これ。

githubにあるgitbucketリポジトリインストールスクリプトが置いてあるので、基本的にはこのスクリプトをansibleのyaml記法に書き換えて作った。UbuntuCentOSで起動することを確認している。

Ansible Galaxyに登録するもの

複雑なrole作ってしまうとそれを作った人が実行する環境に最適化されたものが出来上がるので、他の人が再利用するのは難しかったりする。再利用しやすいroleを公開したいならなるべく単機能に絞ったほうが良いと思った。今回社内に構築したGitBucket環境は、GitBucketの他にnginxを入れてリバースプロキシとして使い、自己署名証明書生成してhttpsでアクセスできるようにするところまでansibleでやっていたが、そこまでを一つのroleでやってしまうとnginxとか別にいらん人やhttpでも問題ない人には使ってもらうことができない。なのでGitBucketが立ち上がる必要最小限の構成をroleにした。

Role作成で覚えておくこと

ansible-examplesのtomcat-standalone眺めていていたらlibselinux-pythonをインストールしていたので、これはなんで必要なのか不思議に思っていた。

最近のRed Hat系のディストリビューションではデフォルトでSELinuxが有効になっている。そうするとansibleのファイル操作系モジュールでエラーになってしまうので、それを避けるためにlibselinux-pythonをインストールしていたようだった。実際にCentOS 6.5の環境でansibleのtemplateモジュールが下記のようなエラーになることを確認した。

msg: Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!

今回作ったroleでは、SELinuxがインストールされていて、かつ無効でない場合にlibselinux-pythonをインストールするようにしてある。*1

- name: Check if selinux is installed
  command: getenforce
  register: command_result
  ignore_errors: True

- name: Install libselinux-python
  yum: name={{ item }}
  with_items: 
    - epel-release
    - libselinux-python
  when: command_result|success and command_result.stdout != 'Disabled'

ansible-role-gitbucket/selinux.yml at master · distkloc/ansible-role-gitbucket

参考

*1:今のところRed Hat系のみ対応