playbook是ansible用于配置,部署,和被管理被控节点的剧本
playbook常用的YMAL格式:(文件名称以 .yml结尾)
1、文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。
2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
3、YMAL中的列表元素以"-"开头然后紧跟着一个空格,后面为元素内容。
4、同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
5、play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":"分隔表示,":"后面还要增加一个空格。
playbook由三个部分组成:
host部分:使用host指示使用哪个主机或主机组来运行下面的tasks
remote_user:指定远程主机中的哪个用户来登录远端系统,在远端系统执行tasks的用户
tasks:指定远端主机将要执行的一系列动作,tasks的核心为ansible的模块
playbook的核心元素:
hosts:主机组;
tasks:任务列表
variables:变量,设置方式有四种
Templates:包含了模板语法的文本文件
Handlers:由特点条件触发的任务
[root@server ansible]# vim nginx.yml
---
- hosts: web
remote_user: root
tasks:
- name: install nginx
yum: name=nginx state=present
- name: copy nginx.conf
copy: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf backup=yes
notify: reload #当nginx.conf发生改变时,通知给相应的handlers
tags: reloadnginx #打标签
- name: start nginx service
service: name=nginx state=started
tags: startnginx #打标签
handlers: #注意,前面没有-,是两个空格
- name: reload
service: name=nginx state=restarted #为了在进程中能看出来
运行前的三部曲
检查错误:ansible-playbook nginx.yml --syntax-check
列出所有任务:ansible-playbook nginx.yml --list-task
列出在那些机器执行:ansible-playbook nginx.yml --list-hosts
运行:ansible-playbook nginx.yml
variables部分(vars为调用定义变量)
1.facts:可直接调用
setup模块就是通过facts组件来实现的,用setup模块获取,直接放入剧本中调用即可
2.用户自定义变量
vars :
var1: cc1
var2: cc2
1.如果未在剧本中定义变量可以使用 ansible-playbook nginx.yml -e rpmname=keepalived
2.修改剧本定义
模板 templates
模板支持:
字符串:使用单引号或双引号;
数字:整数,浮点数;
列表:[item1, item2, ...]
元组:(item1, item2, ...)
字典:{key1:value1, key2:value2, ...}
布尔型:true/false
算术运算:
+, -, *, /, //, %, **
比较操作:
==, !=, >, >=, <, <=
逻辑运算:
and, or, not
修改剧本: 修改剧本来定义变量
此处的rpmname代表的调用的文件名称为rpmname,下面的nginxport为此文件中的变量模块。copy模块也需要修改为template模块。
字典
- name: install some packages
yum: name={{ item }} state=present
with_items:
nginx
memcached
php-fpm
传入多个参数
- name: add some groups
group: name={{ item }} state=present
with_items:
group11
group12
group13
name: add some users
user: name={{ item.name }} group={{ item.group }} state=present
with_items:
{ name: 'user11', group: 'group11' }
{ name: 'user12', group: 'group12' }
{ name: 'user13', group: 'group13' }
相当于一个一个传参给定义的相应接收的位置