カテゴリー
Linux

Ansible コントロールノードからターゲットノードへの疎通確認メモ

はじめに

検索をしてみても、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 で構築できるのか、わからないことに気がついたのです><。

それで、今回調べました。

次の書籍、ページが参考になりました。ありがとうございます!

以上です。

コメントを残す