uuutee.log

Ansibleを使ってみる

インストール

mac をクライアントとして実行する

brew install ansible

ansible を実行

基本

# -i: デフォルトのhostsを使用しない場合、インベントリの指定が必要
# -a: コマンドを実行
ansible -i hosts hostname -a "uname -r"

playbook 実行方法

playbook を実行

ansible-playbook -i hosts playbook.yml

実行されるタスクを確認

ansible-playbook -i hosts --list-tasks playbook.yml

dry-run する

ansible-playbook -i hosts --check playbook.yml

デバッグする

ansible-playbook -i hosts -vvv playbook.yml

インベントリの書き方

インベントリは対象ホストが記述されたファイルのこと
ini ファイルの形式で記述する。

[web-servers]
host1
host2

playbook の書き方

yaml の書き方

yaml で記述する

# イコールで値を書く
parent: key1=value1 key2=value2 key3=value3

# 配列
- value
- value

# 配列をネスト
- tasks:
  - value
  - value

# オブジェクト
key: value

# オブジェクトをネスト
key:
  key: value
  key: value

# 改行1
key: |
改行
改行

# 改行2
key: >
改行
改行

タスクを実行する

---
- hosts: all
  become: yes
  tasks:
    - name: debug
      debug:
        msg: hello

role を実行する playbook

---
- hosts: all
  become: yes
  roles:
    - httpd
    - mysql

モジュール

処理を実行する。name で task に名前をつけることができる

デバッグ

- name: debug
  debug:
    msg: hello

インクルードする

- include: playbook.yml

ファイルを作成する

- name: ファイルを作成する
  file:
    path: /etc/httpd/vhosts.d/conf.d
    state: file
    owner: root
    group: root
    mode: 0755

- name: ディレクトリを作成する
  file:
    path: /etc/httpd/vhosts.d/
    state: directory
    owner: root
    group: root
    mode: 0755

- name: ファイルを削除する
  file:
    path: /etc/httpd/vhosts.d/
    state: absent

yum

- name: httpd2.4をインストール
  yum:
    name: httpd24
    state: installed

- name: httpd2.4を削除
  yum:
    name: httpd24
    state: absent

すべてのパッケージをアップデート

- name: yum update
  yum:
    state: latest
    name: "*"

service

service コマンドと同等の作業を行う

- name: httpdを起動する
  service:
    name: httpd
    state: started

- name: httpdをリロード
  service:
    name: httpd
    state: reloaded

OS 起動時に service を起動する (chkconfig)

- name: httpdをリロード
  service:
    name: httpd
    enabled: yes

変数

  # vars に変数を指定できる
  vars:

  # 別ファイルに切り出すことも可能
  vars_files:
    - vars.yml

定義済み変数

実行中の host を取得

{{ ansible_hostname }}
or
{{ ansible_nodename }}

roles のディレクトリ構造

ディレクトリを下記の構造で作成する

/roles/
/roles/role_name/
/roles/role_name/tasks/
/roles/role_name/tasks/main.yml

roles の変数ディレクトリ

/roles/role_name/defaults/ : 変数の初期値を書く
/roles/role_name/vars/ : 変数の設定値を書く