实验环境:centos7.6,2G内存,50G硬盘大小,虚拟机服务端ip:172.16.1.61 客户端ip:172.16.1.7,172.16.1.41,172.16.1.31
剧本的编写方法
作用:
1.可以同时对多个主机进行处理
2.可以一键化完成多个任务
编写规范:
1.合理的信息缩进,两个空格表示一个缩进关系
标题一:
标题二:
标题三:
PS:在ansible中一个不能用tab进行缩进
2.冒号的使用方法
hosts: 172.16.1.41
tasks:
yum: name=xx
ps:使用冒号时后面要加空格,才能写信息
以冒号结尾,冒号信息出现在注释说明中,后面不需要与空格
3.短横线应用-(列表功能)
- hosts: 172.16.1.31
tasks:
- name: install nfs
yum:
ps:使用短横线构成列表信息,短横线后面需要有空格
编写剧本
第一步:创建目录
mkdir /etc/ansible/ansible-playbook
第一步:编写脚本
vim rsync_server.ymal
ps:1.剧本的文件扩展名尽量写成yaml
2.文件编写时会有颜色提示
第二步:执行剧本
1.检查剧本的语法格式
出现上面图片这样,代表没有语法错误2.模拟执行脚本
可以看到模拟执行没有问题3.真正执行剧本
因为我之前执行过了,所以这里显示全部为绿色,如果没有执行过,执行成功会显示黄色.
到此,一个简单的剧本就编写完成了.
剧本编写常见错误:
1.剧本语法规范是否符合(空格 冒号 短横线)
2.剧本中模块使用是否正确
3. 剧本中一个name标识下面只能写一个模块(相同可以)任务信息
4. 剧本中尽量不要大量使用shell模块
剧本编写扩展
1.配置主机清单方式
1.分组配置主机信息
[web]
172.16.1.7
172.16.1.8
172.16.1.9
[nfs]
172.16.1.31
[backup]
172.16.1.41
2.主机名符号匹配配置
[web]
172.16.1.[7:9]
3.加上非标准远程端口
[web]
web01:1314 --主机名
172.16.1.7:1314 --主机ip
4.主机使用特殊变量
[web]
172.16.1.7 ansible_ssh_port=1314 ansible_ssh_user=root ansible_ssh_pass=123456
[web]
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=1314 ansible_ssh_user=root ansible_ssh_pass=123456
5.主机组名嵌入配置
[web:vars] --- 嵌入式变量信息
ansible_ssh_host=172.16.1.7
ansible_ssh_port=1314
ansible_ssh_user=root
ansible_ssh_pass=123456
2.在剧本中设置变量信息
作用:设置变量,可以提高编写效率
方法一:在剧本中写
vars:
Data_dir=/data
方法二:在命令行添加
ansible-playbook --extra-vars=/data
方法三: 在主机清单编写
[web:vars]
Data_dir=/data
如果三种方法都设置了,优先级为:
最优先: 命令行变量设置
次优先: 剧本中变量设置
最后: 主机清单变量设置
3.在剧本中设置注册信息
作用:可以查看信息,例如通过查看端口信息,来判断某个服务是否开启
查看rsync端口,判断rsync是否开启
- name: check server port
shell: netstat -lntup|grep 873
register: get_server_port --这里的注册信息有自己设置
- name: diplay port info
debug: msg={{ get_server_port.stdout_lines}}
4.设置判断信息
作用:当做两件相同的事情时,但是不同主机做的,如果没有添加判断功能,就会出现每台主机都做两遍同样的事情
在nfs01和web01主机里面都创建一个test文件
- name: 01-touch nfs.test.txt
file: dest=/tmp/nfs.test.txt state=touch
when: (ansible_hostname == "nfs01")
- name: 02-touch web.test.txt
file: dest=/tmp/web.test.txt state=touch
when: (ansible_hostname == "web01")
获取内置变量方法:
ansible 172.16.1.41 -m setup -a "filter=ansible_hostname"
常见主机信息:
ansible_all_ipv4_addresses: 仅显示ipv4的信息。
ansible_devices: 仅显示磁盘设备信息。
ansible_distribution: 显示是什么系统,例:centos,suse等。
ansible_distribution_major_version: 显示是系统主版本。
ansible_distribution_version: 仅显示系统版本。
ansible_machine: 显示系统类型,例:32位,还是64位。
ansible_eth0: 仅显示eth0的信息。
ansible_hostname: 仅显示主机名。
ansible_kernel: 仅显示内核版本。
ansible_lvm: 显示lvm相关信息。
ansible_memtotal_mb: 显示系统总内存。
ansible_memfree_mb: 显示可用系统内存。
ansible_memory_mb: 详细显示内存情况。
ansible_swaptotal_mb: 显示总的swap内存。
ansible_swapfree_mb: 显示swap内存的可用内存。
ansible_mounts: 显示系统磁盘挂载情况。
ansible_processor: 显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus: 显示cpu个数(只显示总的个数)。
获取子信息方法:
ansible_eth0[ipv4]
5.设置循坏信息
作用:当做相同的事情时,可以将同样的事情合并为一件
同时传输两个文件
copy: src=/etc/ansible/server_file/rsync_server/{{ item.src }}
dest={{ item.dest }} mode={{ item.mode }}
with_items:
- { src: 'rsyncd.conf', dest: '/etc', mode: '644' }
- { src: 'rsync.password', dest: '/etc', mode: '600' }
同时安装多个软件
yum: name={{ item }} state=present
with_items:
- nfs-utils
- rpcbind
或者
yum:
name: ['nfs-utils', 'rpcbind' ]
state: installed
ps:service模块不能使用此方式
6.在剧本中设置忽略错误
作用:默认playbook会检查命令和模块的返回状态,如遇到错误就中断playbook的执行,可以加入ignore_errors: yes忽略错误
直接在想要忽略错误的那一步下面加上就行
- name:
ignore_errors: yes
7.设置标签功能
作用:在某一步下面设置了标签,可以只运行该步,方便检查出错误
- name:
targs: t1(这里不能只设置为数字)
指定执行那个标签
ansible-playbook --tags=t1 test.yaml
ansible-playbook -t t1 test.yaml
跳过指定标签任务:
ansible-playbook --skip-tags=t1 test.yaml
8.设置触发功能
作用:当服务中的配置文件发生改变,需要重启服务,就要用到触发功能
修改rsync的配置文件,重启rsync以生效
- name: create backup file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc mode=644
notify: restart rsync server
handlers:
- name: restart rsync server
service: name=rsyncd state=restarted
9.将多个剧本进行整合
这样可以运行一个剧本就行
vim site.yaml
- import-playbook: rsync_server.yaml
- import-playbook: nfs_server.yaml
10.编写 nfs剧本文件
1.创建目录
mkdir /nfs-file/nfs-client
mkdir /nfs-file/nfs-server
2.编写主机清单
[nfs:children]
nfs_server
nfs_client
[nfs_server]
172.16.1.31
[nfs_client]
172.16.1.7
3.编写剧本文件
4.剧本测试
到此,剧本功能介绍完成