天天看點

ansible

ansible

ansible
ansible
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檔案

ansible

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)基礎示例

正式使用時我們最好先預運作下看有沒有錯誤

沒有問題就可以正式運作指令腳本了

ansible

2)handlers:由特定條件觸發的tasks;

隻有其關注的條件滿足時,才會被觸發執行的任務;

調用及定義方式:

handlers示例:

ansible

3)tags:給指定的任務定義一個調用辨別;

tags示例:

ansible
ansible
ansible
ansible

4)variables示例(1)

ansible

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