nokoのブログ

こちらは暫定のメモ置き場ですので悪しからず

Ansibleについて調べたことメモ

はじめに

  • Ansibleまわりについて復習したときのメモ

メモ

ディレクトリ構成案

  • 『①inventoryで対象ホストと変数を設定し、②playbookでどのロール(各機能のタスク)を実行するかを定義して、③roleでplaybookから呼び出されるロール(各機能のタスク)を定義する』をシンプルに実現するディレクトリ構成とした。
  • 変数の格納場所が分散しないよう、host_varsに寄せる(varsディレクティブ、group_vars、defaults等は使わない)
  • →本来、group_varsに寄せるべき
├── inventory                       #
│   ├── prod                         # 環境ごとに分類する
│   │   ├── hosts                   #
│   │   └── host_vars               #
│   │       ├── <system>-web01.yml  # ホストごとに作成する(変数は基本的にここにのみ格納する)
│   ├── stg01                       #
│   ├── dev01                       #
│
├── playbooks                       #
│   ├── stable                      # stable環境とdevelopment環境で分類する
│   │   ├── <system>-web01.yml      # ホストごとに作成する
│   └── development                 #
│
└── role                            #
    ├── nginx                       #
    │   ├── tasks                   #
    │   ├── handlers                #
    │   ├── templates               # ファイルを配置する
    │   └── files                   # ファイルを配置する(tar,rpm等の一時配置ファイル)

ファイル例

  • inventory/prod/hosts
######
# NODES
######
[mgmt]
mgmt-01     ansible_host=10.1.1.10

[<system>-web-blue]
<system>-web01-blue ansible_host=10.0.0.11
<system>-web02-blue ansible_host=10.0.0.12

######
# SSH connection configuration
######
[all:vars]
# SSH User
ansible_user=ubuntu
ansible_ssh_private_key_file='~/.ssh/xxx-key.pem'

######
# Python configuration
######
[all:vars]
ansible_python_interpreter=/usr/bin/python3
  • inventory/prod/hosts_vars/-web01-blue
---
###################
# nginx
###################
nginx_deploy_module_nginx: nginx.zip
  • playbooks/stable/-web01-blue.yml(サンプル1)
---
- name: playbook of <system>-web01-blue.yml
  # 変数設定(playbook内で指定)
  vars:
    ansible_hostname: <system>-web01-blue
    ansible_role_dir: /opt/ansible/roles

  # 対象ホスト指定
  hosts: "{{ ansible_hostname}}"
  become: true

  # ロール指定
  roles:
    # common
    - role: "{{ ansible_role_dir }}/hostname"
    - role: "{{ ansible_role_dir }}/env"
    - role: "{{ ansible_role_dir }}/yum"
    - role: "{{ ansible_role_dir }}/user_app-user"
    - role: "{{ ansible_role_dir }}/user_ope-user"
    - role: "{{ ansible_role_dir }}/user_view-user"
    - role: "{{ ansible_role_dir }}/dir_work"
    - role: "{{ ansible_role_dir }}/dir_script"
    - role: "{{ ansible_role_dir }}/custom_metrics"
    - role: "{{ ansible_role_dir }}/awslogs_main"
    - role: "{{ ansible_role_dir }}/awslogs_deploy"
    - role: "{{ ansible_role_dir }}/backup_log"
    - role: "{{ ansible_role_dir }}/ds_agent"
    # individual
    - role: "{{ ansible_role_dir }}/disk_mount"
    - role: "{{ ansible_role_dir }}/nginx_main"
    - role: "{{ ansible_role_dir }}/nginx_deploy"
    - role: "{{ ansible_role_dir }}/java"
    - role: "{{ ansible_role_dir }}/tomcat_main"
    - role: "{{ ansible_role_dir }}/tomcat_deploy"
    - role: "{{ ansible_role_dir }}/oracle_client"
  • playbooks/mgmt.yml(サンプル2)
---
- name: Playbook of mgmt
  hosts: mgmt
  become: true
  vars:
    _role_dir: roles/
  roles:
    - role: "{{ _role_dir }}/hostname"
  • roles/nginx_main/tasks/mai.yml(サンプル1)
---
################################################################################
# nginx セットアップ
################################################################################
- name: create nginx_rpm dir
  file:
    path={{ nginx_main_dir_module }}
    state=directory
    owner={{ nginx_main_owner }}
    group={{ nginx_main_group }}
    mode={{ nginx_main_mode }}

- name: upload nginx_rpm
  copy:
    src="nginx-{{ nginx_main_rpm_ver }}.rpm"
    dest={{ nginx_main_dir_module }}

- name: yum nginx
  yum:
    name: "{{ nginx_main_dir_module }}/nginx-{{ nginx_main_rpm_ver }}.rpm"
    state: present

- name: start nginx and set auto start
  service:
    name: nginx
    state: started
    enabled: yes
  • roles/hostname/tasks/main.yml(サンプル2)
---
- name: Manage hostname
  hostname: name={{ inventory_hostname }}

運用ルール案

  • 変数には先頭にロール名をつける
  • モジュールの置き場
    • 大きい静的モジュール: confサーバの/var/moduleに置いておいて、filesにコピーする
    • ホストごとのモジュール(*_deployロール): confサーバの/var/deploy/に置いておいて、filesにコピーする