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. Spark3.0YarnCluster模式任务提交流程源码分析

    1.通过spark-submit脚本提交spark程序 在spark-submit脚本里面执行了SparkSubmit类的main方法 2.运行SparkSubmit类的main方法 3.调用doSu ...

  2. 【Maven】maven脚本中的maven.test.skip和skipTests的区别

    命令 两种方式跳过编译 test mvn clean install -DskipTests mvn clean install -Dmaven.test.skip=true -DskipTests, ...

  3. Mysql业务设计(逻辑设计)

    逻辑设计 数据库设计三大范式 数据库设计第一大范式 数据库表中所有的字段都只具有单一属性 单一属性的列是由基本数据类型所构成 设计出来的表都是简单的二维表 数据库设计的第二大范式 要求表中只有一个业务 ...

  4. java中数据类型占多少字节

    基本类型(primitive type) 数值类型:byte占1个字节:short占2个字节:int占4个字节:long占8个字节:float占4个字节:double占8个字节.char占2个字节. ...

  5. java 多线程-2

    七.线程生命周期 没错,线程也是有生命周期的.就好像人类有出生.儿童.青年.中年.晚年.死亡一般.下面是线程的生命周期图: 八.线程的安全问题 所谓线程不安全[并发问题],举个例子来说,如卖票,会出现 ...

  6. Js获取某个节点的类名

    1. document.querySelectorAll(".style-color")[0].getAttribute("class")   2. $('.s ...

  7. 线程的阻塞 sleep() wait() yield()

    为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了 ...

  8. python3 函数的参数

    函数的参数 形参(函数定义时) + 实参(函数调用时) 形参:形式参数 在函数的定义处定义的参数,比如def func(参数1, 参数2, 参数3...) 普通参数(位置参数), 默认参数,普通收集参 ...

  9. Ubuntu中卸载node和npm并重装

    1.node 和 npm 卸载不干净 #apt-get 卸载 sudo apt-get remove --purge npm sudo apt-get remove --purge nodejs su ...

  10. WPF启动流程-自己手写Main函数

    WPF一般默认提供一个MainWindow窗体,并在App.Xaml中使用StartupUri标记启动该窗体.以下通过手写实现WPF的启动. 首先先介绍一下VS默认提供的App.Xaml的结构,如下图 ...