Ansibleの実行処理
1,インベントリの中からターゲットノードを見つける
2,コントロールノードでプレイブックをpythonのコードに変換
3,コントロールノードからターゲットノードへssh接続、pythonのコードを送信
4,ターゲットノードでpythonのコードを実行、出力結果をコントロールノードに返す
5,コントロールノード、ターゲットノードにあるpythonのコードを削除
という手順を踏んで実行されます。
ここで、プレイブックとインベントリはそれぞれ以下のような意味になりませす。
プレイブックとインベントリ
・プレイブック・・・処理の流れを定義したファイル。Chefでいう、recipe,
Puppetでいう、manifestに相当するファイル
YAML形式で書かれるため、コーディング経験がない人でも容易にかける
・インベントリ・・・ターゲットノードの情報が書かれたファイル
では、簡単なサンプルを実行してみます。
まずは、vagrantで3つの仮想環境を立ち上げましょう。
Vagrant.configure("2") do |config|
config.vm.define "host" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "host"
node.vm.synced_folder "host", "/vagrant"
node.vm.network :private_network, ip: "192.168.33.11"
node.vm.provision "shell", inline: <<-SHELL
sudo yum -y install epel-release
sudo yum install -y gcc python-pip python-devel openssl-devel libffi-devel
sudo pip install --upgrade pip setuptools
sudo pip install ansible
SHELL
end
config.vm.define "web" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "web"
node.vm.synced_folder "web", "/vagrant"
node.vm.network :private_network, ip: "192.168.33.12"
end
config.vm.define "db" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "db"
node.vm.synced_folder "db", "/vagrant"
node.vm.network :private_network, ip: "192.168.33.13"
end
end
ここからは、host(192.168.33.11)がコントロールノード、web(192.168.33.12)とdb(192.168.33.13)がターゲットノードという形です。
$vagrant up
$vagrant ssh host
でhostに入ります。
ここで、hostからweb,dbにそれぞれsshで接続するために、鍵の設定をしていきます。
鍵の設定
<仮想環境hostで>
# 秘密鍵、公開鍵の作成
$ssh-keygen -t rsa
# 全てにenterでok
# 仮想環境host(コントロールノード)に公開鍵登録
$ssh-copy-id localhost
# パスワード vagrant
# (ターゲットのーど)仮想環境web(192.168.33.12)に公開鍵登録
$ssh-copy-id 192.168.33.12
# パスワード vagrant
# (ターゲットのーど)仮想環境db(192.168.33.13)に公開鍵登録
$ssh-copy-id 192.168.33.13
# パスワード vagrant
これで,hostから
「ssh 192.168.33.12」や「ssh 192.168.33.13」のような形で接続可能になったはずです。
(つまり,「3,コントロールノードからターゲットノードへssh接続、pythonのコードを送信」の段階を踏めるようになったということ)
hostの中で、/vagrant以下に行って、
$cd /vagrant
sample_inventory.iniを作成
[host]
localhost
[web]
192.168.33.12
[db]
192.168.33.13
ここまでで設定は終了です。
以下のコマンドを実行し、sample_inventory.iniで定義した各ノードに対してpingコマンドを実行し、値が帰ってくるか確認します。
$ ansible all -i sample_inventory.ini -m ping
192.168.33.12 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.33.13 | SUCCESS => {
"changed": false,
"ping": "pong"
}
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
上記のようになっていればOKです。