ansible
通過前面的介紹我們知道,ansible是基于ssh協定來進行資料傳輸,ssh連接配接一般有兩種方法,一種是使用密碼密鑰,一種是使用公私密碼免密碼登入,為了順利使用ansible,下面配置基于公私密碼免密碼登入
ansible基于ssh連接配接inventory中指定的遠端主機時,将以此處的參數指定的屬性進行;
1)ping:探測目标主機是否存活;
2)command:預設子產品,可省略。在遠端主機上進行操作指令
-a 'command'
3)shell:在遠端主機上調用shell解釋器運作指令,支援shell的各種功能,例如管道等 ;
-a 'command' 運作shell指令
注意:command和shell子產品的核心參數直接為指令本身;而其它子產品的參數通常為“key=value”格式;
4)copy:複制檔案到遠端主機
用法:(1) 複制檔案 -a "src= dest= "(2) 給定内容生成檔案 -a "content= dest= "
5)file:檔案管理
用法:(1) 建立目錄:-a "path= state=directory" (2) 建立連結檔案:-a "path= src= state=link" (3) 删除檔案:-a "path= state=absent“
6)cron:管理周期性計劃任務
用法:-a ' minute= hour= day= month= weekday= job= name= user= state={present|absent}'
7)hostname:設定主機名
用法:name=
8)yum:使用yum包管理器完成程式包管理
用法:(1) -a "name= state={present|latest}" 安裝程式包,(2) -a "name= state=absent" 删除程式包
9)service:控制服務
用法:-a 'name= state={started|stopped|restarted} enabled=(是否開機自動啟動) runlevel='
10)group:添加或删除組
用法:-a 'name= state={present|absent} gid= system=(系統組)'
11)user:管理組帳号
用法:-a 'name= state={present(建立)|absent(删除)} force=(是否強制操作删除家目錄) system= uid= shell= home='
12)script:運作腳本
用法:-a '/path/to/script'運作腳本
13)setup:擷取指定主機的facts變量;
playbooks是ansible更強大的配置管理元件,實作基于文本檔案編排執行的多個任務,且多次重複執行
yaml類似于半結構化資料,聲明式配置;可讀性較高的用來表達資料序列的格式,易于與腳本語言互動
1)任何資料結構都用縮進來辨別,可以嵌套
2)每一行是一個鍵值資料key:value,冒号隔開。若想在一行辨別需要用{ }和,分隔格式
3)清單用 – 辨別
1)核心元素
2)基礎元件:
3)playbook定義任務: playbook的存儲在*.yaml文本中,需要建立一個yaml檔案
4)ansible-playbook執行指令:
5)playbook---variables 變量
6)templates:模闆
文本檔案,内部嵌套有模闆語言腳本(使用模闆語言編寫)模闆檔案中可使用jinja2表達式,表達式要定義在{{}},也可以簡單地僅執行變量替換;
文法:
7)條件測試
在某task後面添加when子句即可實作條件測試功能;when語句支援jinja2文法;
有的時候在特定的主機需要跳過特定的步驟,例如在安裝包的時候,需要指定主機的作業系統類型,或者是當作業系統的硬碟滿了之後,需要清空檔案等,可以使用when語句來做判斷 。when關鍵字後面跟着的是python的表達式,在表達式中你能夠使用任何的變量或者fact,當表達式的結果傳回的是false,便會跳過本次的任務
示例:當系統版本是centos6和7時各使用不同的指令
8)循環:疊代,需要重複執行的任務;在task中調用内置的item變量;在某task後面使用with_items語句來定義元素清單;
元素:清單有兩種方式; 字元串和字典
循環疊代:基于字元串清單給出元素示例:
循環疊代:基于字典清單給元素示例:
9)roles:角色
當單個playbook檔案越來越大的時候,我們就需要重新來組織playbooks了。我們可以将一個大的playbook拆成若幹個小的 playbook檔案,然後通過include的方式,在主配置檔案中将這些零碎的小檔案包含進來,這叫做playbook的包含。我們也可以按照一定的 規則将執行的某一類型任務放在一個目錄裡,并在這個目錄中再次對這個playbook按照 tasks,handlers,files,templates,vars等類型劃分成若幹檔案,将對應檔案存放在對應的目錄中,這種組織方式就叫做 playbook的roles。
以特定的層級目錄結構進行組織的tasks、variables、handlers、templates、files等;
role_name/
files/:存儲由copy或script等子產品調用的檔案; tasks/:此目錄中至少應該有一個名為main.yml的檔案,用于定義各task;其它的檔案需要由main.yml進行“包含”調用; handlers/:此目錄中至少應該有一個名為main.yml的檔案,用于定義各handler;其它的檔案需要由main.yml進行“包含”調用; vars/:此目錄中至少應該有一個名為main.yml的檔案,用于定義各variable;其它的檔案需要由main.yml進行“包含”調用; templates/:存儲由template子產品調用的模闆文本; meta/:此目錄中至少應該有一個名為main.yml的檔案,定義目前角色的特殊設定及其依賴關系;其它的檔案需要由main.yml進行“包含”調用; default/:此目錄中至少應該有一個名為main.yml的檔案,用于設定預設變量;
在playbook中調用角色的方法: - hosts: hosts remote_user: username roles: - role1 - role2 - { role: role3, variable: value, ...} - { role: role4, when: condition }
1)基礎示例
正式使用時我們最好先預運作下看有沒有錯誤
沒有問題就可以正式運作指令腳本了
2)handlers:由特定條件觸發的tasks;
隻有其關注的條件滿足時,才會被觸發執行的任務;
調用及定義方式:
handlers示例:
3)tags:給指定的任務定義一個調用辨別;
tags示例:
4)variables示例(1)
4)variables示例(2):向不同的系統傳遞不同的變量
編輯劇本
編輯hosts檔案,将變量指派到hosts對應的主機後,實作不同主機安裝不同的程式包
4)variables示例(3):在hosts檔案中向一個主機組指派變量
5)templates:模闆;示例1
第一步:ansible主機編輯配置檔案作為要使用templates傳遞的檔案;以nginx的配置檔案中的cpu核心數為例
第二步:編輯playbook調用templates子產品
第三步:執行playbook指令
第四步:在對應的被管控主機上檢視配置檔案中的變量是否是響應的值
5)templates:模闆;示例2:定義一個名為nginx.yaml的模版劇本,完成安裝nginx程式包,複制配置檔案,啟動服務,定義tags通知處理器完成服務重載
第一步:在ansible主機的/etc/ansible/hosts檔案中定義一個nginx組
第二步:寫一個nginx專用的yaml檔案,注意:在安裝程式包的時候依賴與遠端主機的yum源,如果沒有yum源的話,可以使用shell子產品讓遠端主機先下載下傳一個程式包,然後再執行後續的安裝任務,在安裝任務時指明yum: name=絕對路徑來進行
第三步:提供一個.j2結尾的nginx配置檔案,裡邊寫上自己需要的配置
第四步:執行ansible-playbook指令,運作nginx.yaml
第五步:在遠端主機檢視是否生效
6)循環疊代:基于字元串清單給出元素示例:
7)循環疊代:基于字典清單給元素示例:
8)roles示例nginx
8)relos示例memcached
8)relos示例mysqk