Ansible Roles Playbook を利用するサンプル

環境
Ubuntu 24.04

概要
Roles は Ansible であらかじめ定義された Playbook の命名規則・ファイル配置に従うことで、
自動的にインクルードを実行する機能です。
以下のような構成 の Roles 適用 Playbook を作成します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
+--- playbook.yml +--- test.yml
| |
+--- roles/ +--- roles/
| |
+--- role01/ +--- ins_mariadb/
| | |
+--- files/ | +--- vars/
| | | |
+--- templates/ | | +--- main.yml
| | +--- tasks/
+--- tasks/ | |
| | +--- main.yml
+--- handlers/ |
| +--- ins_nginx/
+--- vars/ |
| +--- files/
+--- defaults/ | |
| | +--- index.html
+--- meta/ +--- vars/
| |
| +--- main.yml
+--- playbook.yml +--- test.yml | | +--- roles/ +--- roles/ | | +--- role01/ +--- ins_mariadb/ | | | +--- files/ | +--- vars/ | | | | +--- templates/ | | +--- main.yml | | +--- tasks/ +--- tasks/ | | | | +--- main.yml +--- handlers/ | | +--- ins_nginx/ +--- vars/ | | +--- files/ +--- defaults/ | | | | +--- index.html +--- meta/ +--- vars/ | | | +--- main.yml
+--- playbook.yml                  +--- test.yml
|                                  |
+--- roles/                        +--- roles/
     |                                  |
     +--- role01/                       +--- ins_mariadb/
          |                             |    |
          +--- files/                   |    +--- vars/
          |                             |    |    |
          +--- templates/               |    |    +--- main.yml
          |                             |    +--- tasks/
          +--- tasks/                   |         |
          |                             |         +--- main.yml
          +--- handlers/                |
          |                             +--- ins_nginx/
          +--- vars/                              |
          |                                       +--- files/
          +--- defaults/                          |    |
          |                                       |    +--- index.html
          +--- meta/                              +--- vars/
                                                  |    |
                                                  |    +--- main.yml

使用例 +— main.yml
Nginx と MariaDB をインストールして起動する Roles 適用する
$ mkdir -p roles/ins_mariadb/{tasks,vars}
$ mkdir -p roles/ins_nginx/{files,tasks,vars}

1.ファイルを編集します
$ vi test.yml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
- hosts: target_servers
become: yes
become_method: sudo
roles:
- ins_mariadb
- ins_nginx
- hosts: target_servers become: yes become_method: sudo roles: - ins_mariadb - ins_nginx
- hosts: target_servers
  become: yes
  become_method: sudo
  roles:
    - ins_mariadb
    - ins_nginx

2.mariadb用main.ymlの修正
$ vi roles/ins_mariadb/vars/main.yml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mariadb_package:
- mariadb-server
- python3-pymysql
mariadb_package: - mariadb-server - python3-pymysql
mariadb_package:
  - mariadb-server
  - python3-pymysql

3.タスクのmain.ymlを編集します
$ vi roles/ins_mariadb/tasks/main.yml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
- name: mariadb is installed
apt:
name: "{{ mariadb_package }}"
state: present
tags: install_mariadb
- name: mariadb is running and enabled
service:
name: mariadb
state: started
enabled: yes
- name: mariadb is installed apt: name: "{{ mariadb_package }}" state: present tags: install_mariadb - name: mariadb is running and enabled service: name: mariadb state: started enabled: yes
- name: mariadb is installed
  apt:
    name: "{{ mariadb_package }}"
    state: present
  tags: install_mariadb

- name: mariadb is running and enabled
  service:
    name: mariadb
    state: started
    enabled: yes

4.nginx用のmain.ymlを編集します
$ vi roles/ins_nginx/vars/main.yml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
nginx_package:
- nginx
nginx_package: - nginx
nginx_package:
- nginx

nginxのtasksのmain.ymlを編集します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ vi roles/ins_nginx/tasks/main.yml
- name: nginx is installed
apt:
name: "{{ nginx_package }}"
state: present
tags: install_nginx
- name: edit nginx.default
lineinfile:
path: /etc/nginx/sites-available/default
regexp: "server_name _;"
line: "server_name {{ ansible_fqdn }};"
tags: edit_nginx.default
- name: nginx is running and enabled
service:
name: nginx
state: started
enabled: yes
- name: put index.html
copy:
src: index.html
dest: /var/www/html
owner: root
group: root
mode: 0644
- name: check nginx
uri:
url: http://{{ ansible_fqdn }}
$ vi roles/ins_nginx/tasks/main.yml - name: nginx is installed apt: name: "{{ nginx_package }}" state: present tags: install_nginx - name: edit nginx.default lineinfile: path: /etc/nginx/sites-available/default regexp: "server_name _;" line: "server_name {{ ansible_fqdn }};" tags: edit_nginx.default - name: nginx is running and enabled service: name: nginx state: started enabled: yes - name: put index.html copy: src: index.html dest: /var/www/html owner: root group: root mode: 0644 - name: check nginx uri: url: http://{{ ansible_fqdn }}
$ vi roles/ins_nginx/tasks/main.yml
- name: nginx is installed
  apt:
    name: "{{ nginx_package }}"
    state: present
  tags: install_nginx

- name: edit nginx.default
  lineinfile:
    path: /etc/nginx/sites-available/default
    regexp: "server_name _;"
    line: "server_name {{ ansible_fqdn }};"
  tags: edit_nginx.default

- name: nginx is running and enabled
  service:
    name: nginx
    state: started
    enabled: yes

- name: put index.html
  copy:
    src: index.html
    dest: /var/www/html
    owner: root
    group: root
    mode: 0644

- name: check nginx
  uri:
    url: http://{{ ansible_fqdn }}

テストメッセージを書き込みます
$ echo “nginx index page" > roles/ins_nginx/files/index.html

playbookを実行する

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ ansible-playbook test.yml --ask-become-pass
$ ansible-playbook test.yml --ask-become-pass
$ ansible-playbook test.yml --ask-become-pass

 

 

 

IT

Posted by arkgame