ansible-playbook流程控制-when条件判断
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条件判断的更多相关文章
- 廖雪峰Java1-3流程控制-3条件判断
1.if条件判断的格式 if (条件) { 代码块 } if (条件) { 代码块1 } else { 代码块2 } if (条件1) { 代码块1 } else if { 代码块2 } else { ...
- Python流程控制-2 条件判断
条件判断 条件判断是通过一条或多条判断语句的执行结果(True或者False)来决定执行的代码块. 在Python语法中,使用if.elif和else三个关键字来进行条件判断. if语句的一般形式如下 ...
- 基础运算符补充,流程控制之if判断/while循环
常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...
- 格式化输出的三种方式,运算符及流程控制之if判断
''' 格式化输出的三种方式,运算符及流程控制之if判断 ''' # 格式化输出的三种方式 # 一.占位符 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式 比如要求用户输入用户名和年龄 ...
- [基本运算符、流程控制之if判断、与用户交互、深浅拷贝]
[基本运算符.流程控制之if判断.与用户交互] 基本运算符 1.算数运算符 python支持的算术运算符与数学上计算的符号使用是一致的 salary = 3.3 res = salary * 12 p ...
- python 流程控制(条件语句)
1,python流程控制单条件基本语句 2,python流程流程多条件控制语句 3,三元运算 1,python流程控制单条件基本语句 if 判断条件: 执行语句…… else: 执行语句…… 判断条件 ...
- java基础 流程控制和条件语句,循环语句
顺序结构 程序的顺序结构: 如果代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的, 一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束. if语句 if语句使用bo ...
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载
http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html nux shell有一套自己的流程控制语句,其中包括条件语句(if),循环 ...
- [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...
随机推荐
- OpenvSwitch系列之六 vlan隔离
局域网游戏代表:红色警戒 Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令 ...
- 10_Python的函数function
1.函数的概述 1.函数是可以重复执行的语句块且可以重复调用,函数封装了可重复执行的语句提高了语句的可重复性 2.函数的参数和返回值的作用流程图: https://www.processon. ...
- Vue 事件的高级使用方法
Vue 事件的高级使用方法 事件方法 在Vue中提供了4中事件监听方法,分别是: $on(event: string | Array, fn) $emit(event: string) $once(e ...
- python:接口开发
一.flask flask是一个python编写的轻量级框架,可以使用它实现一个网站或者web服务.本文就用flask来开发一个接口. flask需要先安装再引用.pip install flask ...
- jzoj 6798. 【2014广州市选day2】regions
Description 在平面上堆叠着若干矩形,这些矩形的四边与平面X坐标轴或Y坐标轴平行.下图展示了其中一种情况,3个矩形的边将平面划分成8个区域: 下面展示了另一种稍稍复杂一些的情况: 你的任务是 ...
- C#托管堆和非托管堆
- Java简介以及入门
JAVA基础知识 Java简介 作者:詹姆斯·高斯林(James Gosling) Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此J ...
- python中使用mock模块返回数据
mock是辅助单元测试的一个模块.它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言. mock在python3中已经被集成到了unittest单元测试框架中,所以,可以直接使用. m ...
- Python3使用钉钉机器人推送消息(签名方式)
import time import hmac import hashlib import base64 import urllib import json import requests impor ...
- Docker公共&本地镜像仓库(七)
分发镜像 我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法: 用相同的Dockerfile在其他host上构建镜像 将镜像上传到公共registry(比如 ...