DevOps課程-Configuration Management with Ansible 4
為了方便,後面稱EC2的Ansible為的Ansible機
DigitalOcean的兩台機台直接稱Targets
首先要先告訴EC2的Ansible要掌控的Target機台有哪些
需要建立一個hosts檔案,在裡面描述DigitalOcean的Target機台IP
而這個hosts檔就是前面提到所謂的"Inventory" File
Inventory File:
- 也就是包含client server資料的檔案
- 其中"hosts"指的是被管理的Server
- 預設目錄在/etc/ansible/hosts
基本上就是把Targets兩台IP貼過來:
並且我們可以指定這兩個IP對應哪一個私鑰來做連線
要使用關鍵attribute指定,整體設定如下:
128.199.118.173 ansible_ssh_private_key_file=~/.ssh/id_rsa
159.223.50.243 ansible_ssh_private_key_file=~/.ssh/id_rsa
一般ssh連線都是如下:
ssh 帳號@IP
或是
ssh -i id_rsa斯鑰檔位置 帳號@IP
所以上面的hosts檔還缺少帳號
所以還要再寫一個帳號的attribute →ansible_user>
完成後如下:
接著就要開始使用到ansible的指令工具ad-hoc來測試剛剛建的檔案O不OK
基本命令如下:
ansible [pattern=target hosts or groups] -m [module] -a "[module options]"
例如:
ansible all -i hosts -m ping
其中-i hosts指向剛剛建的hosts,也就是當前目錄的hosts檔
前面的"all"則是指hosts檔內指定的所有機台
後面"-m"就是要執行的內容
考量到Targets Server可能有很多台,又或是來自不同的公有雲環境
會需要將機台做群組分類
可以再將hosts檔案改為:
也可以依據性質分類,類似如下:
這邊就先改回如下:
然後我現在重複下剛剛的ping指令,但是我想指定到droplet群組:
#指定群組的指令下法:
ansible droplet -i hosts -m ping
#並且也可以指定單台:
ansible {IP} -i hosts -m ping
接著考慮到大型公司系統可能有50台Droplet機台
所以可以透過[群組:var]變數方式改寫為如下:
再次測試:
當前的hosts檔內容: