@znz blog

ZnZ の memo のようなもの

ansible で role を新規作成して ansible galaxy で公開して更新した

| Comments

ansible で role を新規作成して ansible galaxy で公開して更新するときにやっているいつもの手順を紹介します。

対象バージョン

  • ansible 2.3.0.0

ansible-galaxy init

ansible-galaxy init でファイルを作成します。

% ansible-galaxy init ansible-role-unattended-upgrades
- ansible-role-unattended-upgrades was created successfully
% cd ansible-role-unattended-upgrades
% find . -type f | sort
./README.md
./defaults/main.yml
./handlers/main.yml
./meta/main.yml
./tasks/main.yml
./tests/inventory
./tests/test.yml
./vars/main.yml

tests は使い方がよくわからないのですが、そのままにしています。

LICENSE 作成

すでに作成済みの role から The MIT License (MIT) のファイルをコピーしてきました。 新規の場合は github に push した後にブラウザーから作成するのが簡単だと思います。

README 更新

ここで自分の他の role を参考に書き換えました。

vars 削除

上書きしやすいように、 defaults/main.yml しか使っていないので vars/main.yml は削除しました。

% rm -r vars

中身作成

tasks, defaults, handlers, files, templates などのディレクトリを使って作成します。

meta/main.yml 更新

meta/main.yml を更新します。 galaxy_tagshttps://galaxy.ansible.com/ の browse roles を参考にして適当に選んでいます。

examples

テスト用に vagrant で serverspec を動かせるように examples を入れています。 どうするのが良いのかわかっていないのですが、とりあえず全くテストしないよりはましなので、こういう方法をとっています。

debian/wheezy64 の box は synced folder が rsync なのでシンボリックリンクのループでエラーになってしまうので、 vagrant up wheezy64, vagrant provision wheezy64, rake spec:wheezy64 のように provision を別途実行しないといけないのが不便なのですが、 https://atlas.hashicorp.com/debian/ には VirtualBox Guest Addition が入った box が debian/contrib-jessie64 しかないので、今のところ wheezy と stretch ではどうしようもなさそうです。

テストに使った VM はディスクの無駄なので、こまめに vagrant destroy しています。

git push

basename $(pwd) | pbcopy した名前で github に repository を作成します。 タグもうっておきます。

git remote add origin git@github.com:znz/ansible-role-unattended-upgrades.git
git push -u origin master
git tag v1.0.0
git push --tags

ansible galaxy に反映

github 連携でログインして、 my roles を開きます。

Search Roles の入力欄の右にあるボタンをクリックして refresh して github の新しい repository を表示させます。 (たぶん meta/main.yml をチェックして一覧に出すかどうか決めているのだと思います。)

追加した role を有効にします。 Role Settings を開くとわかるのですが、なぜか Role Name は自動的に ansible-role- がとれて unattended-upgrades になっています。

role の更新

role を更新したら セマンティック バージョニング にそってバージョン番号をあげて、タグをうって push しておきます。

my roles のページで該当する role の行の一番右にある Import Role をクリックすると新しいタグが反映されます。 (role 個別ページには該当する操作はなさそうです。)

まとめ

ansible で新規 role を作成して、 github と ansible galaxy で公開して更新しているときにやっている手順を紹介しました。

昔は ansible-galaxy で role を取ってくるのに ansible galaxy への登録が必須だったので登録していたのですが、最近は他の人が role を作るときに参考になるかもと思って登録しています。 あまり汎用性のない自分用の role の場合は github だけに登録して YAML ファイルで

1
2
3
- src: https://github.com/znz/ansible-role-nadoka
  version: master
  name: znz.nadoka

のように指定して使っていたり (この場合でも meta/main.yml は必要)、 playbook 用の repository の role 以下にそのまま入れていたり (この場合は meta/main.yml は不要) します。

複数 role を登録していて、こういうフローで作業をしている人もいるということで、参考になれば幸いです。

Comments