追記(2015-02-02)
kimikimi714/ansible_lesson · GitHub
リポジトリにあげ始めた。
もう少し書いたらchefとの比較記事あげたいな。
元祖ゆとりぷろぐらまkimikimiさんは相変わらずドットインストールにお世話になっている。
今日はansibleを触ってみよー。
なお基本的に開発環境はvagrantでやるが、vagrantを用意するための環境は
- Mac OSX 10.10.1 (yosemite)
- vagrant 1.7.1
- VirtualBox 4.3.20
とする。
またこの記事はドットインストールでやってることをまんまなぞっているだけなので、興味のある人だけが見るといいです。
ansibleのインストール
まず以下のようなVagrantfileを用意する。
$ cat Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.ssh.insert_key = false config.vm.define "web_server" do |web| web.omnibus.chef_version = :latest web.vm.box = "chef/centos-7.0" web.vm.network :private_network, ip: "192.168.33.10" end config.vm.define "db_server" do |db| db.omnibus.chef_version = :latest db.vm.box = "chef/centos-7.0" db.vm.network :private_network, ip: "192.168.33.20" end config.vm.define "host" do |host| host.omnibus.chef_version = :latest host.vm.box = "chef/centos-7.0" host.vm.network :private_network, ip: "192.168.33.30" end end
おもむろにvagrant up
を実行して3台分の仮想マシンを立ち上げる。
$ vagrant status Current machine states: web_server running (virtualbox) db_server running (virtualbox) host running (virtualbox) This environment represents multiple VMs. The VMs are all listed above with their current state. For more information about a specific VM, run `vagrant status NAME`.
以下はvagrant ssh host
に入った仮想マシン上でのコマンド。
これでhost
マシンにansibleが入る。
$ sudo yum install epel-release $ sudo yum install ansible $ ansible --version ansible 1.8.1 configured module search path = None
ansibleを適応するまでの準備
host
マシンからweb_server
とdb_server
に入るための環境を整える。
以下のコマンドたちもhost
マシン上で実行しており、かつホームディレクトリで実行していることに注意。
$ cat .ssh/config Host web_server HostName 192.168.33.10 Host db_server HostName 192.168.33.20 $ chmod 600 .ssh/config $ ssh-keygen -t rsa $ ssh-copy-id web_server $ ssh-copy-id db_server
ssh web_server
とssh db_server
を実行してhost
マシンからログインできることを確認する。
お試しansible
Inventoryファイルを作って、ping
モジュールを実行してみる。
$ cat hosts [web_server] 192.168.33.10 [db_server] 192.168.33.20 $ ansible all -i hosts -m ping 192.168.33.20 | success >> { "changed": false, "ping": "pong" } 192.168.33.10 | success >> { "changed": false, "ping": "pong" }
-i hosts
でInventoryファイルを指定しなくてもansibleを実行できるようにする。
$ cat ansible.cfg [defaults] hostfile = ./hosts $ ansible all -m ping 192.168.33.20 | success >> { "changed": false, "ping": "pong" } 192.168.33.10 | success >> { "changed": false, "ping": "pong" }
おk。
Playbookファイルを作って、そこにあるモジュールをansibleで実行させる。
その前にvagrant sandbox on
でsandboxモードにしておこう。
ここはmacのVagrantfileがあるディレクトリ上で
$ vagrant sandbox on 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% $ vagrant sandbox status [host] Sandbox mode is on [db_server] Sandbox mode is on [web_server] Sandbox mode is on
この状態でvagrant ssh host
でhost
マシンにログインして以下のようにansible-playbook
を実行する。
$ cat playbook.yml --- - hosts: all sudo: yes tasks: - name: add a new user user: name=kimikimi714 $ ansible-playbook playbook.yml PLAY [all] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.33.20] ok: [192.168.33.10] TASK: [add a new user] ******************************************************** changed: [192.168.33.10] changed: [192.168.33.20] PLAY RECAP ******************************************************************** 192.168.33.10 : ok=2 changed=1 unreachable=0 failed=0 192.168.33.20 : ok=2 changed=1 unreachable=0 failed=0
ではちゃんとkimikimi714ユーザが作成されたか確かめてみよう。
$ ssh web_server $ ls -la /home/ 合計 8 drwxr-xr-x. 4 root root 38 12月 23 14:41 . drwxr-xr-x. 18 root root 4096 12月 23 14:01 .. drwx------. 2 kimikimi714 kimikimi714 59 12月 23 14:41 kimikimi714 drwx------. 4 vagrant vagrant 4096 12月 23 14:31 vagrant $ exit $ ssh db_server $ ls -la /home/ 合計 8 drwxr-xr-x. 4 root root 38 12月 23 14:41 . drwxr-xr-x. 18 root root 4096 12月 23 14:02 .. drwx------. 2 kimikimi714 kimikimi714 59 12月 23 14:41 kimikimi714 drwx------. 4 vagrant vagrant 4096 12月 23 14:31 vagrant
ちゃんとユーザが作成されているようだ。
playbook.ymlの変更を行わずにansible-playbook
を再実行してみる。
$ ansible-playbook playbook.yml PLAY [all] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.33.10] ok: [192.168.33.20] TASK: [add a new user] ******************************************************** ok: [192.168.33.10] ok: [192.168.33.20] PLAY RECAP ******************************************************************** 192.168.33.10 : ok=2 changed=0 unreachable=0 failed=0 192.168.33.20 : ok=2 changed=0 unreachable=0 failed=0
確かにchanged=0
で冪等性が保たれている。このあとweb_server
とdb_server
マシンに入ってユーザが増えたり減ったりしてないか確認したが大丈夫だった。
ではsandboxモードになっている今db_server
だけrollbackしてみる。(もちろんmac上で)
$ vagrant sandbox rollback db_server 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% $ vagrant ssh db_server $ ls -la /home/ 合計 8 drwxr-xr-x. 3 root root 20 7月 22 03:38 . drwxr-xr-x. 18 root root 4096 12月 23 14:02 .. drwx------. 4 vagrant vagrant 4096 12月 23 14:31 vagrant
よし。db_server
だけがkimikimi714ユーザのない状態が作れた。これでansible-playbook
を実行してみよう。
$ ansible-playbook playbook.yml PLAY [all] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.33.10] ok: [192.168.33.20] TASK: [add a new user] ******************************************************** ok: [192.168.33.10] changed: [192.168.33.20] PLAY RECAP ******************************************************************** 192.168.33.10 : ok=2 changed=0 unreachable=0 failed=0 192.168.33.20 : ok=2 changed=1 unreachable=0 failed=0
192.168.33.20(db_server
)だけがchanged=1
になった。web_server
にはユーザがいたので実行していない。playbookで指定したマシンの全部に同じコマンドをいきなり実行するわけではなく、マシンごとの条件を見てコマンドを実行している。
次回(ていうか明日の記事?)ではchefでこれまで書いてきた内容をansibleで書くとどうなるのか試してみる。