ansible-playbook使用详解
一、YAML简介
二、Ansible组件
三、主机清单Invetory
四、PlayBook介绍
一、YAML简介
http://www.yaml.org
YAML:可以使用简单清单,散列表,标题等数据结构。
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(Structure)通过空格来展示,序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔。下面是一个示例。
yet another markup language //仍是一种标记语言
name: John kona //key为name,value为John,kona
age: 41
gender: Male
spouse: //kv可以嵌套,kev:value(key:value)
name: Jane Smith
age: 37
gender: Female //k/v可以嵌套
children:
- name: Jimmy Smith //-:列表,后面的都是列表元素
age: 17 //name和age,gender都是children的键key
gender: Male
- name: Jenny Smith
age 13
gender: Female
YAML文件扩展名通常为.yaml,如example.yaml。
1)list
列表的所有元素均使用“-”打头,例如:
# A list of tasty fruits
- Apple
- Orange
- Strawberry
- Mango
2)dictionary
字典通过key与value进行标识 //多个key-value联合起来就叫做字典
例如:
---
# An employee record
name: Example Developer
job: Developer
skill: Elite
也可以将key:value放置于{}中进行表示,例如:
---
# An employee record
{name: Example Developer, job: Developer, skill: Elite}
二、Ansible组件
Inventory
Modules
Ad Hoc Commands
Playbooks组件:
Tasks任务
Variables变量,ansible有自带的变量,也可以自定义
Templates模板,包含了模板语法的文本文件;
Handlers处理器,特定条件下才会被触发的任务
Roles角色
三、主机清单Invetory
1.主机与组:/etc/ansible/hosts
Inventory
ansible的默认的inventory file为/etc/ansible/hosts。
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。
inventory文件格式
inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明。
ntp.wolf.com
[webservers]
www1.wolf.com:2222
www2.wolf.com
[dbservers]
db1.wolf.com
db2.wolf.com
db3.wolf.com
如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机,例如:
[webservers]
www[01:50].example.com
[databases]
db-[a:f].example.com
2.主机变量
可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用。例如:
[webservers]
www1.wolf.com http_port=80 maxRequestsPerChild=808
www2.wolf.com http_port=8080 maxRequestsPerChild=909
3.组变量
组变量是指赋予给指定组内所有主机上的在playbook中可用的变量。例如:
[webservers]
www1.wolf.com
www2.wolf.com
[webservers:vars]
ntp_server=ntp.wolf.com
nfs_server=nfs.wolf.com
4.组嵌套
inventory中,组还可以包含其它的组,并且也可以向组中的主机指定变量。不过,这些变量只能在ansible-playbook中使用,而ansible不支持。例如:
[apache]
httpd1.test.com
httpd2.test.com
[nginx]
ngx1.test.com
ngx2.test.com
[webservers]
apache
nginx
四、PlayBook介绍
核心元素:
Tasks:任务,由模块定义的操作的列表;
Variables:变量
Templates:模板,即使用了模板语法的文本文件;
Handlers:由特定条件触发的Tasks;
Roles:角色;
playbook的基础组件:
Hosts:运行指定任务的目标主机;
remote_user:在远程主机以哪个用户身份执行;
sudo_user:非管理员需要拥有sudo权限;
tasks:任务列表
模块,模块参数:
格式:
(1) action: module arguments
(2) module: arguments
核心元素:
Tasks:任务,由模块定义的操作的列表;
Variables:变量
Templates:模板,即使用了模板语法的文本文件;
Handlers:由特定条件触发的Tasks;
Roles:角色;
playbook的基础组件:
Hosts:运行指定任务的目标主机;
remote_user:在远程主机以哪个用户身份执行;
sudo_user:非管理员需要拥有sudo权限;
tasks:任务列表
模块,模块参数:
格式:
(1) action: module arguments
(2) module: arguments
示例:
运行playbook,使用ansible-playbook命令
(1) 检测语法
ansible-playbook –syntax-check a.yaml
(2) 测试运行
ansible-playbook -C a.yaml
–list-hosts
–list-tasks
–list-tags
(3) 运行
ansible-playbook a.yaml
-t TAGS, –tags=TAGS
–skip-tags=SKIP_TAGS
–start-at-task=START_AT
到这里第一个playbook已经运行完毕!!!!