playbook
ansible七武器
1. ansible命令,用于執行臨時性的作業,必須掌握
2. ansible-doc是ansible模塊的檔案說明,針對每個模塊都有詳細的說明及應用案例介紹,功能和linux系統man命令類似,必須掌握
3. ansible-console是ansible為用戶提供的互動式工具,
4. ansible-galaxy是從github上下載的管理roles的一款工具,與python的pip類似
5. ansible-playbook是日常使用頻率比較高的命令,其作業機制是:通過讀取預先撰寫好的playbook檔案實作批量管理,可以理解為按一定條件組成的ansible任務集
6. ansible-vault用與組態檔加密,如撰寫的playbook中包含敏感資訊,不希望別人隨意查看,ansible-vault可以加密/解密這個組態檔
7. ansible-pull:ansible有兩種作業模式pull和push,默認使用push模式,pull和push剛好相反 JSON
-JSON是JavaScript物件表示法,它是一種基于文本獨立語言的輕量級資料交換格式(即只有字符的,區別于其他語言的書寫格式)
-JSON中的分隔符限于單引號,小中大括號,冒號和逗號. 特性:
語法規則:
-資料在名稱/值對中
-資料由逗號分隔
-大括號保存物件
-中括號保存陣列
資料的書寫格式: 名稱/值對 (建值對) {k:”v”}
JSON語法規則之陣列: {“k”:
[“v”,”v”,”v”]
}
復合復雜型別
{“詩人”:
[{“李白”:”詩仙”,”年代”:”唐”},
{“杜甫”:”詩圣”,”年代”:”唐”},
{“白居易”:”詩魔”,”年代”:”唐”},
{“李賀”:”詩鬼”,”年代”:”唐”}
]
} YAML
-
語法規則:
-YAML的結構通過空格來展示
-陣列使用”- ”來表示
-鍵值對使用”: ”來表示
-YAML使用一個固定的縮進風格表示資料層級結構關系
-一般每個縮進級別由兩個以上空格組成
- # 表示注釋
注意:-不支持Tab縮進,僅支持空格縮進
-同一級縮進必須對齊
YAMl陣串列示方法:?
-使用一個短橫杠加一個空格 Jinja2模板
-基于Python的模板引擎,包含變數和運算式兩部分,兩者在模板求值是會被替換為值,模板中還有標簽,控制模板的邏輯
-因為playbook的模板使用Python的Jinja2模塊來處理 playbook語法基礎 格式:
-playbook由YAML語言撰寫,遵循YAML標準
-在同一行中,#之后的內容表示注釋
-同一串列中的元素應該保持相同的縮進
-playbook由一個或多個play組成
-play中hosts,variables,roles,tasks等物件的表示方法都是鍵值中間以”: ”分隔表示
-YAML檔案開始行都應該是---,結束行為... 可省略不寫 構成:
-hosts: 定義將要執行playbook的遠程主機組
-vars: 定義playbook運行時需要使用的變數
-tasks: 定義將要在遠程主機上執行的任務串列
-handlers: 定義task執行完成以后需要呼叫的任務
執行:
ansible-playbook ***.yml
-t 標記名 即呼叫標記
-f 執行緒數 最好是cpu的整數倍
運行playbook檔案,輸出內容為JSON格式,由不同顏色組成便于識別
-綠色即執行成功
-***代表系統狀態發生改變
-紅色代表執行失敗
---
- name: apache install
hosts: web
tasks: - name: install the latest version of Apache yum: name: httpd state: latest - lineinfile:???#類似sed的一種替換模塊 path: /etc/httpd/conf/httpd.conf regexp: '^Listen ' insertafter: '^#Listen ' line: 'Listen 8080' - copy: src: index.html dest: /var/www/html/index.html owner: apache group: apache mode: 0644 - service: name: httpd state: started enabled: yes - name: update httpd # 該次任務串列的標識,給使用者做分辨的
hosts: web????# playbook將要執行的主機組
tasks:?????# 任務串列 - name: update httpd.conf???#模塊的運行標識 tags: update_conf????#給指定任務定義呼叫標識 notify: reload httpd????#呼叫handler端的name定義的串 copy: src: httpd.conf dest: /etc/httpd/conf/httpd.conf owner: root group: root mode: 0644 - name: update index.html tags: update_index template: src: index.html dest: /var/www/html/index.html owner: apache group: apache
當關注的資源發生變化時采取的操作
-多個task觸發同一個notify的時候,僅觸發一個
-notify可以觸發多個條件,在生產環境中往往涉及到某一個組態檔的改變要重啟若干服務的場景
-還可以結合vars寫出普適的服務管理腳本 mode: 0644
handlers:?????? - name: reload httpd service: name: httpd state: restarted - name: test web load
hosts: web
tasks: - shell: uptime |awk '{printf("%.2f",$(NF-2))}' register: result??#定義register模塊保留前一個命令的回傳值,類似”$?”
呼叫register模塊定義的result
當when 后面的條件達成時執行當前同級的操作 - name: stopped httpd service: name: httpd state: stopped when: result.stdout|float > 0.7 - debug: var=result #將當前任務串列中的相應的欄位詳細輸出,利于排錯 - name: 添加用戶
hosts: db
tasks: - name: 添加用戶 "{{ item.username }}" user: name: "{{ item.username }}" group: "{{ item.group }}" password: "{{ item.password |password_hash('sha512') }}" with_items: - username: nb group: users password: "123457"
with_items是playbook標準回圈,可用于迭代一個串列或字典
通過{{item}}獲取每次迭代的值 - username: wk group: bin password: banana - username: dd group: daemon password: book - username: st group: mysql password: 123qqq...A - username: xx group: root password: a include and roles
在撰寫playbook的時候隨著專案越來越大,playbook越來越復雜。可以把一些play、task 或 handler放到其他檔案中,通過包含進來是一個不錯的選擇
roles像是加強版的include,它可以引入一個專案的檔案和目錄
一般所需的目錄層級有
vars:變數層
tasks:任務層
handlers:觸發條件
files:檔案
template:模板
default:默認,優先級最低 tasks: - include: tasks/setup.yml - include: tasks/users.yml user=plj
//users.yml 中可以通過{{ user }}來使用這些變數
handlers:
- include: handlers/handlers.yml debug檢測
]# ansible-playbook --syntax-check ***.yml?#檢測語法
]# ansible-playbook -C ***.yml ?#測驗運行
]# ansible-playbook ***.yml --list-tasks ??#顯示要執行的作業 傳參方式
首先:
yml檔案中 需要有可傳入的鍵值,才可以使用{“k”:”v”}鍵值對的方式傳參
一方法
]# ansible-playbook ***.yml -e ‘{“k”:”v”}’
二方法
]# ansible-playbook ***.yml -e @***.yaml
]# vim ***.yaml
---
k:v
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/120431.html
標籤:其他技術專區
上一篇:溫淑陽
下一篇:求助大神
