ansible条件使用

1、条件使用最简单的方式

ansible中使用条件最简单的方式如下所示:

[root@ansibleserver kel]# cat conditions.yml

---

- hosts: servers

tasks:

- name: "shutdown centos system"

command: /sbin/reboot

when: ansible_lsb.id == "CentOS"

在以上例子中,主要是根据收集的fact变量来判断哪些是centos服务器,从而将对应的centos服务器进行重启操作,执行结果如下:

[root@ansibleserver kel]# ansible-playbook -i hosts conditions.yml

SSH password:

PLAY [servers] ****************************************************************

GATHERING FACTS ***************************************************************

ok: [192.168.1.164]

ok: [192.168.1.172]

ok: [192.168.1.171]

ok: [192.168.1.163]

TASK: [shutdown centos system] ************************************************

skipping: [192.168.1.163]

skipping: [192.168.1.164]

changed: [192.168.1.172]

changed: [192.168.1.171]

PLAY RECAP ********************************************************************

192.168.1.163              : ok=1    changed=0    unreachable=0    failed=0

192.168.1.164              : ok=1    changed=0    unreachable=0    failed=0

192.168.1.171              : ok=2    changed=1    unreachable=0    failed=0

192.168.1.172              : ok=2    changed=1    unreachable=0    failed=0

在上面的结果中,只有centos的服务器进行了重启,然后其他类型的服务器跳过。

如何来进行过滤fact的变量,如下所示:

[root@ansibleserver kel]# ansible -i hosts centosservers -m setup -a "filter=ansible_lsb*"

SSH password:

192.168.1.171 | success >> {

"ansible_facts": {

"ansible_lsb": {

"codename": "Final",

"description": "CentOS release 6.4 (Final)",

"id": "CentOS",

"major_release": "6",

"release": "6.4"

}

},

"changed": false

}

192.168.1.172 | success >> {

"ansible_facts": {

"ansible_lsb": {

"codename": "Final",

"description": "CentOS release 6.4 (Final)",

"id": "CentOS",

"major_release": "6",

"release": "6.4"

}

},

"changed": false

}

在其中,可以看到引用变量的方式是使用点的方式,在上例中使用的变量为ansible_lsb,然后取id值,那么就是为ansible_lsb.id的方式。

2、条件使用的组合

在使用条件的时候,可能有很多种组合来进行判断,从而可以使用如下的方式来使用:

[root@ansibleserver kel]# cat conditions.yml

---

- hosts: servers

tasks:

- name: "shutdown centos system"

command: /sbin/reboot

when: (ansible_lsb.id == "CentOS" and ansible_lsb.release == "6.4") or

(ansible_lsb.id == "RedHat" and ansible_lsb.release == "6.4")

在使用when条件语句的时候,可以使用的符号为and,or,然后用括号来包含进去

3、根据结果判断使用执行下一步

- command: /bin/ls

register: result

ignore_errors: True

- command: ifconfig

when: result|failed

- command: /bin/ls

when: result|success

- command: /bin/ls -l

when: result|skipped

此例子中主要是根据使用的条件来进行判断执行下一步的命令,在官方手册上执行成功为succeded,在实际进行测试的时候未success,从而在第一句执行的时候,根据变量result得到相关的结果,从而执行下一步的选择。

4、根据布尔变量来判断执行步骤

在设定一个布尔变量之后,可以根据布尔变量来进行判断下一步执行的步骤,如下所示:

[root@ansibleserver kel]# cat conditions1.yml

---

- hosts: servers

vars:

epic: True

tasks:

- shell: echo "this is epic"

when: epic

- shell: echo "this is not epic"

when: not epic

在这里设置了布尔变量epic,然后根据布尔变量值,来使用哪些步骤执行,哪些步骤不进行执行

5、根据变量是否定义判断执行步骤

当定义了变量的时候执行一个步骤,当未定义变量的时候执行另外一个步骤,如下所示:

---

- hosts: servers

vars:

epic: epic

tasks:

- shell: echo "this is defined {{epic}}"

when: epic is defined

- shell: echo "this is not defined "

when: kel is undefined

6、在每个循环中进行判断定义

---

- hosts: servers

tasks:

- name: do somethings

command: echo {{item}}

with_items: [0,2,4,6,8]

when: item > 5

在使用这种方式的时候,在每个循环中会进行判断,如上例子所示,对items的02468这个集合进行判断,当item的值大于5的时候才会执行这个command

7、在roles中使用条件语句

---

- hosts: servers

tasks:

roles:

- {role: templatecontrol,when ansible_lsb_id == 'CentOS'}

在roles中使用的时候,注意符号的使用,在上面中,使用的单独的role,然后用花括号进行包含起来,然后在role中是用逗号进行条件判断

8、条件导入

[root@ansibleserver kel]# ls -l RedHat.yml os.default.yml CentOS.yml

-rw-r--r-- 1 root root 12 Feb  1 15:42 CentOS.yml

-rw-r--r-- 1 root root 12 Feb  1 15:43 os.default.yml

