DevOps課程-Configuration Management with Ansible 4

Ansible Inventory and Ansible ad-hoc commands

ZONGRU Li
Mar 30, 2022

為了方便,後面稱EC2Ansible為的Ansible

DigitalOcean的兩台機台直接稱Targets

首先要先告訴EC2Ansible要掌控的Target機台有哪些

需要建立一個hosts檔案,在裡面描述DigitalOceanTarget機台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
link

一般ssh連線都是如下:

ssh 帳號@IP
或是
ssh -i id_rsa斯鑰檔位置 帳號@IP

所以上面的hosts檔還缺少帳號

所以還要再寫一個帳號的attribute ansible_user>

link

完成後如下:

然後儲存!

接著就要開始使用到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檔案改為:

假裝有AWS的server可能如圖寫法

也可以依據性質分類,類似如下:

這邊就先改回如下:

然後我現在重複下剛剛的ping指令,但是我想指定到droplet群組:

#指定群組的指令下法:
ansible droplet -i hosts -m ping
#並且也可以指定單台:
ansible {IP} -i hosts -m ping

接著考慮到大型公司系統可能有50台Droplet機台

所以可以透過[群組:var]變數方式改寫為如下:

儲存

再次測試:

OK

當前的hosts檔內容:

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet