Ansibleを触ってみた
Ansibleを触ったのでメモ
Ansibleとは
エージェントレス型の構成管理ツール。エージェント型とエージェントレス型では以下のような違いがある。
◯エージェントレス型
管理対象のサーバにエージェントを入れる必要がない
管理対象のサーバへの接続情報が必要になる
管理端末から構成反映の処理を行う必要がある
◯エージェント型
管理対象のサーバにエージェントを入れる必要がある
起動時などに自動で構成が適用される
複数の設定が異なるサーバを管理する場合は、管理用サーバを別で持てるエージェントレス型の方が扱いやすいような気がします。それからAnsibleはエージェント型のchefやpuppetより後発のため洗練されている部分がありますし、RedHatがAnsibleを買収したため今後も開発が続けられることが期待できます。
0.インストール環境準備
Vagrant.configure("2") do |config| config.vm.define :node1 do |node| node.vm.box = "geerlingguy/centos7" node.vm.network "forwarded_port", guest: 22, host: 2001, id: "ssh" node.vm.network "private_network", ip: "192.168.33.11" end config.vm.define :node2 do |node| node.vm.box = "geerlingguy/centos7" node.vm.network "forwarded_port", guest: 22, host: 2002, id: "ssh" node.vm.network "forwarded_port", guest: 80, host: 8000, id: "http" node.vm.network "private_network", ip: "192.168.33.12" end end
ssh接続準備
管理用端末が管理対象の端末を操作する際にはsshのプロトコルを使用するので、鍵を配置する等の事前準備は必要になると思います。
1.Ansibleインストール
# vagrant ssh node1 # sudo yum install epel-release # sudo yum install ansible
2.管理対象ホストの設定とAnsibleの疎通確認
管理対象ホストの設定
$ echo 192.168.33.12 > hosts
pingでの疎通確認
node1の方で実行 $ ansible -i hosts 192.168.33.12 -m ping 192.168.33.12 | success >> { "changed": false, "ping": "pong" }
ansibleコマンドで連携対象サーバ上で任意のコマンドを実行する
$ ansible -i hosts 192.168.33.12 -a 'uname -r' 192.168.33.12 | success | rc=0 >> 2.6.32-431.el6.x86_64
任意のコマンドを実行
ansible -i hosts 192.168.33.12 -m yum -s -a name=telnet
ansible yumは以下でドキュメントを確認できる
$ ansible-doc yum
3.Playbookの作成から実行まで
Playbookの作成
# vi simple-playbook
--- - hosts: test-servers become: yes tasks: - name: be sure httpd is installed yum: name=httpd state=installed - name: be sure httpd is running and enabled service: name=httpd state=started enabled=yes
Playbookの文法チェック
ansible-playbookに–syntax-checkのオプションをつけて実行する
ansible-playbook -i hosts simple-playbook.yml --syntax-check
Playbookのタスク一覧を確認する
–list-tasksオプションをつけてplyabookのnameを一覧表示してタスクを確認
[vagrant@localhost ~]$ ansible-playbook -i hosts simple-playbook.yml --list-tasks playbook: simple-playbook.yml play #1 (test-servers): test-servers TAGS: [] tasks: be sure httpd is installed TAGS: [] be sure httpd is running and enabled TAGS: []
Playbookの実行
[vagrant@localhost ~]$ ansible-playbook -i hosts simple-playbook.yml PLAY [test-servers] ************************************************************ TASK [setup] ******************************************************************* ok: [192.168.33.12] TASK [be sure httpd is installed] ********************************************** changed: [192.168.33.12] TASK [be sure httpd is running and enabled] ************************************ changed: [192.168.33.12] PLAY RECAP ********************************************************************* 192.168.33.12 : ok=3 changed=2 unreachable=0 failed=0
ansibleには冪等星性(ある操作を何度実行しても常に結果が同じになる)が備わっており、上記実行例ではchangedの部分が新しく実行された部分になるようです。これでnode2のサーバにPlaybookで指定した通りapacheがインストールされました。
node2内でhttpdが動作しているか確認
[vagrant@localhost ~]$ sudo systemctl status httpd
たったこれだけで、Apacheがインストールできました。chefはほとんど触ったことありませんが、それよりもシンプルで使いやすい気がします。
Playbook入門
yumを使う
tasks: - name: be sure httpd is installed yum: name=httpd state=installed
nameでインストール対象を指定する。state=installedはインスートールされているか確認し、されていなかったらインストールする。state=latestでは最新が入っているか確認し最新でなければインストールする。
コマンドを実行する
tasks: - name: disable selinux command: /sbin/setenforce 0
ファイルを編集する
文字列を置換する
tasks: - name: set selinux permisive replace: > dest=/etc/selinux/config regexp='SELINUX=enforcing' replace='SELINUX=disabled'
http://docs.ansible.com/ansible/replace_module.html
ホスト端末のファイルを送る
事前に転送するファイルを準備
echo hogehoge > copyFile
tasks: - name: copy test copy: > src=/home/vagrant/copyFile dest=/home/vagrant/copyFile