linux--ansible(playbook8 判断)

这篇博客详细介绍了在Ansible Playbook中如何进行各种判断操作,包括判断数字大小、字符串、文件存在性,以及如何使用ignore_errors、block、rescue、always、fail、failed_when和changed_when等关键字来控制流程和设定执行状态。

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

判断的关键字是: when
ansible判断用的是jinja2的模板
在这里插入图片描述在这里插入图片描述

1.判断数字的大小(大于等于小于)
---
- hosts: testB
  remote_user: root
  gather_facts: no
  tasks:
  - debug:
      msg: "{{item}}"
    with_items: [1,2,3]
    when: item > 1

在这里插入图片描述

2.判断字符串

逻辑与

在这里插入图片描述

---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "System release is Redhat7"
    when: ansible_distribution == "RedHat" and ansible_distribution_version == "7.5"

在这里插入图片描述
另外一种写法:

---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "System release is Redhat7"
    when: 
    - ansible_distribution == "RedHat"
    - ansible_distribution_version == "7.5"

逻辑或

---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "System release is Redhat7"
    when: ansible_distribution == "RedHat" and (ansible_distribution_version == "7.5" or ansible_distribution_version == "7.3")

逻辑非

---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "System release is not windows"
    when: not ansible_distribution == "Windows"
3.ignore_errors 忽略错误继续执行
---
- hosts: testB
  remote_user: root
  tasks:
  - name: task1
    shell: "ls /testaaa"
    register: returnmsg
    ignore_errors: true               忽略错误依然执行下面的task
  - name: task2
    debug:
      msg: "Command execution successful"
    when: returnmsg.rc == 0
  - name: task3
    debug:
      msg: "Command execution failed"
    when: returnmsg.rc != 0

在这里插入图片描述

---
- hosts: testB
  remote_user: root
  tasks:
  - name: task1
    shell: "dateeee"
    register: returnmsg
    ignore_errors: true
  - name: tasks
    debug:
      var: returnmsg

在这里插入图片描述

4.判断文件是否存在(is exists or is not exists or not is exists)
---
- hosts: testB
  remote_user: root
  vars:
    testpath: /testdir
  tasks:
  - debug:
      msg: "file exist"
    when: testpath is exists
---
- hosts: testB
  remote_user: root
  vars:
    testpath: /testdieer
  tasks:
  - debug:
      msg: "file not exist"
    when: testpath is not exists
---
- hosts: testB
  remote_user: root
  vars:
    testpath: /testdieer
  tasks:
  - debug:
      msg: "file not exist"
    when: not testpath is exists

在这里插入图片描述

---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    testvar: "rico"
    testvar1:
  tasks:
  - debug:
      msg: "Variable is defined"
    when: testvar is defined
  - debug:
      msg: "Variable is no defined"
    when: testvar2 is undefined
  - debug:
      msg: "The variable is defined, but there is no value"
    when: testvar1 is none

在这里插入图片描述在这里插入图片描述

---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    doshell: "yes"
  tasks:
  - shell: "cat /testdir/alll"
    when: doshell == "yes"
    register: returnmsg
    ignore_errors: true
  - debug:
      msg: "success"
    when: returnmsg is success
  - debug:
      msg: "failed"
    when: returnmsg is failure
  - debug:
      msg: "changed"
    when: returnmsg is change
  - debug:
      msg: "skip"
    when: returnmsg is skip

在这里插入图片描述在这里插入图片描述

---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    var1: "/testdir/test"
    var2: "/testdir/"
    var3: "/testdir/testsoftlink"
    var4: "/testdir/testhardlink"
    var5: "/boot"
  tasks:
  - debug:
      msg: "file"
    when: var1 is file
  - debug:
      msg: "directory"
    when: var2 is directory
  - debug:
      msg: "link"
    when: var3 is link
  - debug:
      msg: "link"
    when: var4 is link
  - debug:
      msg: "mount"
    when: var5 is mount

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    var1: "abc"
    var2: "ABC"
  tasks:
  - debug:
      msg: "the string is all lowercase"
    when: var1 is lower
  - debug:
      msg: "the string is all uppercase"
    when: var2 is upper

在这里插入图片描述

---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    num1: 6
    num2: 9
    num3: 81
  tasks:
  - debug:
      msg: "an even num"
    when: num1 is even
  - debug:
      msg: "an odd num"
    when: num2 is odd
  - debug:
      msg: "can be divided exactly by"
    when: num3 is divisibleby(9)

在这里插入图片描述

---
- hosts: testB
  remote_user: root
  vars:
    var1: 7.4.1708
    var2: 7.4.1707
  tasks:
  - debug:
      msg: "This message can be displayed when the var1 is  greater than var2"
    when: var1 is version(var2,">")
  - debug:
      msg: "system version {{ansible_distribution_version}} greater than 7.3"
    when: ansible_distribution_version is version("7.3","gt")

