Ansible的基礎元素和YAML介紹

本節內容:nginx

  • YAML
  • Ansible經常使用的數據類型
  • Ansible基礎元素

 

1、YAML

1. YAML介紹web

YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其餘多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發表了這種語言,另外Ingy döt Net與Oren Ben-Kiki也是這語言的共同設計者。shell

YAML Ain't Markup Language,即YAML不是XML。不過,在開發的這種語言時,YAML的意思實際上是:"Yet Another Markup Language"(還是一種標記語言)。其特性:apache

  • YAML的可讀性好
  • YAML和腳本語言的交互性好
  • YAML使用實現語言的數據類型
  • YAML有一個一致的信息模型
  • YAML易於實現
  • YAML能夠基於流來處理
  • YAML表達能力強,擴展性好

更多的內容及規範參見http://www.yaml.org。數據結構

 

2. YAML語法app

YAML的語法和其餘高階語言相似,而且能夠簡單表達清單、散列表、標量等數據結構。其結構(Structure)經過空格來展現,序列(Sequence)裏的項用"-"來表明,Map裏的鍵值對用":"分隔。下面是一個示例。YAML是用鍵值對和縮進來表示的。ssh

name: John Smith
age: 41
gender: Male
spouse:                         
       name: Jane Smith
       age: 37
       gender: Female
children:                     
       - name: Jimmy Smith
         age: 17
         gender: Male
       - name: Jenny Smith
         age 13
         gender: Female

YAML文件擴展名一般爲.yaml,如example.yaml。ui

 

2、Ansible經常使用的數據類型

1. listspa

列表中的全部元素都使用「-」打頭,例如:A list of tasty fruits命令行

  • Apple
  • Orange
  • Strawberry
  • Mango

 

2. dictionary

字典經過key與value進行標識,例如:
---
An employee record:

name: Example Developer
job: Developer
skill: Elite

也能夠將key:value放置於{}中進行表示,例如:

---
An employ record:

{name: Example Developer, job: Developer, skill: Elite}

 

3、Ansible基礎元素

1. 變量

(1)變量命名

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

 

(2)facts

facts是由正在通訊的遠程目標主機發回的信息,這些信息被保存在ansible變量中。要獲取指定的遠程主機所支持的全部facts,可以使用以下命令進行:

# ansible hostname -m setup

 

(3)register

把任務的輸出定義爲變量,而後用於其餘任務,示例以下:

tasks:
   - shell: /usr/bin/foo
     register: foo_result
     ignore_errors: True

 

(4)經過命令行傳遞變量

在運行playbook的時候也能夠傳遞一些變量供playbook使用,示例以下:

ansible-playbook test.yml --extra-vars "hosts=www user=magedu"

就是說hosts和user這兩個變量能夠在test.yml文件中直接調用

 

(5)經過roles傳遞變量

當給一個主機應用角色的時候能夠傳遞變量,而後在角色內使用這些變量,示例以下:

- hosts: webservers
  roles: 
        - common
        - { role: foo_app_instance, dir: '/web/htdocs/a.com', port: 8080 }

注意:role、dir、port是變量名,冒號後面的是變量值。

 

2. Inventory

ansible的主要功能在於批量主機操做,爲了便捷地使用其中的部分主機,能夠在inventory file中將其分組命名。默認的inventory file爲/etc/ansible/hosts。
inventory file能夠有多個,且也能夠經過Dynamic Inventory來動態生成。

(1)inventory文件格式

inventory文件遵循INI文件風格,中括號中的字符爲組名。能夠將同一個主機同時歸併到多個不一樣的組中;此外,當如若目標主機使用了非默認的SSH端口,還能夠在主機名稱以後使用冒號加端口號標明。

[webservers]
www1.wisedu.com:8888
www2.wisedu.com

若是主機名稱遵循類似的命名模式,還可使用列表的方式標識各主機,例如:

[webservers]
www[01:50].example.com

[databases]
db-[a:f].example.com

 

 (2)主機變量

能夠在inventory中定義主機時爲其添加主機變量以便於在playbook中使用,例如:

[webservers]
www1.wisedu.com http_port=80 maxRequestsPerChild=808
www2.wisedu.com http_port=8080 maxRequestsPerChild=909

 

(3)組變量

組變量是指賦予給指定組內全部主機上的在playbook中可用的變量。例如:

[webservers]
www1.wisedu.com
www2.wisedu.com

[webservers:vars]   # 表示向webservers這組主機定義變量以下,回頭這兩臺主機上均可以調用變量ntp_server和nfs_server
ntp_server=ntp.wisedu.com
nfs_server=ntp.wisedu.com

 

(4)組嵌套

inventory中,組還能夠包含其它的組,而且也能夠向組中的主機指定變量。不過,這些變量只能在ansible-playbook中使用,而ansible不支持。例如:

[apache]
httpd1.wisedu.com
httpd2.wisedu.com

[nginx]
ngx1.wisedu.com
ngx2.wisedu.com

[webservers:children]     # 注意:children是固定格式
apache
nginx

[webservers:vars]
ntp_server=ntp.wisedu.com

 

(5)inventory參數

ansible基於ssh鏈接inventory中指定的遠程主機時,還能夠經過參數指定其交互方式,這些參數以下所示:

相關文章
相關標籤/搜索