自動化運維工具ansible再探

                                                     自動化運維工具ansible再探
nginx

-------------------------------------------------------------------------------------------------------------------------------------
shell

ansible常見工具vim

    (1)ansible-pull:推送命令至遠程,效率無線提高,能夠管理上千臺主機,對運維要求較高,不過目前爲止此命令還未有實施,ansible的管理臺數仍是在三四百臺設備centos

    (2)ansible-playbook * .yml:運行劇本併發

    (3)ansible-valult:劇本加密解密指令,ansible-vault encrypt chen.yml,加密chen.yml,ansible-vault decrypt chen.yml,解密chen.yml,加密後的劇本沒法用ansible -playbook直接執行,必須先解密,另有指令app

    ansible-vault     encrypt * .yml 加密運維

                              decrypt           解密ide

                              edit                 編輯工具

              rekey              修改口令測試

                              create             建立新yml文件

    (4)ansible-console:交互式臨時執行命令工具a.jpg

    圖中5臺主機數量,最多5個併發進程

    執行用戶@當前操做的主機組 (當前組的主機數量)[f:併發數]$

    設置併發數: forks n 例如: forks 10

    切換組: cd 主機組 例如: cd centos6,切換到centos6,b.jpg

    列出當前組主機列表: list

    列出全部的內置命令: ?或help

playbook

基本說明

    (1)playbook是由一個或多個劇本組成的列表

    (2)playbook的主要功能在於將hosts清單中的主機分配任務tasks,tasks就是各類ansible模塊的調用,將分配的任務組織在一個playbook中,隨後各任務循序漸進的運行

    (3)playbook採用YAML語言編寫

YAML語言

    (1)YAML是一個可讀性高的、用來表達資料序列的格式

    (2)特性

        YAML可讀性好

        YAML和腳本語言的交互性好

        YAML使用實現語言的數據模型

        YAML有一個一致的信息模型

        YAML易於實現

        YAML能夠基於流來處理

        YAML表達能力強,擴展性好

YAML格式

    (1)單一檔案中用三個連字號---區分多個檔案,還有選擇性的連續三個點表示檔案結尾

    (2)次行開始正常寫playbook的內容,通常建議寫明該playbook的功能

    (3)使用#註釋代碼

    (4)縮進必須統一,不能空格和tab混用,一樣的縮進表明一樣的級別

    (5)文件內容大小寫敏感

    (6)key/value的值能夠同行寫也能夠換行寫,同行使用:分隔

    (7)k/v的v能夠是個字符串,也能夠是個列表

    (8)一個完整的代碼塊功能需最少元素包括name、task

    (9)一個name只能包括一個task

    (10)YAML文件擴展名一般爲yml或者yaml

List:列表,全部元素-開頭

 c.jpg

Dictionary:字典,由多個key與value構成,兩種寫法d.jpg

playbook核心元素

    hosts:執行的遠程主機列表

    tasks:任務集

    varniables:內置變量或者自定義變量

    templates:模板,可替換模板文件中的變量並實現一些簡單邏輯的文件

    handlers:和notity結合使用,由特定條件觸發的操做,知足條件執行,不然不執行,在某個task的最後一行添加notity,整個task任務集結束,編寫handler

    tags:標籤執行某條任務執行,用於選擇運行playbook中的部分代碼,好比說ansible-playbook -t TAGNAME FILE.yml

hosts:能夠是以下形式

    one.example.com

    one.example.com:two.example.com

    192.168.1.50

    192.168.1.*

    GROUP1:GROUP2 兩個組的並集

    GROUP1:&GROUP2 兩個組的交集

    GROUP1:!GROUP2 在GROUP1組,但不在GROUP2組,好比說:

        - hosts: GROUP1:GROUP2 -->務必注意空格,行首-與元素有空格,鍵:和值之間有空格2.jpg

        remoute_user:可用於host和task中,也能夠經過指定其經過sudo的方式在遠程主機上執行任務,其可用於play全局或某任務;此外,甚至能夠在sudo時使用sudo_user指定sudo時切換的用戶e.jpg

    handler、notify:條件觸發執行,舉例說明 f.jpg

    tags:標籤,舉例說明g.jpg

變量:

    變量名:僅能由字母、數字和下劃線組成,且只能以字母開頭

    變量來源

    (1)ansible CLASS -m setup,輸入指令後能夠看到不少代碼,現只抓取一小部分作個說明h.jpg

    (2)/etc/ansible/hosts中定義變量 i.jpg

    (3)經過命令行指定變量,ansible-playbook -e varname=value

    (4)在playbook中定義j.jpgk.jpg

    (5)在獨立的變量YAML文件中定義 l.jpgm.jpg

    (6)在role中定義,原理和(5)同樣,也是將變量存放在一個文件裏

模板templates

    文本文件,嵌套有腳本,只能ansible-playbook用,不能夠ansible直接使用

    jinja2語言

        字符串:使用單引號或雙引號

        數字:整數,浮點數

        列表:[item1, item2, ...]

        元組:(item1, item2, ...)

        字典:{key1:value1, key2:value2, ...}

        布爾型:true/false

    算術運算:+, -, *, /, //, %, **

    比較操做:==, !=, >, >=, <, <=

    邏輯運算:and, or, not

    流表達式:For If When

    功能:根據模塊文件動態生成相應的配置文件,意思就是某個服務配置文件有變更了,能夠放到模板裏,把模板這個文件向目標羣體發送

        templates文件必須存放於templates目錄下,且命名爲.j2結尾

        yml文件須要和temlpates目錄評級,結構爲

            |————temnginx.yml

            |————templates

                              |———nginx.conf.j2

爲說明template做用,附一個小型實驗

    (1)控制機和被控制機192.168.239.129都安裝了nginx,根據目錄創建mkdir -pv /app/templatetest/templates

    (2)cp /etc/nginx/nginx.conf /app/templatetest/templates/nginx.conf.j2

    (3)vim /app/templatetest/temnginx.yml,此時保證了yml文件和templates目錄同級n.jpg

    (4)修改nginx.conf.j2文件,保證和被控制機的配置文件有變化o.jpg

    (5)ansible 192.168.239.129 -C檢查下,沒問題就執行p.jpg

    (6)查看結果q.jpg

when條件判斷

    在task後添加when子句便可使用條件測試;when語句支持Jinja2表達式語法,舉例r.jpg

迭代:with_items

    相似於shell腳本中的for循環s.jpg

Playbook中template for ift.jpg

    roles:用於層次性、結構化地組織playbook,經過分別將變量、文件、任務、模板及處理器放置於單獨的目錄中,並能夠便捷地include它們的一種機制。

    每一個角色,以特定的層級目錄結構進行組織

roles目錄結構:

            playbook.yml

            roles/

            project/

            tasks/

            files/

            vars/

            templates/

            handlers/

            default/ 不經常使用

            meta/ 不經常使用

解釋說明

roles/project/ :項目名稱,有如下子目錄

        files/ :存放由copy或script模塊等調用的文件

        templates/:template模塊查找所須要模板文件的目錄

        tasks/:定義task,role的基本元素,至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含

        handlers/:至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含

        vars/:定義變量,至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含

        meta/:定義當前角色的特殊設定及其依賴關係,至少應該包含一個名爲main.yml的文件,其它文件需在此文件中經過include進行包含

        default/:設定默認變量時使用此目錄中的main.yml文件

roles具體實現將以一個實驗來進行解釋:點擊此處轉至roles實驗

相關文章
相關標籤/搜索