Ansible的任务执行控制

目录

一.循环迭代

1.简单循环

 2.循环散列或者字典列表

 二.条件

 三.触发器

 四.处理失败任务


一.循环迭代

1.简单循环

{{item}}迭代变量名词   loop: 赋值列表

- name:
  hosts: westos
  tasks:
    - name: echo
      debug:
        msg: "{{item}}"

      loop:
        - luck
        - bad

 2.循环散列或者字典列表

- name:
  hosts: westos
  tasks:
    - name:
      service:
        name: "{{item.name}}"
        state: "{{item.state}}"
      loop:
        - name: httpd
          state: restarted
        - name: firewalld
          state: stopped

 二.条件

when
 - 条件1
 - 条件2
- name:
  hosts: all
  tasks:
    - name: check file
      shell: test -e /mnt/test
      register: CHECKOUT
      ignore_errors: yes
    - name: debug
      debug:
        msg:  "/mnt/test is not exit"
      when: 
        - inventory_hostname in groups.westos
        - CHECKOUT.rc !=0

   - name: debug
      debug:
        msg:  "/mnt/test is  exit"
      when:
        - inventory_hostname in groups.westos
        - CHECKOUT.rc == 0

=value==“字符串”  value = = 数字
>value < 数字
<---
<=---
>=---
!=---
is not defined----
is definedvalue is defined
invalue is in value
not invalue is not in value
true   /bool变量value                            /       value值为true
flase   /bool变量not value                /       value值为flase
value in value2   value值在value2

when:>
  1
  2
- name:
  hosts: all
  tasks:
    - name: check file
      shell: test -e /mnt/test
      register: CHECKOUT
      ignore_errors: yes
    - name: debug
      debug:
        msg:  "/mnt/test is not exit"
      when: >
         inventory_hostname in groups.westos
         or
         CHECKOUT.rc !=0

 练习

建立lvm.yml

建立大小为1500M的名为exam_lvm的lvm在westos组中

如果westos不存在请输出

vg westos is not exit

如果 westos大小不足1500M  请输出

vg westos is less than 1500M

并建立800M的lvm

输出这一步并没有准确做到  应该在学了block,rescue,和always去做

- name: create exam_lvm
  hosts: westos
  tasks:
    - name: check /dev/vdb
      debug:
        msg: vg westos is not exit
      when: ansible_facts['lvm']['vgs']['westos'] is not defined

    - name: create 1500M lvm
      lvol:
        vg: westos
        lv: exam_lvm
        size: 1500m
      when: ansible_facts['lvm']['vgs']['westos'] is  defined
      ignore_errors: yes
      register: lvmstart

    - name: create 800M lvm
      lvol:
        vg: westos
        lv: exam_lvm
        size: 800m
      ignore_errors: yes
      register: lvmstop
      when:
        - ansible_facts['lvm']['vgs']['westos'] is defined
        - lvmstart['rc'] !=0
    - name:
      debug:
        msg: "vg westos less than 1500M"

 

 三.触发器

notify:触发器遇到更改触发handlers
handlers: 触发器触发后执行的动作
- name:
  hosts: westos
  tasks:

    - name: install apache
      dnf:
        name: httpd
        state: present

    - name: configure httpd
      lineinfile:
        regexp: "^Listen"
        path: /etc/httpd/conf/httpd.conf
        line: "Listen 8080"
      notify:
          restart httpd
  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted
        enabled: yes

要触发重启服务,需要触发器前面的模块动作

 四.处理失败任务

ignore_errors

 

force_handlers:    yes/no    yes时当任务失败后play中止仍会调用触发器

 将被控机httpd 卸载,删除/etc/httpd,失败的任务,不影响触发重启

changed_when:     控制任务在何时报告它已经更改   true 已经更改和触发器一起用一直触发

 failed_when: true无论任务是否成功,都会显示失败  可加条件

 五.block

block:

rescue:

always:

 测试

建立playbook ~/westos.yml

建立大小为1500M的/dev/vdb1设备

如果/dev/vdb1不存在请输入  /dev/vdb1 is not exit

如果大小不足2G请输入 /dev/vdb1 is less then 2G

并建立800M大小的/dev/vdb1

次设挂载在/westos上

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值