Ansible-流程控制-Handlers

本文介绍了Ansible中用于自动化配置管理的流程控制语句,如根据系统类型安装服务,选择性执行任务。还展示了如何使用循环来批量处理任务,如启动多个服务、拷贝多个文件及创建多个用户。此外,详细解析了Ansible的Handlers机制,它作为任务的触发器,当配置文件发生变化时,自动重启相关服务。强调了Handlers的注意事项,如仅在任务有变更时触发,并且只会执行一次。
摘要由CSDN通过智能技术生成

Ansible 流程控制

判断语句

  • 1.centos和ubuntu系统都需要安装httpd, 判断系统.
  • 2.安装软件仓库,只有web组的安装webtatic其他的主机全部跳过.
  • 3.TASK任务, TASK1任务执行成功,才会执行TASK2
#根据不同的系统,安装不同的服务
[root@manager project1]# cat f15.yml 
- hosts: webservers
  tasks:
    - name: CentOS Installed Httpd Server
      yum:
        name: httpd
        state: present
      when: ( ansible_distribution == "CentOS" )

    - name: Ubuntu Installed Httpd Server
      yum:
        name: httpd2
        state: present
      when: ( ansible_distribution == "Ubuntu" )
      
 #所有web主机都安装nginx仓库源,其他跳过
[root@manager project1]# cat f16.yml 
- hosts: all
  tasks:
  - name: Add Nginx Yum Repository
    yum_repository:
      name: nginx
      description: Nginx Repository
      baseurl: http://nginx.org/packages/centos/7/$basearch/
    when: ( ansible_hostname is match ("web*"))

#判断第一个成功,执行第二个条件
[root@manage project]#  cat f17.yml 
- hosts: webservers
  tasks:
    - name: Check Httpd Server
      command: systemctl is-active httpd
      register: Check_Httpd
      ignore_errors: yes   #加了这个,报错也会执行下面的

    - name: Debug OutPut
      debug:
        msg: "{{ Check_Httpd }}"
  #判断Check_Httpd.rc是否等于0,如果为0则执行任务,否则不执行
    - name: Restarted Httpd Server
      systemd:
        name: httpd
        state: restarted
      when: ( Check_Httpd.rc == 0 )
[root@manage project]# ansible-playbook -i hosts f17.yml 

循环语句

#一次启动多个服务
[root@manager project1]# cat f18.yml 
- hosts: webservers
  tasks:
    - name: Systemd Nginx Status
      systemd:
        name: "{{ item }}"    #调用的变量也不变,也是固定,item固定写法
        state: started

	#固定的语法格式
      with_items:  #固定写法
        - nginx
        - php-fpm


#一次拷贝多个文件
[root@manager project1]# cat f19.yml
- hosts: webservers
  tasks:
    - name: Configure nginx.conf
      copy:
        src: '{{ item.src }}'
        dest: '{{ item.dest }}'
        mode: '{{ item.mode }}'
      with_items:
        - { src: ./file/nginx.conf.j2, dest: /etc/nginx/nginx.conf, mode: '0644' }
        - { src: ./file/kold.oldxu.com.conf.j2, dest: /etc/nginx/conf.d/kold.oldxu.com.conf, mode: '0600' }



#创建多个用户,一次创建多个? 3个用户  TASK
[root@manager project1]# cat f20.yml 
- hosts: webservers
  tasks:
    - name: Create User
      user:
        name: "{{ item }}"

      with_items:
        - test1
        - test2
        - test3
        - test4


#1.创建tt1 --> bin  tt2 -->root tt3 --->adm   附加组
[root@manager project1]# cat  f20.yml 
- hosts: webservers
  tasks:
    - name: Create User
      user:
        name: "{{ item.name }}"
        groups: "{{ item.groups }}"

      with_items:
        - { name: tt1, groups: bin }
        - { name: tt2, groups: root }
        - { name: tt3, groups: adm }
        
        
        
1.标准循环                   --->居多
	item
	with_items:
	   - test
2.字典循环:                   --->居多
    itme.name
    with_items:
        - { name: test }


3.变量循环
- hosts: webservers
  tasks:
    - name: ensure a list of packages installed
      yum: name={{ packages }} state=present
      vars:
        packages:
          - httpd
          - httpd-tools

handlers

[root@manager project1]# cat f22.yml 
- hosts: webservers
  tasks:

    - name: Installed Nginx and PHP Packages
      yum:
        name: nginx
        state: present

    - name: Configure nginx.conf 
      template:
        src: ./file/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      #监控-->changed状态-->通知-->handlers--->name-->Restart Nginx Server
      notify: Restart Nginx Server
      #notify:
      #  - Restart Nginx Server
      #  - Restart php Server

    - name: Systemd Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes

#当nginx或php配置文件发生变更才会触发此操作
  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted


#3.handlers注意事项
	1.无论多少个task通知了相同的handlers,handlers仅会在所有tasks结束后运行一次。
	2.只有task发生改变了才会通知handlers,没有改变则不会触发handlers.
	3.不能使用handlers替代tasks、因为handlers是一个特殊的tasks。

变量->facts–>判断–>循环

Ansible handlers触发器

Handlers是一个触发器,也是一个tasks,只不过是一个特殊的tasks,它是需要被tasks触发才会运行。

只要配置文件发生变更,则会触发handlers执行重启服务操作,如果配置文件不发生任何变化则不重启。

#当nginx配置文件发生改变就重启
[root@manage project]# cat f22.yml
- hosts: webservers
  tasks:
    - name: Install Nginx 
      yum:
        name: nginx
        state: present

    - name: Configure Nginx.conf
      copy:
        src: ./file/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Restart Nginx Server
#notify对应多个handlers时可以这样写
      #notify:
      #  - Restart Nginx Server
      #  - Restart php-fpm Server
    - name: System Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes

  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted

[root@manage project]# ansible-playbook -i hosts f22.yml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值