コンテンツにスキップ

Ansible Galaxy@Ansible

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Ansible Galaxyとは

roleディレクトリ配下をroleモジュールとして別リポジトリに切り分け、これをリモート参照する仕組みのこと。


02. 参照される側

roleモジュールのディレクトリ構成

▼ 複数のtaskがある場合

metaディレクトリ配下に、roleモジュールを宣言する設定ファイルを配置する。

foo-role-module-repository/ # roleモジュール

├── defaults/
│   └── main.yml

├── files/
│   │
│   ├── foo1/
│   │   └── x.conf
│   │
│   ├── foo2/
│   │   └── y.conf
│   │
│   └── foo3/
│       └── z.conf

├── handlers/
│   └── foo1.yml

├── tasks/
│   ├── foo1.yaml
│   ├── foo2.yaml
│   └── foo3.yml

├── template/
│   └── x.j2 # tasks/x.confファイルに対応している

├── meta/
│   └── main.yml

└── vars/
    ├── foo1.yaml # tasks/foo.yamlファイルに対応している
    ├── foo2.yaml
    └── foo3.yml

▼ 複数のtaskがある場合

metaディレクトリ配下に、roleモジュールを宣言する設定ファイルを配置する。

foo-role-module-repository/ # roleモジュール

├── defaults/
│   └── main.yml

├── files/
│   └── x.conf

├── handlers/
│   └── main.yml

├── tasks/
│   └── main.yml

├── template/
│   └── x.j2 # tasks/x.confファイルに対応している

├── meta/
│   └── main.yml

└── vars/
    └── main.yml # tasks/foo.yamlファイルに対応している


meta/meta.yml

metaディレクトリ配下のmain.ymlファイルで、roleモジュールであることを宣言する。

galaxy_info:
  author: hiroki.hasegawa
  description: common role
  min_ansible_version: "1.0.0"
  galaxy_tags: []
dependencies: []


03. 参照する側

ディレクトリ構成

metaディレクトリ配下に、roleモジュールを宣言する設定ファイルを配置する。

repository/
├── requirements.yml
└── playbook.yml


requirements.yml

リモート参照するroleモジュールのURLを設定する。

- name: foo-role
  scm: git
  # roleモジュールのあるリポジトリ
  src: https://github.com/hiroki-hasegawa/foo-role-module-repository.git
  # ブランチ
  version: main

- name: bar-role
  scm: git
  src: https://github.com/hiroki-hasegawa/bar-role-module-repository.git
  # タグ
  version: 1.0.0

- name: baz-role
  scm: git
  src: https://github.com/hiroki-hasegawa/baz-role-module-repository.git
  # コミットハッシュ値
  version: ee8aa41

playbook.yml

playbook.ymlファイルでroleモジュール名を設定する。

- hosts: all
  become: "true"
  roles:
    - foo-role


コマンド

Ansibleのコントロールノードでansible-galaxyコマンドを実行することにより、管理対象ノードの~/.ansible/rolesディレクトリ配下にroleモジュールをインストールする。

$ ansible-galaxy install <roleモジュール名>