先日、Ansibleに関するふわっとした理解を書きたした。
今回は、Ansibleの簡単なプレイブックを作ってみました。
そもそも、Ansibleのチュートリアルは色々ネットに出てるんですけど、結局なんか長くて、気になることが多くてモヤモヤしてしまう感じがありました。
というわけで、とりあえず今の理解で、簡単にプレイブックを作ってみようと思います。
やることは以下のような感じ。
- ansibleのクライアントはMac OS Xにする。(楽なので)
- ansibleのサーバーは、vagrantで用意する。(楽なので)
- ansibleでやることは、ユーザー作成だけにする。(とりあえず動かせることを確認したいので。)
まずは、Ansibleをインストールする。 そのために、venvでPythonのローカル環境を作って、pipでインストールしよう。
$ python3 -m venv ansible $ . ansible/bin/activate (ansible)$ pip install ansible ...(略) Successfully installed MarkupSafe-1.0 PyYAML-3.12 ansible-2.4.0.0 asn1crypto-0.23.0 bcrypt-3.1.4 cffi-1.11.2 cryptography-2.1.1 idna-2.6 jinja2-2.9.6 paramiko-2.3.1 pyasn1-0.3.7 pycparser-2.18 pynacl-1.1.2 six-1.11.0 (ansible)$ ansible --version ansible 2.4.0.0 config file = None configured module search path = ['/Users/myuser/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /Users/myuser/work/ansible/lib/python3.6/site-packages/ansible executable location = /Users/myuser/work/ansible/bin/ansible python version = 3.6.1 (default, Apr 4 2017, 09:40:21) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)]
なんかインストールできた様子。
よし、次に行こう。
vagrantで接続するサーバーを用意する。
(ansible) $ vagrant init ubuntu/trusty64 ...略 (ansible) $ vagrant up ...略 (ansible) $ vagrant ssh Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-110-generic x86_64) ...略 vagrant@vagrant-ubuntu-trusty-64:~$
とりあえず、構築するゲストOSが用意できた。
ここから、vagrantで立ち上げたゲストOSにsshで接続する。
まずは、vagrantで立ち上げたゲストOSにIPアドレスを付与するために、 Vagrantfile
設定を修正。(デフォルトの設定ファイルの中でコメントアウトされてるので解除する。)
config.vm.network "private_network", ip: "192.168.33.10"
~/.ssh/config
に以下を追加した。
(鍵のパスは、 vagrant init
したフォルダから見て
.vagrant/machines/default/virtualbox/private_key
にあったので、そこに通した)
Host 192.168.33.10 IdentityFile /path/to/vagrant/private_key User vagrant
なお、設定はこの辺りを参考にさせてもらった。 VagrantでAnsibleのPlaybookを作るためのローカル環境を作る - Qiita
とりあえず、Ansibleで接続する前にターミナルからssh接続してみる。
$ ssh 192.168.33.10 Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-110-generic x86_64) .... vagrant@vagrant-ubuntu-trusty-64:~$
接続できた。
次に、このゲストOSにansibleから接続できるようにする。 ansibleの場合、接続先は、inventryというファイルに書くらしいので、書いてみた。
(ansible) $ cat inventory 192.168.33.10
そのあと、Ansibleから疎通確認を行う。
(ansible) $ ansible all -i inventory -m ping 192.168.33.10 | SUCCESS => { "changed": false, "failed": false, "ping": "pong" }
成功した様子。
よし。 プレイブックを作っていく。今回は、userを作りたいのでこのあたりを参考にする。
user - Manage user accounts — Ansible Documentation
ansibleのプレイブックの形式は、yamlというフォーマット。user.yml
を作った。
- hosts: all become: yes tasks: - name: make user user: name: sample_user
全てのホスト (hosts: all
) で、sudo して(become
)、sample_user
を作るというymlのつもり。(少しこの辺りで試行錯誤した。)
これを実行する。
(ansible) $ ansible-playbook user.yml -i inventory PLAY [all] ***************************************************************************************** TASK [Gathering Facts] ***************************************************************************** ok: [192.168.33.10] TASK [make user] *********************************************************************************** ok: [192.168.33.10] PLAY RECAP ***************************************************************************************** 192.168.33.10 : ok=2 changed=0 unreachable=0 failed=0
成功した様子。
ok=2
となっているのが気になる。
何回か試行錯誤してる中で、 ok=1
と出ている箇所もあるので、何かしらのOKの個数なのだと思うけど、何が2なのかは、わかっていない。
きちんとユーザができているか確認してみよう。
(ansible) $ vagrant ssh Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-110-generic x86_64) .... vagrant@vagrant-ubuntu-trusty-64:~$ sudo su sample_user sample_user@vagrant-ubuntu-trusty-64:/home/vagrant$
ユーザはできている様子だった。
とりあえず、Ansibleで動かすことができるようになった。 次は、もうちょっと詳しいことをやりたい。