本節內容:nginx
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
更多的內容及規範參見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
1. listspa
列表中的全部元素都使用「-」打頭,例如:A list of tasty fruits命令行
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}
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中指定的遠程主機時,還能夠經過參數指定其交互方式,這些參數以下所示: