ansible を触るうえで基礎となる部分のメモ
初期セットアップとネットワーク構成に必要な内容をメモ
これからしばらくの間はLinuxサーバーを立てたらできるだけansibleでセットアップとかをやるようにしてみる
ネットワーク構成

・Controller から Node に対してSSHが通信許可されているようにすること
・Controller から送られたコマンドを Nodeがpythonで実行するため、Nodeにはpythonの実行環境が必要
・Controller から命令を送るたびにSSHのパスワードが求められるのは煩わしいのでSSHの鍵を最初に登録しておくと楽
ssh-keygen -t rsa
ssh-copy-id -o StricHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub localhost
ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub localhost
ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub 192.168.2.71
ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub 192.168.2.72
ssh-copy-id -o StrictHostKeyChecking=no -i $HOME/.ssh/id_rsa.pub 192.168.2.73
ssh-copy-id のIPアドレス部分はターゲットノードをすべて指定しておく
ansible の処理の仕組み
・ansibleでYAMLを実行してもPlaybookの内容がそのままNodeで実行されるわけではない。
処理の流れとしては以下のイメージ
1.ControllerがターゲットとなるNodeを選択
2.playbook(YAMLファイル)の記載内容をControllerがpythonの実行コードに変換する
3.ControllerがNodeに対してpythonの実行コードをSFTPで送信する
4.Nodeが受け取ったpythonコマンドを実行して、処理結果をControllerへ送信する
※ このときにansible.builtin.ping などを実行しても、あくまで実行されるのはansibleによるコマンド実行であり、ICMPパケットを使ったpingが行われるわけではない点に注意
ansible コマンド実行例
用意したファイル
localhost
[target_node]
192.168.2.71
192.168.2.72
192.168.2.73
[target_node] はノードをグループにまとめるための名称なので自由な名前を使用
コマンド実行
[ansible@ansible-controller ]$ ansible -i inventory.ini target_node -m ansible.builtin.ping
192.168.2.72 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.168.2.73 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.168.2.71 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
通信の可否を判断可能。
実際にICMP-Pingを行っているわけではなく、SSHで通信できたらその応答をpythonが作って送信しているだけ
tcpdumpでキャプチャしても何も出力されません
以上、とりあえず今後も定期的にアウトプットできるといいなぁ