Vagrant
Ansible

Ansibleを使って複数ホストに同時にインストールしてみる

More than 3 years have passed since last update.

構成管理ツール Ansible を使って複数ホストに何かをインストールしてみた。


動機、注意など


  • 環境が変わる度、 過去のメモを見ながら yum や apt を叩いたりするのに飽き飽きしている → うまい管理方法はないか


    • ゆるく Infrastructure as Code をやってみよう



  • まだよくわかっておらず、Ansible をシェルスクリプトっぽく便利に使ってみた感じなので、色々間違っていると思う。


やったこと


  • Docker を 複数ホストにインストールする


    • 別に Docker でなくても良かったが、今後使ってみようと思ったので




前提など


  • ローカル環境:


    • MacOSX (Mavericks) + Homebrew



  • 管理対象:


    1. 職場にある RHEL 6.6 (既に色々入っている)

    2. ローカルの仮想サーバー CentOS 6.6 (Vagrant で構築したばかり; 方法は後述)



  • EPEL版 Docker を インストールする


    • (RHEL 7 には docker が同梱されているため、そもそもこの方法ではうまくいかない)




Docker をインストールする Ansible playbook


  • Docker のCentOSへのインストールマニュアルを見ながら、同じような動きをする Playbook を作った


    • 単に上から順に書いただけなので、 Ansible の使い方や流儀には合っていなさそう



  • EPEL については、 Ansible Galaxy から見つけてきた、 EPEL を登録する Ansible Role を使う


    • CentOS 側は全く何も触っていないので、 EPEL を入れる必要があった

    • RHEL 側は EPEL が入っているので、 EPEL を入れるところは 何も起こらないはず(無害) (idempotency!)




docker-yum.yaml

- hosts: all

sudo: yes
tasks:
- name: Install libselinux-python
yum: name=libselinux-python state=present

- hosts: all
sudo: yes
roles:
- goozbach.EPEL

- hosts: all
sudo: yes
tasks:
- name: Install docker-io from yum
yum: enablerepo=epel name=docker-io state=present
- name: Start docker service
service: name=docker state=started



手順

Ansible のインストール

keigoi@zorba$ brew update

keigoi@zorba$ brew install ansible

EPEL repo を有効にしてくれる Role を Ansible Galaxy からゲット

keigoi@zorba$ ansible-galaxy install goozbach.EPEL

インストール対象のホストを記述したファイルを準備.

ssh コマンドに渡すホスト名が使える模様.


hosts

[vagrant-centos]

vagrant-centos

[kirin]
123.45.67.89


実行 (以下はインストール完了後の実行ログ. 実際には Playbook に書き足しながら何度も実行したので、所々で changed と出る)

keigoi@zorba$ ansible-playbook -i hosts --ask-sudo-pass docker-centos.yml

sudo password:

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [vagrant-centos]
ok: [kirin]

TASK: [Install libselinux-python] *********************************************
ok: [vagrant-centos]
ok: [kirin]

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [vagrant-centos]
ok: [kirin]

TASK: [goozbach.EPEL | ensure directory /etc/pki/rpm-gpg/] ********************
ok: [vagrant-centos]
ok: [kirin]

TASK: [goozbach.EPEL | copy GPG key] ******************************************
ok: [vagrant-centos]
ok: [kirin]

...

TASK: [Start docker service] **************************************************
ok: [vagrant-centos]
ok: [kirin]

PLAY RECAP ********************************************************************
kirin : ok=16 changed=0 unreachable=0 failed=0
vagrant-centos : ok=16 changed=0 unreachable=0 failed=0


付録:Vagrant を使った CentOS 環境構築

keigoi@zorba$ mkdir vagrant-centos && cd vagrant-centos

keigoi@zorba$ vagrant init chef/centos-6.6
keigoi@zorba$ vagrant up
keigoi@zorba$ vagrant ssh-config --host vagrant-centos >>~/.ssh/config # ssh vagrant-centos でログインできるように


余談


  • Vagrant を VirtualBox で動かすと遅いという話をどこかで見たので、 わざわざ Vagrant VMWare Integration を買ってしまった ($79)