CentOS6でAnsibleを使う

October 2, 2014

環境はCentOS 6.5 x86_64です。

install repository of epel

$ wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo rpm --upgrade --verbose --hash epel-release-6-8.noarch.rpm

install ansible

$ sudo yum install ansible --enablerepo=epel
$ ansible --version
ansible 1.7

markupsafe モジュールが足りない

yumで入れたのだがmarkupsafeが無いと言われたので入れる。

$ sudo pip install markupsafe

create hosts.ini and playbook.yml

$ vim hosts.ini

[www]
x.x.x.x
[image]
y.y.y.y
[www:vars]
db_host=z.z.z.z
db_name=database_name
db_user=user
db_pass=password
server_host=abc.abc.abc.abc

[www][image]はグループを指す。

変数を使いたい場合は[グループ名:vars]以下に定義すればplaybook.yml内で使える。

$ vim playbook.yml

---
- hosts: www
- sudo: true
- tasks:
    - name: be sure something is installed
      shell: yum -y install something
    - name: use vars
      shell: >-
        sed -i "s/#ServerName www.example.com:80/ServerName \{\{ server_host }}:80/" /etc/httpd/conf/httpd.conf;
    - name: restart
      shell: /etc/init.d/httpd restart

hosts.iniでで定義した変数は\{\{ 変数名 }}で呼び出せる。

ファイルを分割してincludeしたい

ansible公式にベストプラクティスあがってるけど。

個人的な用途としてはそんなに仰々しくなくても、単にincludeするだけで十分。

ディレクトリ構成はこんなふうに。

├ hosts.ini
├ playbook.yml
└ includes
    ├─ mysql.yml
    └─ php55.yml

playbook.yml内でincludeモジュールを使ってファイルを呼ぶだけでいい。

include元のplaybook

$ vim playbook.yml

---
- hosts: web
  sudo: true
  tasks:
    - include: includes/php55.yml

includeされるyamlファイルは以下。

$ vim includes/php55.yml

---
- name: setup epel
  shell: rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm;
  ignore_errors: True
- name: setup remi
  shell: rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm;
  ignore_errors: True
- name: edit epel repo
  shell: sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo
- name: setup php 5.5
  shell: yum -y install --enablerepo=remi-php55 php php-mysql php-mb* php-devel php-pear php-pecl-apc php-dom php-json;

ssh-keygenした?

あらかじめ、実行元サーバから各種実行先サーバ群へ鍵認証でSSHできるようにしておくこと。

実行してみる

ansible-playbook playbook.yml -i hosts.ini

Dry-Run

--checkをつける。

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

任意のコマンドを展開することも可能

状態チェックしたいときに便利。

wwwimageに当たる引数にはそのiniファイルのグループを指定。

ansible image -a "cat /etc/redhat-release" -i hosts.ini
ansible www -m shell -a "ps aux | grep httpd" -i hosts.ini

-mでモジュール指定できる。パイプでワンライナー書くならshellモジュールで。



Recent blog posts



(c) Copyright 2023 Kotaro Yoshimatsu