ansible-day04-20201030-handlers-notify-tags-变量定义

本文详细讲解了Ansible中handlers和notify的结合使用,涉及任务列表管理、资源监控、操作触发条件及变量应用,展示了如何在playbook中定义和执行多个相关操作的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

handlers和notify结合使用触发条件

handlers
是task列表 用于当关注的资源发生变化时,才会采取一定的操作
notify 此action可用于每个play的最后被触发 这样可避免多次有改变发生时每次都执行指定的操作 仅在所有的变化发生完成后一次性的执行指定操作 在notify中列出的操作称为handler 也即notify中调用handler中定义的操作
---
- hosts: all
  remote_user: root

  tasks:
    - name: isntall
      yum: name=httpd
      tags: installhttpd
    - name: copy
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart
    - name: selinux
      shell: sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
    - name: selinux 0
      shell: setenforce 0
    - name: service
      service: name=httpd state=started enabled=yes
      tags: starthttpd

  handlers:
    - name: restart
      service: name=httpd state=restarted



handlers 定义要执行的动作
notify 后面跟handlers定义的想要执行的操作
多个的话可以这样写
notify:
	- restart
	- check

handlers:
	- name: restart
	  service: name=nginx state=restarted enabled=yes
	- check
	  shell: kill -O nginx > /tmp/nginx.log
	  
tags 可以给执行的操作设置一个标签 可以用来单独执行标签的操作
多个动作共用一个标签也可以 这时候 这个标签执行 会执行多个动作
ansible-playbook httpd.yml -t starthttpd
ansible-playbook httpd.yml -t starthttpd,installhttpd

playbook中变量使用

变量名 仅能由字母 数字 和下划线 且 只能以字母开头
变量来源:
1 ansible setup facts 远程主机的所有变量都可直接调用
2 在/etc/ansible/hosts 中定义
	普通变量 主机组中主机单独定义 优先级高于公共变量
	公共变量 针对主机组中所有主机统一变量
3 通过命令行指定变量 优先级最高
	ansible-playbook -e varname=value
4 在playbook中定义
	vars:
	 - vat1:value1
	 - vat2:value2
5 在role中定义

ansible all -m setup -a 'filter=ansible_hostname'
ansible all -m setup -a 'filter=*addr*'
# setup 模块 -a 筛选出想要的信息
# 可以获取客户端变量的值
# 后续可以拿来用 判断之类的

命令行指定
---
- hosts: all
  remote_user: root

  tasks:
    - name: isntall package
      yum: name={{ pkname }}
    - name: service
      service: name={{ pkname }} state=started enabled=yes
      tags: starthttpd

ansible-playbook -e 'pkname=vsftpd' app.yml
# -e 指定变量名

---
- hosts: all
  remote_user: root

  tasks:
    - name: isntall package
      yum: name={{ pkname1 }}
	- name: isntall package
      yum: name={{ pkname2 }}

ansible-playbook -e 'pkname1=vsftpd pkname2=memcached' app.yml

在playbook中定义
---
- hosts: all
  remote_user: root
  vars:
    - pkname1: httpd
    - pkname2: vsftpd

  tasks:
    - name: isntall package
      yum: name={{ pkname1 }}
    - name: isntall package
      yum: name={{ pkname2 }}

ansible all -m yum -a 'name=httpd,vsftpd state=absent'
ansible-playbook app.yml

---
- hosts: all
  remote_user: root
  tasks:
    - name: set hostname
      hostname: name=www.{{http_port}}.com

[web]
192.168.0.211 http_port=node1
#192.168.0.210
#192.168.0.212
[ser]
192.168.0.213 http_port=node3
#192.168.0.200
[root@node3 ansible]# cat /etc/ansible/hosts

ansible-playbook -C hostname.yml

在/etc/ansible/hosts 中定义
[ser]
192.168.0.213 http_port=node3
#192.168.0.200
[ser:vars]
nodename=www.
mainname=.com

---
- hosts: all
  remote_user: root
  tasks:
    - name: set hostname
      hostname: name={{nodename}}{{http_port}}{{mainname}}

ansible-playbook hostname.yml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值