Ansible自动化运维(五)----Ansible剧本
Ansible核心的功能,作用就是进行配置管理。
Ansible需要编写的 playbook 剧本需要遵循一定的规则,格式,这个格式就称之为yaml语法。学习一下yaml语法。
使用剧本批量安装nginx服务
# 1.批量卸载nginx服务
# 先查询被管理节点的机器,是否装了nginx
[root@Ansible-01 ~]# ansible shenfu -m shell -a "rpm -qa nginx"
123.57.235.127 | CHANGED | rc=0 >>
nginx-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
# 批量卸载nginx
[root@Ansible-01 ~]# ansible shenfu -m yum -a "name=nginx state=absent"
123.57.235.127 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Removed: nginx-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64",
"Removed: nginx-all-modules-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch",
"Removed: nginx-mod-http-image-filter-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64",
"Removed: nginx-mod-http-perl-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64",
"Removed: nginx-mod-http-xslt-filter-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64",
"Removed: nginx-mod-mail-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64",
"Removed: nginx-mod-stream-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64"
]
}
# 2.编写一个yaml配置文件,注意语法格式
[root@Ansible-01 ~]# cat -n /tmp/install_nginx.yaml
1 # install nginx yaml,by shenfu
2 - hosts: all
3 tasks:
4 - name: Install nginx service
5 yum: name=nginx state=present
6 - name: Copy Nignx.conf to every_server
7 copy: src=./nginx.conf
# 1.表示注释信息,可以用#号,也可以用三个短横线当做注释
# 2.表示定义playbook管理的目标机器,可以写all管理所有,也可以单独的填写ip,也可以填写主机名
# 3.定义playbook需要完成的任务的集合,比如你要定义2,第一个是安装nginx通过yum模块,第二个是通过copy模块,发送管理节点上的配置文件,发送给被管理的客户端机器
# 4.定义任务的名字,是一个自定义的帮助信息
# 5.定义任务的具体操作,指定用哪些模块,与参数
# 6~7行作用是和4~5行是一样了
playbook剧本的组成规范
剧本很重要的就是,定义演员的信息(其实就是定义主机的信息),演员的具体任务(以及主机要执行的模块,动作)。
Ansible的剧本也是由两个最基本的部分组成。
- hosts定义的被管理的主机列表信息(演员有哪些)
- tasks关键词定义的被管理主机需要执行的动作(演员要做什么事)
剧本之hosts部分
# 方式一,定义被管理主机的ip地址
- hosts: 192. 168.178.138
tasks:
- name: 这是我第一个任务
yum: name=nginx state=installed
# 方式二,定义被管理主机的名字,注意该主机名必须能够解析
- hosts: backup01
tasks:
- name:需要执行的动作
#方式三,定义多个主机信息
- hosts: 192.168.178.138,192.168.178.139,backup01
tasks:
- name: 执行的动作...
#方式四,填写所有的主机
- hosts: all
tasks:
定义被管理的主机,有一个重要的前提,就是被管理的主机必须在ansible管理的hosts文件中有对应的信息,否则识别不了/etc/ansible/hosts
剧本之tasks讲解
- 变量形式定义task任务,name="shenfu” age=18
- 还可以使用字典形式定义,特点是
key:value
,相关的词语,自卑,自豪,自律,自力更生
- name:“shenfu”
- age:18
- addr: “北京沙河”
# 定义task方式一:采用变量形式设置任务
tasks:
- name: make sure apache is runing
service: name=httpd state=running
- name: copy file. .
copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
owner=root group=root mode=0644
# 当传入的参数列表过长的时候,我们还可以将其分割
# 方式二,采用字典形式设置多个任务
tasks:
- name:copy file to client...
copy:
src: /etc/ansible/hosts
dest: /etc/ansible/hosts
owner: root
group: root
mode: 0644
yaml语法规范
在学习ansible的时候,编写palybook是最重要的环节,那么palybook是遵循yaml语法,因此需要掌握yaml语法的数据格式。
目前主流使用的数据格式,有json、xml、yaml,都属于数据序列化格式。
yaml更容易被解析,已读,因此更多的使用在了配置文件当中,ansible、saltstack、k8s都用yaml。
yaml基本语法
- 大小写敏感
- 使用缩进表示层级的关系(同样的空格数量)
- 在配置缩进关系的时候,禁止用tab键,请一个一个用空格键表示
- 相同元素的左侧空格数目不重要,只需要对其即可
yaml 语法支持的数据结构
- 对象,指的就是字典的概念,key: value,注意key: 后面有一个空格
- 数组,指的就是列表的概念
playbook编写的规范
剧本的缩进关系,一般是两个空格作为一个缩进,且空格数目无所谓,左侧对齐即可。
- hosts: shenfu
tasks:
- name: 安装nginx
yum: name=nginx state= installed
- name: 执行脚本
script:/server/scripts/test_ansible.sh
playbook实际编写与执行
剧本编写完成之后,还得执行才能工作。
在ansible程序中,加载模块的功能可以直接使用ansible adhoc命令行形执行加载剧本中的功能,可以使用ansible- playbook命令去执行脚本。
# 基本执行语法
ansible-playbook nginx.yaml # 可以使用绝对相对路径
# 查看剧本命令的帮相信息
ansible-playbook -h
# 查看剧本的执行详细输出
ansible-playbook nginx.yaml --verbose
# 查看剧本影响的主机列表信息
ansible-playbook nginx.yaml --list-hosts
# 执行剧本加载指定的主机清单文件,默认剧本使用的是/etc/ansible/hosts
ansible-playbook nginx.yaml -i /etc/my_ansible/hosts
# 执行剧本并且检查语法
ansible-playbook nginx.yaml --syntax-check
# 调试剧本,只是调试,但是不会对被管理节点发生改变
ansible-playbook nginx.yaml -C # 模拟执行,不影响客户端机器
playbook之部署rsync服务
进行思考,剧本如何设计,和安排
先考虑好部署rsync的整个过程
部署的思路过程如下,然后转化成playbook剧本的过程就可以
- 安装rysnc服务,使用yum
- 编写rsync配置文件,(常用的操作是,在Ansible-01管理机器上编写好配置文件,分发给客户端机器即可) copy模块
- 创建rsync用户,使用ansible的user模块
- 创建用于rsync验证的文件,还是选择在Ansible-01上写好后分发,copy模块,注意文件权限设置
- 创建数据备份的文件夹,rsync指定 了bakcup模块,备份目录是
/data_ backup/,调用file模块创建文件夹- 启动rsync服务端,且是守护进程模式,shell模块,systemd模块
上述部署思路转化为ansible playbook的写法
[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
运行剧本的方法
ansible-playbook install_rsync.yaml -C
ansible-playbook install_rsync.yaml
----根据于超老师视频讲解进行笔记,做了相对更改,如有侵权请联系作者删除。