matobaの備忘録

和歌山と東京を往復しつつ活動するエンジニアの記録

初めてのAnsibleプレイブック作成

先日、Ansibleに関するふわっとした理解を書きたした。

blog.mtb-production.info

今回は、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で接続するために、sshの設定を追記する。

~/.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で動かすことができるようになった。 次は、もうちょっと詳しいことをやりたい。