-rw-r--r-- 1 root root 12 Feb  1 15:42 RedHat.yml

[root@ansibleserver kel]# cat conditions1.yml

---

- hosts: servers

vars_files:

- ["{{ansible_lsb.id}}.yml","os.default.yml"]

tasks:

- name: do somethings

command: echo {{kel}}

[root@ansibleserver kel]# cat CentOS.yml

kel: centos

[root@ansibleserver kel]# cat RedHat.yml

kel: redhat

[root@ansibleserver kel]# cat os.default.yml

kel: defalt

在这个里面,根据条件来导入变量的文件,根据fact作为变量,然后来决定使用哪个变量,从而进行导入变量使用

ansible条件使用--实践的更多相关文章

  1. ansible playbook最佳实践

    本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...

  2. ansible 学习与实践

    title: ansible 学习与实践 date: 2016-05-06 16:17:28 tags: --- ansible 学习与实践 一 介绍 ansible是新出现的运维工具是基于Pytho ...

  3. Ansible条件测试

    本节内容: Ansible条件测试 一.Ansible条件测试 在ansible中还可以进行条件测试.如果需要根据变量.facts或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试. ...

  4. Tidb 离线Ansible方式部署实践

    1.最近浏览到一个比较新的分布式数据库Tidb,开源看起来比较牛的样子,一时手痒就动手试试部署 2.参考官方 Ansible 离线方式部署 :https://pingcap.com/docs-cn/o ...

  5. 011.Ansible条件语句

    一 简介 在有的时候play的结果依赖于变量.fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定如何执行后续的task.这个时候就需要用到条件判断. 条件语 ...

  6. Ansible入门与实践

    一.ansible介绍 Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用.配置.编排task(持续交付.无 ...

  7. ansible管理windows实践

    一.前言 近期打算搞搞自动部署,因为是windows服务器,一些工具和系统支持都不是太好.最后发现ansible比较火,最重要的是他支持windows.本文主要就ansible 在windows使用环 ...

  8. 自动化运维工具Ansible之LNMP实践环境部署

    Ansible-实战指南-LNMP环境部署,并使用zabbix监控 主机规划 系统初始化:必要的系统初始化 基础组件包括:zabbix监控,mariadb(用于存放zabbix监控信息) 业务组件包括 ...

  9. Ansible playbook循环实践总结<一>

    1.标准Loops 标准loops可以直接减少task的次数,如下: [root@zero01 playbook]# vi loops.yaml --- - hosts: all gather_fac ...

随机推荐

  1. ES6入门之函数的扩展

    函数js原有的: 属性:arguments[].caller(调用该函数的引用,注意与callee分别开,callee指的是调用函数本身经常在递归中出现).length(形参个数).prototype ...

  2. DeepLearning常用库简要介绍与对比

    网上近日流传一张DL相关库在Github上的受关注度对比(数据应该是2016/03/15左右统计的): 其中tensorflow,caffe,keras和Theano排名比较靠前. 今日组会报告上tj ...

  3. Mac AppStore下载文件的获取

    有时候希望把在mac AppStore下载的App共享给其他人,但是application里面的都是已经安装的应用,那么如何找到pkg安装文件呢? (后附:注意事项!) 方法一: 1.首先下载一个Ap ...

  4. BZOJ 1878 HH的项链(树状数组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1878 题意:给出一个数列,每次询问区间[L,R]中有多少个不同的数字? 思路: (1)记 ...

  5. 【Todo】深入PHP内核系列

    看到一个<深入PHP内核>系列,Todo: http://www.csdn.net/article/2014-09-15/2821685-exploring-of-the-php [问底] ...

  6. git subtree有效管理公共第三方lib

    如果你的项目中有很多第三方的lib,你希望使用它,并且也希望可能对该lib做修改并且贡献到原始的项目中去,或者你的项目希望模块化,分为几个repo单独维护,那么git subtree就是一个选择.gi ...

  7. 【笨嘴拙舌WINDOWS】设备无关图(*.bmp)

    设备无关图在windows上面就是一个扩展名为.bmp的文件.我们知道每一种文件都是一个二进制流,只是这个二进制流的开头几个字节是规定了文件的格式..bmp的文件格式如下 “其中信息头是windows ...

  8. short s1 = 1; s1 = s1 + 1;和 s1 += 1;

    对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误. 对于shor ...

  9. POJ 1037 (计数 + DP) 一个美妙的栅栏

    这道题总算勉勉强强看懂了,DP和计数都很不好想 DP部分: 称i根木棒的合法方案集合为S(i),第二根木棒比第一根长的方案称作UP方案,反之叫做DOWN方案 C[i][k][DOWN] 是S(i)中以 ...

  10. HDU 1253 (简单三维广搜) 胜利大逃亡

    奇葩!这么简单的广搜居然爆内存了,而且一直爆,一直爆,Orz 而且我也优化过了的啊,尼玛还是一直爆! 先把代码贴上睡觉去了,明天再来弄 //#define LOCAL #include <ios ...