Ansible GalaxyにGitBucketのroleを登録した
社内のsvn環境をgitに移行しようと思ってGitBucketの環境をansibleで構築してたのだけど、ふとAnsible Galaxyを見たらGitBucketのroleはまだ無かったし折角なので登録してみた。
https://galaxy.ansible.com/list#/roles/2155
これ。
githubにあるgitbucketリポジトリにインストールスクリプトが置いてあるので、基本的にはこのスクリプトをansibleのyaml記法に書き換えて作った。UbuntuとCentOSで起動することを確認している。
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