Ansible最佳實踐

2021-09-25 16:07:18 字數 4266 閱讀 7672

目錄結構

production                # inventory file for production servers 關於生產環境伺服器的清單檔案

stage # inventory file for stage environment 關於 stage 環境的清單檔案

group_vars/

group1 # here we assign variables to particular groups 這裡我們給特定的組賦值

group2 # ""

host_vars/

hostname1 # if systems need specific variables, put them here 如果系統需要特定的變數,把它們放置在這裡.

hostname2 # ""

library/ # if any custom modules, put them here (optional) 如果有自定義的模組,放在這裡(可選)

filter_plugins/ # if any custom filter plugins, put them here (optional) 如果有自定義的過濾外掛程式,放在這裡(可選)

site.yml # master playbook 主 playbook

webservers.yml # playbook for webserver tier web 伺服器的 playbook

dbservers.yml # playbook for dbserver tier 資料庫伺服器的 playbook

roles/

common/ # this hierarchy represents a "role" 這裡的結構代表了乙個 "role"

tasks/ #

main.yml # <-- tasks file can include smaller files if warranted

handlers/ #

main.yml # <-- handlers file

templates/ # <-- files for use with the template resource

ntp.conf.j2 # <------- templates end in .j2

files/ #

bar.txt # <-- files for use with the copy resource

foo.sh # <-- script files for use with the script resource

vars/ #

main.yml # <-- variables associated with this role

defaults/ #

main.yml # <-- default lower priority variables for this role

meta/ #

main.yml # <-- role dependencies

webtier/ # same kind of structure as "common" was above, done for the webtier role

monitoring/ # ""

動態清單使用

如果你正在使用雲服務, 使用 動態清單 會是個好主意.

如何區分測試和生產環境

如果你管理著靜態清單,如何區分不同的環境型別是個常見的問題.

# file: production

[atlanta-webservers]

www-atl-1.example.com

www-atl-2.example.com

[boston-webservers]

www-bos-1.example.com

www-bos-2.example.com

[atlanta-dbservers]

db-atl-1.example.com

db-atl-2.example.com

[boston-dbservers]

db-bos-1.example.com

# webservers in all geos

[webservers:children]

atlanta-webservers

boston-webservers

# dbservers in all geos

[dbservers:children]

atlanta-dbservers

boston-dbservers

# everything in the atlanta geo

[atlanta:children]

atlanta-webservers

atlanta-dbservers

# everything in the boston geo

[boston:children]

boston-webservers

boston-dbservers

頂級playbook

在 site.yml 中,我們包含了乙個定義了整個基礎設施的 playbook.注意這個 playbook 是非常短的, 因為它僅僅包含了其他 playbooks.記住, playbook 不過就是一系列的 plays:

---

# file: site.yml

- include: webservers.yml

- include: dbservers.yml

---# file: webservers.yml

- hosts: webservers

roles:

- common

- webtier

理念是我們能夠通過 「執行」(running) site.yml 來選擇整個基礎設施的配置.或者我們能夠通過執行其子集 webservers.yml 來配置. 這與 ansible 的 「–limit」 類似:

ansible-playbook site.yml --limit webservers  # --limit 篩選對應主機  --limit @file.txt  也可以將ip放到檔案,@+檔案實現

ansible-playbook webservers.yml

上述組織架構應用場景

那這種結構適用於何種應用場景? 很多!若我想重新配置整個基礎設施,如此即可:

ansible-playbook -i production site.yml
那只重新配置所有的 ntp 呢?太容易了.:

ansible-playbook -i production site.yml --tags ntp
只重新配置我的 web 伺服器呢?:

ansible-playbook -i production webservers.yml
只重新配置我在波士頓的 web伺服器呢?:

ansible-playbook -i production webservers.yml --limit boston
前10臺 和 接下來的10臺呢?

ansible-playbook -i production webservers.yml –limit boston[0-10] 

ansible-playbook -i production webservers.yml –limit boston[10-20]

區分不同環境的清單檔案

使用不同的清單檔案來分離你的 stage 和 生產環境是個好方法.你可以通過 -i 來指定.把它們放在同乙個檔案中會有驚喜哦!

最佳實踐 Flutter 最佳實踐

最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高 質量 可讀性 可維護性和健壯性都非常重要。讓我們探索一些設計和開發flutter應用程式的最佳實踐。class enum typedef和extension應採用駝峰命名uppercamelcase規則。class mainscree...

Ansible實踐篇(一) Ansible免密登入

主要是ansible服務端需要將 root ssh id rsa.pub分發到其他伺服器 有兩個命令比較重要 ssh keygen 這個命令是用來生成本機的公鑰和私鑰的 ssh keyscan 這條命令是用來把遠端伺服器的公鑰來獲取到本地的 1 首先關閉公鑰認證 如果說不想關閉公鑰認證的話,可以用s...

JUnit最佳實踐

junit最佳實踐 cherami 轉貼 參與分 20053,專家分 4960 發表 2003 9 16 下午7 57 版本 1.0 閱讀 3899次 martin fowler說過 當你試圖列印輸出一些資訊或除錯乙個表示式時,寫一些測試 來替代那些傳統的方法。一開始,你會發現你總是要建立一些新的f...