0
Ansible multiple hosts with port forwarding (stackoverflow.com)
qrtt1 積分 1 編輯於

遇到這個問題是在用 Azure Cloud Service 遇到的。因為 Cloud Service 是透過 1 個 FQDN 去溝通的,它看起來會像是:

yourdomain.cloudapp.net

當你有多台 vm 在裡面的時候,就會把 ssh port 對應到不同的 port,例如:

vm1:22 => yourdomain.cloudapp.net:2021
vm2:22 => yourdomain.cloudapp.net:2022
vm3:22 => yourdomain.cloudapp.net:2023
vm4:22 => yourdomain.cloudapp.net:2024

那麼寫 ansible inventory 時就要寫成這樣子(原來的 host 就隨意取個代號就行了):

[service4azurecloud]
vm1 ansible_ssh_port=2021 ansible_ssh_host=yourdomain.cloudapp.net ...
vm2 ansible_ssh_port=2022 ansible_ssh_host=yourdomain.cloudapp.net ...
vm3 ansible_ssh_port=2023 ansible_ssh_host=yourdomain.cloudapp.net ...
vm4 ansible_ssh_port=2024 ansible_ssh_host=yourdomain.cloudapp.net ...
IngramChen 積分 0

咦?在 inventory 裡我一直都會替每個 host 做別名,而不是直接用 domain,即使是不用 azure。像是 kaif 就是:

kaif       ansible_ssh_host=104.155.193.153

然後 ansible_ssh_host 我也是傾向直接寫 IP,不用 domain。

haocheng 積分 0

我是寫 domain 耶,想說這樣換機器只要在 route53 換 IP 就好,不用改 inventory...

IngramChen 積分 1

果然我的習慣跟大家不同...

嘛,寫 domain 的話,我覺得有兩個地方不便。

  • 一是當機器掛掉時,你想馬上補一台,在這緊要當口,換 route53 緩不濟及,因為 dns 要一段時間才會生效 (再快也要幾分鐘) ,而且 dns 常常是在這切換的十幾分鐘內,一下指向舊的 IP ,一下指向新的 IP。這完全不能精準復機啊。

  • 二是要移機時,移機的過渡期會有新舊共存的時段 (看服務性質) ,你會先 provision 一台新的,再慢慢引導流量過去。新舊主機共存,自然只能先用 IP provision,等全部好了才會切換 dns。

qrtt1 積分 2

暫時性的,我習慣靠 /etc/hosts 解決。

qrtt1 積分 0 編輯於

我是遇到才認識 ansible_ssh_host 的用法的。 domain 或 IP 能通就可以了,不過有時會做點 special 時就可以用 /etc/hosts 把 domain 蓋掉 :P