はじめに
これはあくまで個人的なメモです。
Ansibleを触る機会があったので
詰まったところなどを解消しつつメモ程度にチュートリアルとして残したくQiitaを利用しました。
前提条件
- Vagrantがインストールされている
- VirtualBoxがインストールされている
vagrant Boxを手に入れよう
centos6.7となっておりますがこれは任意に名前を付ける事が可能な為
centos-6.7などの場合もあります。
box listを確認する
$ vagrant box list
centos6.7 (virtualbox, 0)
boxをダウンロードする(※centos6.7があればスキップ)
$ vagrant box add centos6.7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
作業ディレクトリを作りvagrantファイルを編集する
作業ディレクトリの作成と移動
$ mkdir ~/ansible
$ cd ~/ansible
Vagrantfileの作成
# centos6.7の部分はvagrantのbox名
$ vagrant init centos6.7
$ vi Vagrantfile
自分は全消しで以下を記入しました。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.ssh.insert_key = false
config.vm.define "webserver1" do |webserver1|
webserver1.vm.hostname = "webserver1"
webserver1.vm.box = "centos6.7"
webserver1.vm.network "private_network", ip: "192.168.33.21"
end
config.vm.define "webserver2" do |webserver2|
webserver2.vm.hostname = "webserver2"
webserver2.vm.box = "centos6.7"
webserver2.vm.network "private_network", ip: "192.168.33.22"
end
end
vagrant立ち上げ
$ vagrant up
詳細確認
$ vagrant ssh-config
Host webserver1
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/{User名}/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
Host webserver2
HostName 127.0.0.1
User vagrant
Port 2201
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/{User名}/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
今回は
webserver1をansibleの適用対象とし
webserver2をansible環境として運用しましょう。
この時私は失敗したと思いました。
ansibleという名前と
targetで分ければよかったと。。。orz
ansibleインストール
$ vagrant ssh webserver2
[vagrant@webserver2 ~]$ sudo yum -y install ansible
ssh-keyの設定関係
ansible環境から対象環境へsshで接続できるように
sshのキーをwebserver2=>webserver1へ送ります。
ssh-keyの生成とコピー
[vagrant@webserver2 ~]$ ssh-keygen -t rsa
[vagrant@webserver2 ~]$ ssh-copy-id vagrant@192.168.33.21
# 色々聞かれますがenter連打でokです
# 最後にpasswordを聞かれますが、vagrantが初期パスワードになっています
ssh接続確認
[vagrant@webserver2 ~]$ ssh vagrant@192.168.33.21
[vagrant@webserver1 ~]$
# 2から1にノンパスで行けるようになったので成功です
インベントリの作成
インベントリは、反映先サーバの一覧のようです。
一般的には、hostsという名前で利用されるようです。
インベントリの作成
$ vi ~/ansible/hosts
[webserver]
192.168.33.21
気分転換に疎通確認をしてみる
[vagrant@webserver2 ~]$ cd /vagrant/
[vagrant@webserver2 vagrant]$ ansible all -i hosts -m ping
192.168.33.21 | SUCCESS => {
"changed": false,
"ping": "pong"
}
(ここからが本編)Playbookを作成する
playbookを利用しtargetであるwebserver1にnginxをインストールさせます
またplaybookには大きく分けて3つの定義が必要になるそうです
-
target
- どこに・誰が実行するか
-
vars
- 変数を指定する(taskで使用する)
-
task
- どんなことをするかモジュール使って記述する
以上を踏まえてplaybookを作成します
playbookを記述する
$ vi ~/ansible/nginx.yml
- hosts: webserver
become: True
tasks:
- name: install nginx repo
yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present
- name: install nginx
yum: name=nginx
- name: restart nginx
service: name=nginx state=restarted
それぞれの意味
- hosts:
- hostの指定。今回はグループを指定している。
- become:
- sudoとして実行する
- tasks:
- 実行するタスク。ここに記述した順に実行されていく
- name:
- タスクの名前
- yum:
- yumモジュールを利用
- service:
- Serviceモジュールを利用
※Ansibleでは決まったディレクトリなどから情報を暗黙的に取得するため、依存関係を理解しておく必要がある。
ansible実行
適用実行する
[vagrant@webserver2 vagrant]$ ansible-playbook -i hosts nginx.yml

もう一度実行してみる
[vagrant@webserver2 vagrant]$ ansible-playbook -i hosts nginx.yml
nginxはすでにinstallされている為okとなっています。
ただしrestartタスクは何度でもできるものとなっている為
changed=1になっている事がわかります。

表示してみる

最後に
インストール物などを全てコードベースで残す事ができるのは便利ですね。
何か変更があった際、githubなどで差分などを確認できますし
何より目に見える形で残せるのはとても良いです!
共有も簡単でインストールに間違いなども起こらないのでステキです!
参考元:VagrantでAnsible超初歩ハンズオン
:【チュートリアル】Ansible 基本のキ (インストールから複数サーバへの変更適用)
:Ansible Documentation