ansible-galaxyを利用する

ansible-galaxyは、Ansibleで利用するRoleをまとめている、Githubみたいなサービスです。色んな企業や有志の方が、Ansibleで利用できるRole集を公開してくれています。これを使えば、自分でPlaybookを書かなくて済みますし、自分でPlaybook書く場合でも参考になります。

利用方法についてメモ。今回はNginx社が公開しているnginx用のRoleを利用してみます。公式のドキュメントは下記となります。

Installing content — Ansible Documentation

ansible-galaxyのサイトより、公開されているroleをダウンロードしてきます。ダウンロードには ansible-galaxy コマンドを利用することになり、こいつはAnsibleインストール時に一緒に入っているはずです。

実際のコマンドは下記。 --roles-path オプションでダウンロード先のpathを指定しています。指定しない場合、Ansibleのグローバル領域となる /etc/ansible/roles にダウンロードされます。グローバル領域が汚れてしまうの嫌なので、ダウンロード先を指定しています。ダウンロードしたいroleは、 owner_name.role_name と指定します。今回は、Nginx社が公開しているnginx用ロールなので、 nginxinc.nginx ですね。

$ ansible-galaxy install --roles-path /mnt/c/_/work/ansible-roles nginxinc.nginx
- downloading role 'nginx', owned by nginxinc
- downloading role from https://github.com/nginxinc/ansible-role-nginx/archive/0.11.0.tar.gz
- extracting nginxinc.nginx to /mnt/c/_/work/ansible-roles/nginxinc.nginx
- nginxinc.nginx (0.11.0) was installed successfully
$
$ ansible-galaxy list --roles-path /mnt/c/_/work/ansible-roles
- nginxinc.nginx, 0.11.0

ファイル一式はgithub上にも公開されており、Readmeを読むなら、こっちを見る方が楽ですね。

GitHub - nginxinc/ansible-role-nginx: Ansible role for NGINX

Readmeと nginxinc.nginx/defaults/main.ymal で定義されている変数を見ていると、どんなことをしてくれるのか、見えてきます。簡単なwebサーバ設定をするための site.yml はこんな感じです。 nginxinc.nginx/files/www/ に表示させたいhtmlファイルを置いておきます。

---
- hosts: all
  become: true
  roles:
    - role: nginxinc.nginx
  vars:
    nginx_html_upload_enable: true
    nginx_html_upload_src: www/*
    nginx_html_upload_dest: /usr/share/nginx/html
    nginx_http_template_enable: true
    nginx_http_template:
      default:
        template_file: http/default.conf.j2
        conf_file_name: default.conf
        conf_file_location: /etc/nginx/conf.d/
        port: 80
        server_name: localhost
        error_page: /usr/share/nginx/html
        autoindex: false
        web_server:
          locations:
            default:
              location: /
              html_file_location: /usr/share/nginx/html
              html_file_name: index.html
              autoindex: false
          http_demo_conf: false

適当にinventoryファイルを作成して、playbookを実行。

$ ansible-playbook -i hosts site.yml
...
...
PLAY RECAP *********************************************************************************************************
web                        : ok=9    changed=6    unreachable=0    failed=0

nginxが設定されています。