5.5 Ansible中的任务执行控制

目录

一.循环

1.简单循环

2.循环散列或字典列表

二.条件

1. when: - 条件1 - 条件

2. 多条条件组合

三.触发器

四.处理失败任务

1.ignore_errors

2.force_handlers

 3.changed_when

4.failed_when

5.block

测试练习


一.循环

循环迭代任务

1.简单循环

- name: test play

  hosts: westos

  tasks:

    - debug:

        msg: "{{item}}"

      loop:

        - westos

        - linux

        - lee

2.循环散列或字典列表

- name: test play

   hosts: westos

   tasks:

     - debug:

         msg: "{{item.name}} {{item.age}}"

       loop:

         - { name: westos, age: 18 }

         - { name: linux, age: 19 }

         - { name: lee, age: 20 }

二.条件

1. when: - 条件1 - 条件

条件判断

2. 多条条件组合

when:

条件1 and 条件2

- 条件1

- 条件2

when:

条件1 or 条件2

when: >

条件1

or

条件2

三.触发器

notify: 触发器当遇到更改是触发handlers

handlers:触发器触发后执行的动作

实例:安装Apache,更改端口为8080,如果更改,并重启Apache,触发触发器;如果端口号是8080未被修改,则不需要重启,触发器不被触发

- name: apache server

  hosts: westos

  vars:

    port: 8080

  tasks:

    - name: install httpd

      dnf:

        name: httpd

        state: present

    - name: set config

      lineinfile:

        path: /etc/httpd/conf/httpd.conf

        regexp: ^Listen

        line: "Listen {{port}}"

      notify: restart apache

    - name: enable filewalld

      firewalld:

        port: "{{port}}/tcp"

        permanent: yes

        immediate: yes

        state: enabled

- name: state apache

      service:

        name: httpd

        state: started

        enabled: yes

  handlers:

    - name: restart apache

      service:

        name: httpd

        state: restarted

四.处理失败任务

1.ignore_errors

作用:

当play遇到任务失败时会终止,ignore_errors: yes将会忽略任务失败使下面的任务继续运行

实例:执行install software play失败后会执行show some message play模块

- name: test play

  hosts: westos

  tasks:

    - name: inatall software

      dnf:

        name: http(错误)

        state: present

      ignore_errors: yes

    - name: show some message

      debug:

        msg: hello westos

2.force_handlers

作用:当任务失败后play被终止,也会调用触发器进程

- name: test play

  hosts: westos

  force_handlers: yes

  tasks:

    - name: test

      shell: ls /mnt/

    - name: install software

      dnf:

        name: http(错误)

        state: present

    - name: show some massages

      debug:

        msg: hello westos

  handlers:

    - name: notify messages

      debug:

        msg: hello notify

 3.changed_when

作用: 控制任务在何时报告它已进行更改,无论有没有更改,都视为更改

- name: test play

  hosts: westos

  tasks:

    - name: install software

      dnf:

        name: http(错误)

        state: present

      changed_when: yes

      notify: notify message

    - name: show some message

      debug:

        msg: hello westos

   handlers:

     - name: notify message

       debug:

         msg: hello notify

4.failed_when

当符合条件时强制任务失败 (无论是不是失败的,都强制失败)

- name: test play

  hosts: westos

  tasks:

    - name: install software

      dnf:

        name: http(错误)

        state: present

      failed_when: yes

      notify: notify message

    - name: show some message

      debug:

        msg: hello westos

   handlers:

     - name: notify message

       debug:

         msg: hello notify

5.block

block:           定义要运行的任务

rescue:          定义当block句子中出现失败任务后运行的任务

always:       定义最终独立运行的任务

- name: test play

  hosts: westos

  force_handlers: yes

  tasks:

    - name: test block

      block:

        - name: install software

          dnf:

            name: http(错误)

            state: present

      rescue:

        - name: show error

          debug:

            msg: http is not exist

      always:

        - name: show message

          debug:

            msg: over

测试练习

磁盘划分

1.建立playbook ~/westos.yml

要求如下: 建立大小为1500M名为/dev/vdb1的设备 如果/dev/vdb不存在请输入: /dev/vdb is not exist 如果/dev/vdb大小不足2G请输出: /dev/vdb is less then 2G 并建立800M大小的/dev/vdb1 此设备挂载到/westos上

- name: test

  hosts: westos

  tasks:

    - name: /dev/sdb is not exist

      debug:

        msg: /dev/sdb is not exist

      when:

        ansible_facts['devices']['sdb'] is not defined

    - name: create_storage

      block:

        - name: create 1500M

          parted:

            device: /dev/sdb

            number: 1

            state: present

            part_end: 1500MiB

          when:

            ansible_facts['devices']['sdb'] is  defined

      rescue:

        - name: create 800M

          parted:

            device: /dev/sdb

            number: 1

            state: present

            part_end: 800MiB

          when:

            ansible_facts['devices']['sdb'] is defined

        - name: device messages

          debug:

            msg: /dev/sdb is less 2G

          when:

            ansible_facts['devices']['sdb'] is defined

      always:

        - name: create filesystem

          filesystem:

            fstype: xfs

            dev: /dev/sdb1

        - name:

          file:

            path: /westos

            state: directory

        - name: mount devices

          mount:

            path: /westos

            src: /dev/sdb1

            fstype: xfs

            state: mounted

      when:

        ansible_facts['devices']['sdb'] is defined

 

2.建立userlist.yml中的用户,并且使用户密码加密,
vim userlist.yml

vim useradd.yml 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值