ansible剧本编写扩展功能
1. 剧本变量编写功能
2. 剧本信息通知功能
3. 剧本信息判断功能
4. 剧本信息循环功能
5. 剧本编写忽略错误
6. 剧本标签设置功能
7. 剧本忽略采集功能
8. 剧本信息触发功能
- 剧本变量编写功能
设置变量方法一: 在剧本中设置变量 剧本变量其次优先
- hosts: 172.16.1.41
vars:
dir: /etc
file: rsyncd.conf
tasks:
- name: copy file
copy: src={{ dir }}/{{ file }} dest={{ dir }}/
设置变量方法二: 在主机清单中设置变量 主机清单变量最不优先
[rsync_server]
172.16.1.41 ansible_user=root ansible_password=123456
172.16.1.31
[rsync_server:vars] --- 给指定主机组统一设置变量
dir=/etc
file=rsyncd.conf
设置变量方法三: 在剧本执行命令参数中设置变量 命令行最优先
ansible-playbook -e dir=/etc -e file=rsyncd.conf test_变量功能.yaml
- 剧本信息通知功能
- hosts: 172.16.1.41
tasks:
- name: boot server
service: name=rsyncd state=started
- name: check server boot
shell: netstat -lntup|grep 873
register: oldboy
- debug: msg={{ oldboy.stdout_lines }}
- 剧本判断功能说明
三台主机:
NFS服务客户端(nfs服务启动) NFS服务端
centos7 10.0.0.7 centos7 10.0.0.31
centos6 10.0.0.8
centos7 10.0.0.9
- hosts: nfs_client
tasks:
- name: boot centos7 nfs
shell: systemctl start nfs
判断: 如果是centos7 ???
- name: boot centos6 nfs
shell: /etc/init.d/nfs start
判断: 如果是centos6 ???
- 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")
- hosts: 172.16.1.41
tasks:
- name: create file for 41 host
file: path=/tmp/centos state=directory
when: (ansible_distribution == "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: 172.16.1.41
tasks:
- name: create user
user: name={{ item }}
with_items:
- oldgirl01
- oldgirl02
- oldgirl03
- oldgirl04
- oldgirl
循环创建多个用户 多个用户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
register: user_info
- debug: msg={{ user_info.stdout_lines }}
- 剧本编写忽略错误
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: y
- 剧本标签设置功能
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,create_dir test_标签功能.yaml --- 执行多个标签
- 剧本忽略采集功能
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
说明: 可以提升剧本执行效率; 如果剧本中有判断功能,不能使用此参数
- 剧本信息触发功能
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
说明: 整体任务执行完毕,才会执行触发功能