1. 程式人生 > 其它 >Python集中化管理平臺Ansible介紹與YAML簡介

Python集中化管理平臺Ansible介紹與YAML簡介

本文例項講述了Python集中化管理平臺Ansible介紹與YAML。分享給大家供大家參考,具體如下:

一 中文社群

http://ansible.cn/forum.php

二 點睛

Ansible(http://www.ansibleworks.com/)一種整合IT系統的配置管理、應用部署、執行特定任務的開源平臺,是AnsibleWorks公司名下的專案,該公司由Cobbler及Func的作者於2012年建立成立。Ansible基於Python語言實現,由Paramiko和PyYAML兩個關鍵模組構建。

Ansible具有如下特點:

  • 部署簡單,只需在主控端部署Ansible環境,被控端無需做任何操作;
  • 預設使用SSH(Secure SHell)協議對裝置進行管理;
  • 主從集中化管理;
  • 配置簡單、功能強大、擴充套件性強;
  • 支援API及自定義模組,可通過Python輕鬆擴充套件;
  • 通過Playbooks來定製強大的配置、狀態管理;
  • 對雲端計算平臺、大資料都有很好的支援;
  • 提供一個功能強大、操作性強的Web管理介面和REST API介面 ——AWX平臺。

Ansible的架構圖如下,使用者通過Ansible編排引擎操作公共/私有云或CMDB(配置管理資料庫)中的主機,其中Ansible編排引擎由 Inventory(主機與組規則)、API、Modules(模組)、Plugins(外掛) 組成。

Ansible與Saltstack最大的區別是Ansible無需在被控主機部署任何客戶端代理,預設直接通過SSH通道進行遠端命令執行或下發配置;相同點是都具備功能強大、靈活的系統管理、狀態配置,都使用YAML格式 來描述配置,兩者都提供豐富的模板及API,對雲端計算平臺、大資料都有很好的支援。

Ansible在GitHub上的地址為https://github.com/ansible/, 其中提供了不少配置例子供參考。

三 YAML語言

1 點睛

YAML是一種用來表達資料序列的程式語言,它的主要特點包括: 可讀性強、語法簡單明瞭、支援豐富的語言解析庫、通用性強等。 Ansible與Saltstack環境中配置檔案都以YAML格式存在,熟悉YAML結構及語法對我們理解兩環境的相關配置至關重要。

下面的示例定義了在 master的不同業務環境下檔案根路徑的描述:

  1. file_roots
  2. base - /srv/salt/
  3. dev - /srv/salt/dev
  4. prod - /srv/salt/prod

2 塊序列描述

塊序列就是將描述的元素序列對映到Python的列表(List)中。以下程式碼演示了YAML與Python的對應關係:

  1. import yaml
  2. obj=yaml.load(
  3. """
  4. - Hesperiidae
  5. - Papilionidae
  6. - Apatelodidae
  7. - Epiplemidae
  8. """)
  9. print obj

本例中引用“-”來分隔列表中的每個元素,執行結果如下:

E:\Python\python_auto_maintain\venv\Scripts\python.exe E:/Python/python_auto_maintain/9_1_1.py
['Hesperiidae', 'Papilionidae', 'Apatelodidae', 'Epiplemidae']

YAML也存在類似於Python塊的概念,例如:

  1. - Hesperiidae
  2. - Papilionidae
  3. - Apatelodidae
  4. - Epiplemidae
  5. - China
  6. - USA
  7. - Japan

3 塊對映描述

塊對映就是將描述的元素序列對映到Python的字典(Dictionary)中, 格式為“鍵(key):值(value)”,以下為YAML例子:

  1. import yaml
  2. obj=yaml.load(
  3. """
  4. hero:
  5. hp: 34
  6. sp: 8
  7. level: 4
  8. orc:
  9. hp: 12
  10. sp: 0
  11. level: 2
  12. """)
  13. print obj

對應的Python結果為:

E:\Python\python_auto_maintain\venv\Scripts\python.exe E:/Python/python_auto_maintain/9_1_1.py
{'hero': {'hp': 34, 'sp': 8, 'level': 4}, 'orc': {'hp': 12, 'sp': 0, 'level': 2}}

4 巢狀

YAML塊序列與塊對映是可以自由組合在一起的,它們之間可以相互巢狀,通過非常靈活的組合,可以幫助我們描述更加複雜的物件屬性,例如:

  1. import yaml
  2. obj=yaml.load(
  3. """
  4. - hero:
  5. hp: 34
  6. sp: 8
  7. level: 4
  8. - orc:
  9. hp:
  10. - 12
  11. - 30
  12. sp: 0
  13. level: 2
  14. """)
  15. print obj

執行結果如下:

E:\Python\python_auto_maintain\venv\Scripts\python.exe E:/Python/python_auto_maintain/9_1_1.py
[{'hero': {'hp': 34, 'sp': 8, 'level': 4}}, {'orc': {'hp': [12, 30], 'sp': 0, 'level': 2}}]