在開始講 Ansible 怎麽用前,我們先講個比較簡單的 Ansible 用法, Ad-Hoc
不過在那之前,我們先講怎麽安裝 Ansible
安裝 Ansible 的方式很簡單,首先你的電腦上要有 pip
,這是 Python 的套件管理工具
接下來,要安裝 Ansible 的話只要一行 pip install ansible
就能搞定
好了,我們來介紹 Ad-Hoc 吧,不過先講個 Ansible 最基礎的概念, inventory
inventory
是 Ansible 用來得知有哪些裝置要管理的檔案,一個 inventory
的檔案範例大概長這樣
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
在 inventory
檔案裡,你可以定義你的主機群,Ansible 會利用這些資訊來去判斷在操作時,需要對哪些主機進行操作
而如果有機器需要些特殊設定,例如登入的使用者、SSH 的 port 需要調整...等等,也可以在 inventory
裡進行設定,如下
atlanta:
host1:
ansible_user: admin
ansible_port: 22222
host2:
http_port: 303
maxRequestsPerChild: 909
inventory
的彈性非常高,但,如果有很多台機器需要一樣的設定,也可以用 group variable 的方式進行設定
atlanta:
hosts:
host1:
host2:
vars:
ntp_server: ntp.atlanta.example.com
proxy: proxy.atlanta.example.com
Inventory 還有很多可以調整的地方,以及實務上的 best practices
更多資訊請參閱 How to build your inventory
我們假設我們有台機器,上面有 Ubuntu,然後我們已經知道了它的 IP
我們來寫第一個 inventory
all:
children:
webservers:
hosts:
172.25.0.1:
ansible_user: root
寫好 inventory
後,我們先來試看看 Ansible 能不能利用 Ad-Hoc 讀到這臺機器
Ansible 有個功能叫做 gather_facts
,這功能會先取得機器的資訊,我們可以用這個功能來驗證 Ansible 是否能正常與機器互動
如果要利用 Ansible 的 Ad-Hoc 的功能,我們要用這樣的指令ansible [pattern] -m [module] -a "[module options]"
而我們要取得機器資訊的話,我們要使用的是 setup
這個 module
最後執行的指令是 ansible -i inventory webservers -m setup
而當 Ansible 要連到 inventory
的機器時,一般是使用 SSH
連線
如果你的主機從來沒連過這臺機器的話,由於你的電腦不知道能不能信任對方的金鑰
所以會看到這樣的 prompt
遇到這樣的訊息輸入 yes
即可,不過這樣的解法在機器數量增加時不適用
我們之後會說明怎麽解
當 Ansible 成功連到機器後,會自己去取得機器的資訊,然後會回傳一堆資訊給你
大概長的像這個樣子
看到這樣的畫面就代表你有成功連上機器,Ansible 也正確的取得機器資訊了
好了,那 Ad-Hoc 還能做什麼呢?
我們可以利用 Ad-Hoc 模式來安裝 Nginx...
可以利用 Ad-Hoc 模式來複製檔案...
可以利用 Ad-Hoc 模式重新啟動服務...
甚至可以利用 Ad-Hoc 模式重新開機
基本上,大多數你想做的事情, Ansible Ad-Hoc 都能做到
不過,如果我一次想要做很多事,這樣 Ad-Hoc 我還不是要跑很多指令?
對,所以接下來我們要介紹 Ansible Playbook,讓你把很多指令寫成一個集合,每次都只要執行一行指令就能做完很多事情
明天介紹 Playbook