はじめに
検索をしてみても、Ansible 入門はさまざまありますけれども、理屈は抜きにして Ansible でコントロールする側 (コントロールノード) からコントロールされて構築される側 (ターゲットノード) の、Hello World 的なシンプルな手順がなかなかわかりませんでしたので、今回自分のためにメモいたしました。
コントロールノードからターゲットノードへの SSH 接続準備
- SSH 公開鍵の作成時、勉強目的等であれば何も考えずに質問には Enter のみを押しても良い。
- ssh-keygen: 認証用の鍵を生成
- -t: 鍵タイプ
- -o StrictHostKeyChecking=no: ssh は新しいホスト鍵をユーザの known_hosts ファイルに自動的に追加
- 参考: SSH_CONFIG (5)
# SSH 公開鍵の作成 # 次を質問される # Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): # Enter passphrase (empty for no passphrase): # Enter same passphrase again: ssh-keygen -t rsa # ターゲットノードへの SSH 公開鍵の登録 ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub vagrant@192.168.56.11
結果は、次のようになりました。
[vagrant@localhost playbook]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: 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: SHA256:7Z0aFhXJu7aTRZid1feLVR/z/+VNmOJDEtWvokleQoE vagrant@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | . ..o .| | E . +..o=| | o.= +O| | .o.+ +.=| | S.o. oo+o| | .+oBo=.+| | o+Xo* o+| | .+o* +| | . o | +----[SHA256]-----+ [vagrant@localhost playbook]$ [vagrant@localhost playbook]$ ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub vagrant@192.168.56.11 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/vagrant/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys vagrant@192.168.56.11's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh -o 'StrictHostKeyChecking=no' 'vagrant@192.168.56.11'" and check to make sure that only the key(s) you wanted were added. [vagrant@localhost playbook]$
コントロールノードからターゲットノードへの Ansible 疎通確認
シンプルなプレイブックを作成します。playbook ディレクトリを作り、その中に 3 つのファイルを作成します。
~/playbook
|–ansible.cfg
|–hosts
|–test.yml
接続先の指定として、どのファイルを使用するかを指定します。これを指定しないと、別の場所の設定ファイルを読込み、別の接続先 (といっても接続先無し) を使用しようとしてエラーとなりました。
[defaults] inventory = hosts
ターゲットノードの接続情報を記載します。
[test_servers] 192.168.56.11
ターゲットノードで実行する操作等を指定します。
- ターゲットノードの接続ユーザは vagrant
- ターゲットノードで操作するユーザを root に変更
- コントロールノードからターゲットノードに ping を実行
--- - name: test hosts: test_servers remote_user: vagrant become: yes become_user: root tasks: - name: ping pong check ping:
ここまでできたら、実践です。
cd ~/playbook/ # プレイブックを使用しないで疎通確認(ansible.cfg だけ必要なはず) ansible 192.168.56.11 -m ping # プレイブックを使用しての疎通確認 ansible-playbook -i hosts test.yml
次のようになりました。成功です!
[vagrant@localhost playbook]$ ansible 192.168.56.11 -m ping 192.168.56.11 | SUCCESS => { "changed": false, "ping": "pong" } [vagrant@localhost playbook]$ [vagrant@localhost playbook]$ ansible-playbook -i hosts test.yml PLAY [test] ****************************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************* ok: [192.168.56.11] TASK [ping pong check] ******************************************************************************************************************************************* ok: [192.168.56.11] PLAY RECAP ******************************************************************************************************************************************************* 192.168.56.11 : ok=2 changed=0 unreachable=0 failed=0 [vagrant@localhost playbook]$
ソースコード
今回のコードは、GitHub にアップしました。
おわりに
今まで、vagrant で趣味の仮想マシンを立てるのに Ansible を使ってきました。
いざ、vagrant を使わない、普通に Ansible を使いたいとき、どうしたら Ansible で構築できるのか、わからないことに気がついたのです><。
それで、今回調べました。
次の書籍、ページが参考になりました。ありがとうございます!
- vpsにssh接続してansibleのpingを通すまで – Qiita
- Ansibleで開発用サーバー作るのに覚えたはじめの一歩 – Qiita
- Ansibleのplaybookで使用できるアトリビュートの一覧 – Qiita
- Intro to Playbooks — Ansible Documentation の
Hosts and Users
以上です。