本节内容: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中指定的远程主机时,还能够经过参数指定其交互方式,这些参数以下所示: