macのvagrantでcentos7.2にansible2をinstallしてplay-book実行するまで
Vagrant メモ (1) – 1Q77 Vagrant メモ (2) – 1Q77
これにしたがってvirtualbox,vagrantをインストールしました。
VirtualBoxとVagrantはすでに設定済とします。
VagrantでCentOS7.2を使う。
こちらからほしいOSを探してリンクをコピーします
今回はなんとなくCentOS7.2を使ってみようと思うので、それを探します。・
$ vagrant box add centos7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box $ vagrant init CentOS7.2 # 適当なディレクトリで実行する $ vagrant up # 起動する $ vagrant ssh # 接続する
これでCentOSサーバに入れました。
参考: VagrantでCentOS7をインストール - Qiita
一方こんなやり方でもいいみたいです。
$ vagrant init --minimal ubuntu/trusty64 # minimalオプションを付けると設定ファイルが最低限のものだけになる。 $ vagrant up $ vagrant ssh
参考: VagrantとDockerについて名前しか知らなかったので試した - Qiita
一度取得したOSは追加のプロセスを経ないで立ち上げることができるっぽいですね。
ただ、どちらの方法でも、すでにboxがローカルになければ、セットアップに数十分くらいかかります。(ました。)
直接urlを指定してboxを追加するのは、CentOSでいうrmp、
名前を指定してboxを(追加した後)iした後するのは、yumで管理する的なことだと勝手に思ってます。
その一覧はどうやって見られるのでしょうか。
$ vagrant box list centos6 (virtualbox, 0) centos7.2 (virtualbox, 0)
ではこのOSたちはどこに保存されているのでしょうか。
標準では/Users/<user>/.vagrant.d/boxes
の下に配置されるようです。
$ pwd /Users/<user>/.vagrant.d/boxes $ tree -s . ├── [ 96] centos6 │ └── [ 96] 0 │ └── [ 192] virtualbox │ ├── [ 258] Vagrantfile │ ├── [ 11372] box.ovf │ ├── [ 26] metadata.json │ └── [ 423996416] packer-centos-6.5-x86_64-disk1.vmdk └── [ 96] centos7.2 └── [ 96] 0 └── [ 192] virtualbox ├── [ 258] Vagrantfile ├── [ 12065] box.ovf ├── [ 650415104] centos-vm-disk1.vmdk └── [ 26] metadata.json
確かにCentOSと思しき容量大きいファイルが存在しました。これらしいですね。
さて、今からansibleを使って一方のサーバーからもう一方のサーバーに処理を流したいので、sshで接続する必要があります。
IPアドレスはどうなっているのでしょうか。
デフォルトではプライベートIPの設定はできていないみたいなので、Vagrantfileを弄る必要があります。
# 以下のように設定 config.vm.network :private_network, ip: "192.168.33.10"
編集後、vagrantを再起動します。
$ vagrant reload
で再起動します。
同様にして同じ構成のサーバーをansibledというディレクトリの中に作ります。
ただしプライベートIPアドレスは192.168.33.11としておきます。
CentOSにansibleをinstallする
ansible用サーバーにて
# yum install epel-release # epelレポジトリを追加 # yum install ansible --enablerepo=epel-testing # ansibleをinstall # ansible --version # versionを確認 ansible 2.4.2.0
enablerepo=epel-testingにしないと、古いversionのansibleがinstallされてしまうということがあるみたいです。(検証してないですが、)
ansibleで構成管理をする
早速ansibleで変更を流してみましょう。
まずは疎通確認から。
ansible 192.168.33.11 -m ping [WARNING]: Could not match supplied host pattern, ignoring: all [WARNING]: provided hosts list is empty, only localhost is available [WARNING]: Could not match supplied host pattern, ignoring: 192.168.33.11 [WARNING]: No hosts matched, nothing to do
おっとこれは早漏でした。
受ける側の設定を何もしていなかったです。
いくら同じネットワーク内だからといって、無許可で流されたらたまったもんじゃないですね。
結局sshで接続することになるので、sshのconfigあたりを設定変更すればいけそうですね。
と思ったら、その前にansible側でもhostの情報を書かないとだめらしいです。
$ vi /etc/ansible/hosts
ここにホスト情報を追加します。
さて今一度疎通確認をしてみる。(受け側の設定何も変えてないのでだめだと思うが。)
# ansible 192.168.33.11 -m ping The authenticity of host '192.168.33.11 (192.168.33.11)' can't be established. ECDSA key fingerprint is 7a:f6:47:1b:a9:04:c8:c6:90:d5:8c:48:14:03:d3:64. Are you sure you want to continue connecting (yes/no)? yes 192.168.33.11 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added '192.168.33.11' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", "unreachable": true }
案の定だめでした。認証の部分で失敗しましたね。
認証方法は色々ありますが、今回はansible側の公開鍵を受け側に登録しておくことにします。
ansibleサーバにて
# vagrantユーザーで実行する $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): # 特に何も入力しないでEnterする Enter passphrase (empty for no passphrase): # 特に何も入力しないでEnterする Enter same passphrase again: # 特に何も入力しないでEnterする Your identification has been saved in /home/vagrant/.ssh/id_rsa. Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub. The key fingerprint is: 6f:9d:ed:39:06:75:70:9b:ff:c0:71:51:ff:00:8a:dc vagrant@localhost.localdomain The key's randomart image is: +--[ RSA 2048]----+ | . o| | . o . ...o| | o E .o=| | o++| | S o +o| | . ..oo .| | o o....| | . .o..| | .o. | +-----------------+ $ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsUSJIsKgxiOiFxh2obSw0RCOmODtyyFS60qr1/phQa35sDJwjcoy1kpBdLvIFeQZiWVmKU+vuz1lNjWekKvSOPmxmW54LAJSnqBpy4JgIXzRrm7kEEi0Ol9rkSG3LShtC89CXqOm+PVgXXXXXXXXXXXXXXXXXXXXXXXXXX0Hj+wBTUYrcvQZ7RDAYA1FQeav0Hj+wBTXXXXXXXXXXXXXXXXXXXXXXXXDAYA1FQeav0HnL1CAnseZtBdxXewh/0A9MU9kygj5G3E1j0ZG0q6l9Pt vagrant@localhost.localdomain # これをコピっとく
受けサーバ側
$ vi ~/.ssh/authorized_keys # 先程コピーした公開鍵を追加する
これにて完了です。
それでは満を持して疎通確認。
$ ansible 192.168.33.11 -m ping 192.168.33.11 | SUCCESS => { "changed": false, "ping": "pong" }
OKなようです。
ということは、普通にssh接続もできるということですね。
$ ssh -i ~/.ssh/id_rsa vagrant@192.168.33.11 The authenticity of host '192.168.33.11 (192.168.33.11)' can't be established. ECDSA key fingerprint is 7a:f6:47:1b:a9:04:c8:c6:90:d5:8c:48:14:03:d3:64. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.33.11' (ECDSA) to the list of known hosts. Last login: Fri Jan 5 19:42:58 2018 from 10.0.2.2
入れました。
さてここからがansibleの出番です。
ansibleのplaybookを作成してみます。
slコマンドをyumでinstallするだけのplaybookとします。
yum.yml
- hosts: all tasks: - name: slコマンドのyumインストール yum: name=sl
$ ansible-playbook yum.yml PLAY [all] ****************************************************************************************** TASK [Gathering Facts] ****************************************************************************** ok: [192.168.33.11] TASK [slコマンドのyumインストール] ***************************************************************************** fatal: [192.168.33.11]: FAILED! => {"changed": false, "msg": "You need to be root to perform this command.\n", "rc": 1, "results": ["Loaded plugins: fastestmirror\n"]} to retry, use: --limit @/home/vagrant/yum.retry PLAY RECAP ****************************************************************************************** 192.168.33.11 : ok=1 changed=0 unreachable=0 failed=1
おっと、yumはrootじゃないと使えないみたいです。
sudo: yes
を書き加えるだけでいいみたいです。
- hosts: all sudo: yes tasks: - name: slコマンドのyumインストール yum: name=sl
さて、いざ実行
$ ansible-playbook yum.yml [DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature will be removed in version 2.6. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. PLAY [all] ****************************************************************************************** TASK [Gathering Facts] ****************************************************************************** ok: [192.168.33.11] TASK [slコマンドのyumインストール] ***************************************************************************** changed: [192.168.33.11] PLAY RECAP ****************************************************************************************** 192.168.33.11 : ok=2 changed=1 unreachable=0 failed=0
OKっぽいですね。
実際に受け側のサーバーで確認してみます。
(@@) ( ) (@) ( ) @@ () @ O @ O @ ( ) (@@@@) ( ) (@@@) ==== ________ ___________ _| |_______/ \__I_I_____===__|_________| _)--- | H\________/ | | =|___ ___| _________________ | | H | | | | ||_| |_|| _| \_____A | | H |__--------------------| [___] | =| | _______|___H__/__|_____/[][]~\_______| | -| | | |-----------I_____I [][] [] D |=======|____|________________________|_ | o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__|__________________________|_ |___|= || || || |_____/~\___/ |_D__D__D_| |_D__D__D_| \O=====O=====O=====O_/ \_/ \_/ \_/ \_/ \_/
ちゃんとシュポってますね。
ということで、一旦ansible導入は一区切りつけたいと思います。
次回はplaybookのroleとかの使い分けを整理していきたいです。