上篇(也不一定非要分個先後,隻是上篇能讓您快速上手):
ansible官方文檔翻譯-快速開始篇(基于rhel8系統,适用于centos)
原文連結:Introduction to ad hoc commands
ad hoc指令簡介(臨時指令)
ansible的ad hoc指令使用/usr/bin/ansible指令行工具在一個或多個受控節點上自動化一個任務。ad hoc指令簡單友善,但是不可複用。是以我們為什麼要先學習ad hoc指令呢?ad hoc指令展示了ansible的簡潔與功能(原文為power,這裡我個人認為翻譯為功能最好)。您在這裡學到的概念将會貫穿您學習ansible的始終,包括後面的playbook。在閱讀與執行這些示例之前,請您先了解How to build your inventory(這個還沒有開始翻譯,等後面翻譯了我會補上的)。
為什麼要使用ad hoc指令?
ad hoc指令通常适用于您很少重複的任務。例如,在聖誕節那天您想要關閉您實驗室内所有的電腦,您可以不用編寫playbook,隻執行一個單行的ansible指令。一個ad hoc指令通常像這樣:
$ ansible [pattern] -m [module] -a "[module options]"
後面您将學到更多的pattern和module。(其實原文這裡用了複數)
ad hoc指令的适用場景
ad hoc任務可以用來重新開機服務、複制檔案、管理包和使用者等。您可以在ad hoc任務中使用ansible模闆。ad hoc任務和playbook都可以使用特定的子產品執行直到到達某個特定狀态。在開始執行之前ansible會檢查目标是否已經達到了目标狀态,如果沒有才開始執行。
重新開機伺服器
您可以使用ansible的子產品,采用ad hoc的模式在10點的時候重新開機亞特蘭大所有的web servers。在ansible執行這個之前,您必須在您的清單檔案中把亞特蘭大所有的servers放在[atlanta]的組中,同時必須要配置好您在那個組中的ssh權限。使用下面的指令來重新開機[atlanta]中的所有伺服器:
預設情況下ansible可以同時執行5個程序。如果您有更多的主機,ansible也會與他們進行互動,但需要的時間會更長。如果要同時讓十台主機重新開機,可以執行如下指令:
$ ansible atlanta -a "/sbin/reboot" -f 10"
/usr/bin/ansible将會預設使用您的使用者名來執行指令,如果要使用其他使用者連接配接:
$ ansible atlanta -a "/sbin/reboot" -f 10 -u username
正常地重新開機需要一定的權限,您可以使用become關鍵字來使用username使用者來登陸但是以root身份來執行指令:
如果您添加了
--ask-become-pass
或
-K
,那麼ansible将會提示您輸入密碼來進行權限認證。
- 注意:command子產品并不支援額外的shell指令比如pip和重定向(即使環境變量依然起作用),如果您的指令要求shell文法,請您使用shell子產品。在這個頁面可以檢視他們兩個的更多不同。
到此為之我們所有的示例都采用了預設的command子產品,如果您想使用别的子產品,加上-m和子產品名稱。例如,使用ansible.builtin.shell子產品:
在使用ansible執行ad hoc指令時,請一定注意shell的引用規則,這樣shell會保留本地的變量并将其傳輸給ansible。例如,在上面的例子中使用雙引号将對其中的值進行求值。
管理檔案
一個ad hoc指令可以利用ansible和scp的功能來傳輸多個檔案到多台機器,下面的指令可以直接把一個檔案傳輸到所有的[atlanta]組的節點中:
如果您想要重複一個這種的任務,請在playbook中使用 ansible.builtin.template子產品。
ansible.builtin.file子產品允許我們改變檔案的權限與所有者。這些選項也可以直接傳輸給copy子產品:
$ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/a.txt mode=600"
$ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"
file子產品也可以用來建立目錄,就類似
mkdir -p
指令:
删除檔案和檔案夾一樣:
管理包
您可能也會使用ad hoc指令使用像yum的子產品來在受控節點上安裝、更新或者解除安裝包。如果想要在不執行安裝的情況下確定某個包已經安裝:
可以這樣來确認某個包的目前版本:
可以這樣確定某個包是最新的版本:
可以這樣確定某個包沒有被安裝:
ansible有在不同作業系統下管理包的子產品。如果沒有管理您的包的子產品,請您使用command子產品或為您的包管理工具建立一個子產品。
管理使用者群組
您可以這樣來確定一個服務在所有的webservers上已經開始運作了:
也可以這樣來在所有的webservers上重新開機某個服務:
確定一個服務已經停止:
收集facts
facts代表某個系統上的已發現的變量。您可以使用facts來實作有條件的任務,也可以擷取到一個您系統目前的資訊。如果您想要檢視所有的facts:
$ ansible all -m ansible.builtin.setup
您也可以隻顯示特定的facts,您可以檢視 ansible.builtin.setup子產品的文檔了解更多。
現在您已經了解了ansible執行的基礎知識,接下來您可以繼續學習可重複執行的自動化任務ansible playbook。