40
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

roleを作成してAnsible Galaxyに登録するワークフロー

はじめに

roleを作成してAnsible Galaxyに登録するのをやってみたので、作業手順をメモしておきます。
ansible-galaxyへの登録自体はansible-galaxy を使ってみた - @znz blogを参考にしました。ありがとうございます。

ここでは私が登録した3つのroleのうち、homebrew-packagesを例に、role作成からAnsible Galaxyに登録する作業手順を説明します。

roleの作成

role用のディレクトリとファイル生成

まず、作業ディレクトリを作って、そこで以下のコマンドを実行します。

ansible-galaxy init homebrew-packages

すると以下の様なディレクトリツリーとファイルが作成されます。

homebrew-packages/
    README.md
    defaults/
        main.yml
    handlers/
        main.yml
    meta/
        .galaxy_install_info
        main.yml
    tasks/
        main.yml
    vars/
        main.yml

roleを実装

生成されたファイルを編集してroleを実装していきます。
動作確認用に作業ディレクトリに以下の様なlocalhost.yamlを作ります。

localhost.yaml
- hosts: localhost
  connection: local
  gather_facts: no
  sudo: no
  vars:
    homebrew_packages_taps:
      - homebrew/binary
      - homebrew/dupes
    homebrew_packages_packages:
      - { name: readline }
      - { name: openssl, state: linked }
      - { name: ansible }
      - { name: cmake }
      - { name: ctags }
      - { name: direnv }
      - { name: docker }
      - { name: git }
      - { name: jq }
      - { name: hub }
      - { name: imagemagick }
      - { name: mercurial }
      - { name: mysql }
      - { name: packer }
      - { name: pkg-config }
      - { name: pwgen }
      - { name: python }
      - { name: reattach-to-user-namespace }
      - { name: redis }
      - { name: subversion }
      - { name: the_silver_searcher }
      - { name: tig }
      - { name: tmux }
      - { name: whois }
      - { name: xz }
      - { name: vim }
      - { name: wget }
      - { name: zsh, install_options: disable-etcdir }
  roles:
    - homebrew-packages

tasks/main.yamlにroleの処理を記述しては、以下のコマンドで動作確認を行い、それを繰り返して実装していきます。

ansible-playbook localhost.yaml

roleで使用するvariableの命名規則

Ansible GalaxyのAboutページの"A note about variables"のセクションにroleで使用するvariableの命名規則が書かれています。変数名をそのまま使うのではなく ${ロール名}_${変数名} のように ${ロール名}_ という接頭辞をつけるようにします。これは他のroleの変数と名前が衝突するのを避けるためです。

例えば上記の例ではロール名がhomebrew-packagesでpackagesという変数なので、homebrew_pacakges_packagesという名前にしています。

roleに自作モジュールを含める場合はlibraryディレクトリを作成

role内に自作モジュールを含めたい場合は、モジュールのディレクトリにlibraryというディレクトリを作成してそこに置けば良いです。

例えばhnakamur/ansible-role-atom-packagesの場合はlibraryディレクトリにapmファイルを含めています。

ちなみに、このファイルはAnsible本体に含まれるnpmのソースをコピペして10分ぐらいでちゃちゃっと作成しました。自作モジュールも簡単に作れるのがAnsibleの魅力ですね!

meta/main.yamlとREADME.mdを書く

実装が終わったら、meta/main.yamlとREADME.mdを書きます。ansible-galaxy initで生成されたファイルにいろいろ説明が書いてあるので、それを読んで書いていきます。

githubにレポジトリを作成してpush

github.comのウェブ画面でレポジトリを作成します。この例では
hnakamur/ansible-role-homebrew-packagesというレポジトリを作りました。

role用のgithubレポジトリ名はrole名と同じにしない

role名とレポジトリ名を同じにしてしまうと、Ansible roleが扱うupstreamのソフトウェアのレポジトリをforkするときに名前が衝突してしまいます。例えばnginxのroleをnginxという名前でgithubレポジトリを作ってしまうと、nginx自体のレポジトリをforkするときに困ってしまいます。そこで、role用のgithubレポジトリにはansible-role-という接頭辞をつけることにしました。

roleのファイルをレポジトリにpush

github.comでレポジトリを作成した時に表示されたコマンドを参考に、ローカルレポジトリを作ってファイルを追加、commitし、github.comのレポジトリにpushします。

Ansible Galaxyにroleを登録

Ansible GalaxyのAdd a Roleメニューを選んでroleを登録します。

  • Github Username/Account: hnakamur
  • Github Repository: ansible-role-homebrew-packages
  • Alternate Name: homebrew-packages

Ansible Galaxyに登録したroleをダウンロードして動作確認

作業用に~/ansible-workspaceを作成して、ここに先程登録したroleをダウンロードして利用してみます。名前の部分は${ユーザ名}.${ロール名}という形式で指定します。またインストール先のディレクトリはカレントディレクトリにしたいので.を指定します。

mkdir ~/ansible-workspace
cd ~/ansible-workspace
ansible-galaxy install --roles-path=. hnakamur.homebrew-packages

するとカレントディレクトリにhnakamur.homebrew-packagesというディレクトリが作られます。

動作確認用にlocalhost.yamlというファイルを作ります。

localhost.yaml
- hosts: localhost
  connection: local
  gather_facts: no
  sudo: no
  vars:
    homebrew_packages_taps:
      - homebrew/binary
      - homebrew/dupes
    homebrew_packages_packages:
      - { name: readline }
      - { name: openssl, state: linked }
      - { name: ansible }
      - { name: cmake }
      - { name: ctags }
      - { name: direnv }
      - { name: docker }
      - { name: git }
      - { name: jq }
      - { name: hub }
      - { name: imagemagick }
      - { name: mercurial }
      - { name: mysql }
      - { name: packer }
      - { name: pkg-config }
      - { name: pwgen }
      - { name: python }
      - { name: reattach-to-user-namespace }
      - { name: redis }
      - { name: subversion }
      - { name: the_silver_searcher }
      - { name: tig }
      - { name: tmux }
      - { name: whois }
      - { name: xz }
      - { name: vim }
      - { name: wget }
      - { name: zsh, install_options: disable-etcdir }
  roles:
    - hnakamur.homebrew-packages

role作成時とはrolesの指定に${ユーザ名}.という接頭辞を付ける必要があることに注意してください。以下のコマンドで実行します。

ansible-playbook localhost.yaml
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
Sign upLogin
40
Help us understand the problem. What are the problem?