实验环境: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.文件编写时会有颜色提示

ansible 服务更新脚本 ansible脚本编写_linux

第二步:执行剧本

1.检查剧本的语法格式

ansible 服务更新脚本 ansible脚本编写_ansible 服务更新脚本_02


出现上面图片这样,代表没有语法错误2.模拟执行脚本

ansible 服务更新脚本 ansible脚本编写_缩进_03


可以看到模拟执行没有问题3.真正执行剧本

ansible 服务更新脚本 ansible脚本编写_主机名_04


因为我之前执行过了,所以这里显示全部为绿色,如果没有执行过,执行成功会显示黄色.

到此,一个简单的剧本就编写完成了.

剧本编写常见错误:
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 服务更新脚本 ansible脚本编写_linux_05

常见主机信息:

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.编写剧本文件

ansible 服务更新脚本 ansible脚本编写_缩进_06


ansible 服务更新脚本 ansible脚本编写_ansible 服务更新脚本_07


4.剧本测试

到此,剧本功能介绍完成