- 1剧本扩展的6个功能
- 2优化之前写过的剧本
![](https://img.haomeiwen.com/i4517527/b580d044e5c9f2ab.jpg)
1.剧本判断功能说明
之所以能判断是因为在运行这个脚本的时候它在收集远程主机的信息
但同时也是坑 但如nfs服务停的时候运行剧本的时候会夯住,centos7.6可以自动停掉。centos6会夯一段时间然后报错。
TASK [Gathering Facts] *********************************************************
三台主机:
NFS服务客户端(nfs服务启动) NFS服务端
centos7 10.0.0.7 centos7 10.0.0.31
centos6 10.0.0.8
centos7 10.0.0.9
如何判断三台主机哪台是centos6,centos7?
- hosts: nfs_client
tasks:
- name: create file for 41 host
file: path=/tmp/172.16.1.41 state=directory
when: (ansible_hostname == "backup")
- name: create file for 7 host
file: path=/tmp/172.16.1.7 state=directory
when: (ansible_hostname == "web01")
#判断主机名是否为自己对应的主机名 最好先用ansible命令测试一下。
- hosts: 172.16.1.41
tasks:
- name: create file for 41 host
file: path=/tmp/centos state=directory
when: (ansible_distribution == "CentOS")
#判断系统是为是centos
补充:如何对主机信息进行判断-----对主机信息进行收集
setup --- 收集远程主机信息
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个数(只显示总的个数)。
问题: 获取主机信息,以及子信息?
方法一:
- hosts: rsync
tasks:
- name: touch file
file: path=/etc/oldboy01.txt state=touch
when: (ansible_eth1.ipv4.address == "172.16.1.41")
方法二:
- hosts: rsync
tasks:
- name: touch file
file: path=/etc/oldboy01.txt state=touch
when: (ansible_eth1["ipv4"]["address"] == "172.16.1.41")
2.剧本信息循环功能
循环创建多个用户
- hosts: 172.16.1.41
tasks:
- name: create user
user: name={{ item }}
with_items:
- oldgirl01
- oldgirl02
- oldgirl03
- oldgirl04
- oldgirl05
- name: check create user info
shell: lls -l home|grep oldgril
- debug: msg={{ user_info.stdout_lines }}
循环创建多个用户 多个用户uid数值是不同的
- hosts: 172.16.1.41
tasks:
- name: create user
user: name={{ item.name }} uid={{ item.uid }}
with_items:
- {name: "oldgirl06", uid: "3006"}
- {name: "oldgirl07", uid: "3007"}
- {name: "oldgirl08", uid: "3008"}
- {name: "oldgirl09", uid: "3009"}
- name: check create user info
shell: grep oldgirl0 /etc/passwd
- debug: msg={{ user_info.stdout_lines }}
3.剧本编写忽略错误 调试剧本
不会使用模块,使用shell模块的报错问题
cat test_忽略错误.yaml
- hosts: 172.16.1.41
tasks:
#- name: install rsync
# shell: yum install -y rsync
- name: create rsync user
shell: useradd rsync -M -s /sbin/nologin
ignore_errors: yes
- name: create backup dir
shell: mkdir /backup
ignore_errors: yes
- name: boot server
shell: systemctl start rsyncd
ignore_errors: yes
4.剧本标签设置功能
# cat test_标签功能.yaml
- hosts: 172.16.1.41
tasks:
- name: 01:安装软件
yum: name=rsync state=installed
ignore_errors: yes
- name: 02:创建用户
user: name=rsync create_home=no shell=/sbin/nologin
ignore_errors: yes
tags: create_user //设置的标签 得记住标签的名字。
- name: 03:创建目录
file: path=/backup state=directory
ansible-playbook -t create_user test_标签功能.yaml
执行剧本中标签任务
ansible-playbook --skip-tags create_user test_标签功能.yaml --- 跳过指定标签任务,执行其他任务
ansible-playbook -t create_user test_标签功能.yaml
ansible-playbook -t create_user,create_dir test_标签功能.yaml --- 执行多个标签
5.剧本忽略采集功能
cat test_忽略采集.yaml
- hosts: 172.16.1.41
gather_facts: no//关闭采集功能
tasks:
- name: 01:安装软件
yum: name=rsync state=installed
ignore_errors: yes
- name: 02:创建用户
user: name=rsync create_home=no shell=/sbin/nologin
ignore_errors: yes
tags: create_user
- name: 03:创建目录
file: path=/backup state=directory
tags: create_dir
#说明: 可以提升剧本执行效率; 如果剧本中有判断功能,不能使用此参数
6.剧本信息触发功能
cat test_触发功能.yaml
- hosts: 172.16.1.41
tasks:
- name: 01:传输配置文件
copy: src=/etc/ansible/ansible_playbook/rsyncd.conf dest=/etc/
notify: rsync_restart //配置的参数 监控有没有变化 当由变化的时候进行重启。
- name: 02:启动服务程序
service: name=rsyncd state=started //第一次配置文件编好了正常启动
handlers:
- name: rsync_restart
service: name=rsyncd state=restarted
//整体任务执行完毕,才会执行触发功能
二、多个剧本如何进行整合
- 第一个历程: 确保每个剧本执行成功
- 第二个历程: 进行剧本整合
- 方式一:include_tasks: f1.yml --- 角色使用
hosts: all
remote_user: root
tasks:
- include_tasks: f1.yml //平级在一个路径下。
- include_tasks: f2.yml
#将主机清单信息 删掉 保留只是任务的信息。
#在角色中可以灵活的调用主机,相比第二中和第三种。
- 方式二:include: f1.yml
- include:f1.yml
- include:f2.yml
- 方式三:- import_playbook: ******
[root@m01 ansible-playbook]# cat main.yml
import_playbook: base.yml
import_playbook: rsync.yml
import_playbook: nfs.yml
import_playbook: oxxx.yml
import_playbook: rsync.yml
import_playbook: nfs.yml
网友评论