Ansible核心功能点就在于playbook,Ansible主要的工作都是在与配置管理,它在实际的工作中会大量编写和使用剧本。
【Ansible剧本】
ansible软件的playbook编写需要遵循YAML语法。
playbook安装nginx
【1.批量卸载所有的nginx】
[root@m01 ~]# ansible chaoge -m yum -a "name=nginx state=absent" [root@m01 ~]# ansible chaoge -m shell -a "rpm -qa nginx warn=false" 192.168.178.110 | CHANGED | rc=0 >> 192.168.178.111 | CHANGED | rc=0 >>
【2.查看一个YAML文件】
[root@m01 scripts]# cat nginx.yaml -n
1 # install nginx yaml ,by chaoge
2 - hosts: all
3 tasks:
4 - name: Install nginx Package
5 yum: name=nginx state=present
6 - name: Copy Nginx.conf
7 copy: src=./nginx.conf dest=/etc/nginx/nginx.conf mode=0644
【3.解释如上的playbook代码】
1.表示注释信息,可以用#,也可以用 --- 三个短横线 2.定义playbook管理的目标主机,all表示所有的主机,也可以写 主机组名 3.定义playbok所有的任务集合信息,比如该文件,定义了2个任务 ,安装nginx,拷贝nginx配置文件 4.定义了任务的名词,自定义的帮助信息 5.定义任务的具体操作,比如这里用yum模块实现nginx的安装 6. 7.第六、第七两行作用是使用copy模块,把本地当前的nginx.conf配置文件,分发给其他所有客户端机器,且授权
Playbook内容组成规范

剧本&hosts部分
定义剧本的hosts部分,可以有如下多种方式,常见的有
# 方式一:定义所管理的主机IP地址
- hosts: 192.168.178.111
tasks:
动作...
# 方式二:定义所管理主机的名字
- hosts: backup01
tasks:
动作...
# 方式三:定义管理主机
- hosts: 192.168.178.111, rsync01
tasks:
动作...
# 方式四:管理所有主机
- hosts: all
tasks:
动作...
剧本&tasks部分
变量形式定义task任务
字典形式定义任务
# 方式一:采用变量格式设置任务
tasks:
- name: make sure apache is running
service: name=https state=running
# 当传入的参数列表过长时,可以将其分割到多行
tasks:
- name: copy ansible inventory(清单) file to client
copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
owner=root group=root mode=0644
# 方式二:采用字典格式设置多任务
tasks:
- name: copy ansible inventory file to client
copy:
src: /etc/ansible/hosts
dest: /etc/ansible/hosts
owner: root
group: root
mode: 0644
YAML语法
在学习saltstack过程中,第一要点就是States编写技巧,简称SLS文件。这个文件遵循YAML语法。初学者看这玩意很容易懵逼,来,超哥拯救你学习YAML语法
json xml yaml 数据序列化格式
yaml容易被解析,应用于配置文件
salt的配置文件是yaml配置文件,不能用tab
saltstack,k8s,ansible都用的yaml格式配置文件
语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止tab键,只能空格
缩进的空格数不重要,相同层级的元素左侧对其即可
# 表示注释行
yaml支持的数据结构
对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict 冒号表示 key: value key冒号后必须有
数组: 一组按次序排列的值,又称为序列sequence 列表list 短横线 - list1
纯量: 单个不可再分的值
对象:键值对
yaml
first_key:
second_key:second_value
python
{
'first_key':{
'second_key':'second_value',
}
}
playbook执行命令
【执行命令】
ansible-playboook nginx.yaml
【查看剧本执行详细输出】
ansible-playbook nginx.yml --verbose
【查看剧本执行影响的主机列表】
ansible-playbook nginx.yml --list-hosts
【执行playbook指定加载的主机清单文件】
ansible-playbook nginx.yml -i /etc/ansible/hosts
【执行playbook时检查剧本语法】
ansible-playbook nginx.yml --syntax-check
【调试playbook任务,模拟执行,不影响主机配置】
ansible-playbook nginx.yml -C
playbook的输出信息

Playbook实践与Rsync、
举例一键创建rsync服务的过程:
[root@m01 myyaml]# cat install_rsync.yaml
- hosts: 192.168.178.115
tasks:
- name: step01,install rsync service
yum: name=rsync state=installed
- name: step02,edit rsync conf file
copy: src=/etc/ansible/rsync_conf/rsyncd.conf dest=/etc/rsync/conf/
- name: step03,create user rsync
user: name=rsync state=present createhome=no shell=/sbin/nolgoin
- name: step04,create user auth file
copy: src=/etc/ansible/rsync_conf/rsync.password dest=/etc/rsync/conf/ mode=0600
- name: step05,create backup dir
file: dest=/data_backup/ state=directory owner=rsync group=rsync
- name: step06,run rsync server
shell: rsync --daemon creates=/var/run/rsync.pid
playbook 扩展
http://book.luffycity.com/linux-book/%E9%AB%98%E6%80%A7%E8%83%BDWeb%E9%9B%86%E7%BE%A4%E5%AE%9E%E6%88%98/Ansible%E5%89%A7%E6%9C%AC.html#playbook%E6%89%A9%E5%B1%95%E9%85%8D%E7%BD%AE