Ansible自动化运维——ansible核心组件playbook
Ansible核心功能点就在于playbook,Ansible主要的工作都是在于配置管理,它在实际的工作中会大量编写和使用剧本。如果说ansible 模块 是你车间里的工具,那么playbooks 是你的说明书/使用手册,并且资源清单上的主机是你的原材料。在ansible 上使用Playbooks是一种完全不同于adhoc的任务执行模式,并且特别强大。简单地说,playbooks是一个非常简单的配
Ansible核心功能点就在于playbook,Ansible主要的工作都是在于配置管理,它在实际的工作中会大量编写和使用剧本。
如果说ansible 模块 是你车间里的工具,那么playbooks 是你的说明书/使用手册,并且资源清单上的主机是你的原材料。
在ansible 上使用Playbooks是一种完全不同于adhoc的任务执行模式,并且特别强大。
简单地说,playbooks是一个非常简单的配置管理和多机器部署系统的基础,以及非常适合部署复杂应用程序的系统。
Playbooks可以对任务进行编排,就像我们要安装一个程序,写个安装shell脚本一样,在哪一步复制配置文件,最后一步启动服务。
虽然/usr/bin/ansible 可以运行一些临时任务,但是针对复杂的配置,并且可以将配置标准化,这个时候就需要Playbooks了。
【Anisble剧本】
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定义剧本管理的主机信息
#方式一:定义所管理的主机IP地址
- hosts: 192.168.178.111
tasks:
动作…
#方式二:定义所管理主机的名字
- hosts: backup01
tasks:
动作…
#方式三:定义管理主机
- hosts: 192.168.178.111, rsync01
tasks:
动作…
#方式四:管理所有主机
- hosts: all
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语法。
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_valuepython
{
‘first_key’:{
‘second_key’:‘second_value’,
}
}
playbook执行命令
加载剧本中的功能,可以使用ansible-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 --syntax-check
调试playbook任务,模拟执行,不影响主机配置
ansible-playbook nginx.yml -C
playbook的输出信息
剧本执行过程中会产生响应的输出,根据输出的信息可以掌握剧本是否正确执行,根据输出的措施信息,可以掌握剧本中编写的逻辑错误。

当本地执行了任务,会得到返回值changed
如果不需要执行了,得到返回值ok
1.准备一个copy剧本
[root@m01 scripts]# cat copy_hosts.yml
- hosts: all
tasks:
- name: copy the /etc/hosts
copy: src=/etc/hosts dest=/etc/hosts
2.第一次执行结果
[root@m01 scripts]# ansible-playbook copy_hosts.yml
PLAY [all] ***************************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [192.168.178.111]
ok: [192.168.178.110]
TASK [copy the /etc/hosts] ***********************************************************
ok: [192.168.178.110]
changed: [192.168.178.111]
PLAY RECAP ***************************************************************************
192.168.178.110 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.178.111 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3.第二次执行
[root@m01 scripts]# ansible-playbook copy_hosts.yml
PLAY [all] ***************************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [192.168.178.111]
ok: [192.168.178.110]
TASK [copy the /etc/hosts] ***********************************************************
ok: [192.168.178.110]
ok: [192.168.178.111]
PLAY RECAP ***************************************************************************
192.168.178.110 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.178.111 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
由于第一次执行剧本文件,已经复制过,第二次执行,ansible会根据文件属性避免重复复制。
【剧本输出的字段信息】
playbook一键部署rsync
- 编写剧本
#定义剧本,功能是安装部署rsync的几个步骤
#看好,左侧对其的元素,就是属于同级的关系,例如 hosts和tasks
#tasks定义了多个任务,分别使用不同的模块去执行,多个任务都是平级关系
#要注意剧本使用的文件,源文件要提前准备好,由src参数定义的是源文件绝对路径
#playbook rsync
#rsync server
- hosts: 192.168.178.110
tasks:
- name: step01 install rsync
yum: name=rsync state=installed
- name: step02 edit rsync conf file
copy: src=/etc/ansible/conf/rsync_conf/rsyncd.conf dest=/etc/
- name: step03 create rsync user
user: name=rsync state=present createhome=no shell=/sbin/nologin
- name: step04 create auth file
copy: src=/etc/ansible/conf/rsync_conf/rsync.passwd dest=/etc/ mode=600
- name: step05 create backup dir
file: dest=/backup state=directory owner=rsync group=rsync
- name: step06 boot rsync server
shell: rsync --daemon creates=/var/run/rsyncd.pid
#rsync client nfs01
- hosts: 192.168.178.111
tasks:
- name: step01:create auth file
copy: src=/etc/ansible/conf/rsync_conf/rsync_client.password dest=/etc/rsync.password mode=600
- 执行剧本
#测试一下脚本是否正确
ansible-playbook -C /etc/ansible/ansible-playbook/build_rsync.yml
#通过测试,执行一键部署脚本
ansible-playbook /etc/ansible/ansible-playbook/build_rsync.yml
更多推荐



所有评论(0)