在这里插入图片## 标题描述

---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    a:
    - 1
    - 10
    b: [1,4,6,10,11]
  tasks:
  - debug:
      msg: "A is subset B"
    when: a is subset(b)
  - debug:
      msg: "B is the parent set of A"
    when: b is superset(a)
判断一个对象是否是字符串
---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    var1: 1                     不是
    var2: "2"                   是
    var3: b                     是
  tasks:
  - debug:
      msg: "the variable is string"
    when: var1 is string
  - debug:
      msg: "the variable is string"
    when: var2 is string
  - debug:
      msg: "the variable is string"
    when: var3 is string
判断对象是否是数字
---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    var1: 1       
    var2: "2"                    不是
    var3: 0.3                    是
  tasks:
  - debug:
      msg: "the variable is number"
    when: var1 is number
  - debug:
      msg: "the variable is number"
    when: var2 is number
  - debug:
      msg: "the variable is number"
    when: var3 is number
block: 当条件成立时,执行多个任务
---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "task1 not in block"
  - block:
      - debug:
          msg: "task2 in block"
      - debug:
          msg: "task3 in block"
    when: 2 > 1

在这里插入图片描述

如果任务一执行失败则执行任务二 如果成功则不执行任务二
---
- hosts: testB
  remote_user: root
  tasks:
  - shell: "ls /omn"
    register: return_value
    ignore_errors: true
  - debug:
      msg: "I cought an error"
    when: return_value is failed

在这里插入图片描述

rescue:如果block执行失败,就执行rescue中的语句
如果成功,就不执行

注意:只有block错误才会执行rescue

---
- hosts: testB
  remote_user: root
  tasks:
  - block:
      - shell: "ls /omn"
    rescue:
      - debug:
          msg: "I cought an error"

按顺序执行,任意一个出错就会执行rescue,后面的不执行

---
- hosts: testB
  remote_user: root
  tasks:
  - block:
      - shell: "ls /opt"
      - shell: "ls /omn"
      - shell: "ls /testdir"
    rescue:
      - debug:
          msg: "I cought an error"

在这里插入图片描述

在rescue中输出多个任务

---
- hosts: testB
  remote_user: root
  tasks:
  - block:
      - shell: "ls /opt"
      - shell: "ls /omn"
      - shell: "ls /testdir"
    rescue:
      - debug:
          msg: "I cought an error1"
      - debug:
          msg: "I cought an error2"

在这里插入图片描述

always: 不管怎样都执行
---
- hosts: testB
  remote_user: root
  tasks:
  - block:
      - debug:
          msg: "I execute normally"
      - command: /bin/false            出错
      - debug:
          msg: "I never execute, due to the above task failing"
    rescue:
      - debug:
          msg: "I cought an error"
      - command: /bin/false            出错
      - debug:
          msg: "I also never execute"
    always:
      - debug:
          msg: "This is always execute"

在这里插入图片描述

fail: 强制终止playbook运行
---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: 1
  - fail:
  - debug:
      msg: 2

在这里插入图片描述

fail提示信息也可以自定义

---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: 1
  - fail:
      msg: "stop"
  - debug:
      msg: 2

在这里插入图片描述

判断,条件满足停止playbook
---
- hosts: testB
  remote_user: root
  tasks:
  - shell: "echo '--error--'"
    register: return_value
  - fail:
      msg: "running fail"
    when: "'error' in return_value.stdout"
  - debug:
      msg: "I nerver execute, Because the playbook has stopped"

在这里插入图片描述

---
- hosts: testB
  remote_user: root
  tasks:
  - shell: "echo '--zzzeeee--'"
    register: return_value
  - fail:
      msg: "running fail"
    when: "'error' in return_value.stdout"
  - debug:
      msg: "I nerver execute, Because the playbook has stopped"

在这里插入图片描述

failed_when: 当条件成立 执行状态设置为失败

并不代表任务真正的失败

从判断条件出发,而不是shell执行结果

---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "I execute normally"
  - shell: "echo 'This is a string for testing error'"
    register: return_value
    failed_when: '"error" in return_value.stdout'
  - debug:
      msg: "I never execute,Because the playbook has stopped"

在这里插入图片描述

changed_when: 当条件成立时,将对应的状态设置为changed
---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "test message"
    changed_when: 2 > 1            将状态设置为changed 从绿色变为黄色
---
- hosts: testB
  remote_user: root
  tasks:
  - shell: "ls /opt"

在这里插入图片描述
改变执行状态

---
- hosts: testB
  remote_user: root
  tasks:
  - shell: "ls /opt"
    changed_when: false

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值