1. ansible-playbook添加判断
     when相当于shell脚本里的if 判断,when语句就是用来实现这个功能的,它是一个jinja2的语法,但是不需要双大括号,用法很简单
  1.1) 示例1:

 1 [root@test-1 when]# vim when_test1.yaml
2 [root@test-1 when]# cat when_test1.yaml
3 ---
4 - hosts: web1
5 gather_facts: yes
6
7 tasks:
8 - name: "IP if"
9 debug: msg={{ansible_default_ipv4.address}}
10 when: ansible_default_ipv4.address == '192.168.200.133'
11
12 # 注意 Ansible facts和vars 比如 ansible_os_family 应能被引用
13 # 直接写,不带双大括号。

1.2) 示例2:使用括号对条件进行分组

 1 [root@test-1 when]# vim when_test2.yaml
2 [root@test-1 when]# cat when_test2.yaml
3 ---
4 - hosts: localhost
5 gather_facts: yes
6
7 tasks:
8 - name: "shut down CentOS 6 and Debian 7 systems"
9 command: ls -a
10 when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6") or
11 (ansible_facts['distribution'] == "Debian" and ansible_facts['distribution_major_version'] == "7")

1.3) 示例3:所有需要为true的多条件判读(逻辑“and”) 也可以指定为列表

 1 [root@test-1 when]# vim when_test3.yaml
2 [root@test-1 when]# cat when_test3.yaml
3 ---
4 - hosts: localhost
5 gather_facts: yes
6
7 tasks:
8 - name: "shut down CentOS 7 systems"
9 command: ls -a
10 when:
11 - ansible_facts['distribution'] == "CentOS"
12 - ansible_facts['distribution_major_version'] == "7"

2. 案例:
  2.1) ansible-playbook进行when判断是centos还是Ubuntu系统后在安装http

 1 [root@test-1 when]# vim when_mc.yaml
2 [root@test-1 when]# cat when_mc.yaml
3 ---
4 - hosts: localhost
5 gather_facts: yes
6
7 tasks:
8 - name: "update apache version - yum"
9 yum: name=httpd state=present
10 when:
11 - ansible_pkg_mgr == 'yum'
12 notify: restart httpd
13
14 - name: "Update apache version - apt"
15 apt: name=apache2 state=present update_cache=yes
16 when:
17 - ansible_pkg_mgr == 'apt'
18 notify: restart apache2
19
20
21 handlers:
22 - name: restart apache2
23 service: name=apache2 state=restarted
24 - name: restart httpd
25 service: name=httpd state=restarted

2.2) 配置文件检查

1 [root@test-1 when]# ansible-playbook  --syntax-check when_mc.yaml
2
3 playbook: when_mc.yaml

2.3) 执行远程安装脚本

 1 [root@test-1 when]# ansible-playbook   when_mc.yaml
2
3 PLAY [localhost] *******************************************************************************************************************************
4
5 TASK [Gathering Facts] *************************************************************************************************************************
6 ok: [192.168.200.131]
7
8 TASK [update apache version - yum] *************************************************************************************************************
9 changed: [192.168.200.131]
10
11 TASK [Update apache version - apt] *************************************************************************************************************
12 skipping: [192.168.200.131]
13
14 RUNNING HANDLER [restart httpd] ****************************************************************************************************************
15 changed: [192.168.200.131]
16
17 PLAY RECAP *************************************************************************************************************************************
18 192.168.200.131 : ok=3 changed=2 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

ansible-playbook流程控制-when条件判断的更多相关文章

  1. 廖雪峰Java1-3流程控制-3条件判断

    1.if条件判断的格式 if (条件) { 代码块 } if (条件) { 代码块1 } else { 代码块2 } if (条件1) { 代码块1 } else if { 代码块2 } else { ...

  2. Python流程控制-2 条件判断

    条件判断 条件判断是通过一条或多条判断语句的执行结果(True或者False)来决定执行的代码块. 在Python语法中,使用if.elif和else三个关键字来进行条件判断. if语句的一般形式如下 ...

  3. 基础运算符补充,流程控制之if判断/while循环

    常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...

  4. 格式化输出的三种方式,运算符及流程控制之if判断

    ''' 格式化输出的三种方式,运算符及流程控制之if判断 ''' # 格式化输出的三种方式 # 一.占位符 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式 比如要求用户输入用户名和年龄 ...

  5. [基本运算符、流程控制之if判断、与用户交互、深浅拷贝]

    [基本运算符.流程控制之if判断.与用户交互] 基本运算符 1.算数运算符 python支持的算术运算符与数学上计算的符号使用是一致的 salary = 3.3 res = salary * 12 p ...

  6. python 流程控制(条件语句)

    1,python流程控制单条件基本语句 2,python流程流程多条件控制语句 3,三元运算 1,python流程控制单条件基本语句 if 判断条件: 执行语句…… else: 执行语句…… 判断条件 ...

  7. java基础 流程控制和条件语句,循环语句

    顺序结构 程序的顺序结构: 如果代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的, 一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束. if语句 if语句使用bo ...

  8. linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载

    http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html nux shell有一套自己的流程控制语句,其中包括条件语句(if),循环 ...

  9. [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例

    原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...

随机推荐

  1. 剑指 Offer 48. 最长不含重复字符的子字符串

    题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 & ...

  2. SpringBean容器启动流程+Bean的生命周期【附源码】

    如果对SpringIoc与Aop的源码感兴趣,可以访问参考:https://javadoop.com/,十分详细. 目录 Spring容器的启动全流程 Spring容器关闭流程 Bean 的生命周期 ...

  3. 微信小程序实现滚动视频自动播放(未优化)

    先看看大概效果 1.首先需要了解微信API:          wx.createIntersectionObserver(Object component, Object options) 创建并返 ...

  4. Vue文件模板

    <template> <div> </div> </template> <script> export default { } </s ...

  5. 轻松上手SpringBoot Security + JWT Hello World示例

    前言 在本教程中,我们将开发一个Spring Boot应用程序,该应用程序使用JWT身份验证来保护公开的REST API.在此示例中,我们将使用硬编码的用户和密码进行用户身份验证. 在下一个教程中,我 ...

  6. Unit1:Android

    unit1 1.安卓版本 最新数据访问维基百科 2008年,android1.0 2011年,android3.0,平板失败 同年10月,android4.0,无差别使用 2014年,android5 ...

  7. Java常见重构技巧 - 去除不必要的!=null判断空的5种方式,很少有人知道后两种

    常见重构技巧 - 去除不必要的!= 项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢?@pdai 常见重构技巧 - 去除不必要的!= 场景一:null无意义之常规判断空 ...

  8. Node.js 从零开发 web server博客项目[接口]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  9. Springboot+Vue实现仿百度搜索自动提示框匹配查询功能

    案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...

  10. 《Redis入门指南》笔记

    第1章 简介 1.1 历史与发展 2008年 意大利创业公司创始人因对mysql性能不满意,于是他决定开发redis. 2009年 redis初版由他一个人开发完成.redis是"remot ...