ansible条件使用--实践
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条件使用--实践的更多相关文章
- ansible playbook最佳实践
本篇主要是根据官方翻译而来,从而使简单的翻译,并没有相关的实验步骤,以后文章会补充为实验步骤,此篇主要是相关理论的说明,可以称之为中文手册之一,具体内容如下: Ansible playbooks最佳实 ...
- ansible 学习与实践
title: ansible 学习与实践 date: 2016-05-06 16:17:28 tags: --- ansible 学习与实践 一 介绍 ansible是新出现的运维工具是基于Pytho ...
- Ansible条件测试
本节内容: Ansible条件测试 一.Ansible条件测试 在ansible中还可以进行条件测试.如果需要根据变量.facts或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试. ...
- Tidb 离线Ansible方式部署实践
1.最近浏览到一个比较新的分布式数据库Tidb,开源看起来比较牛的样子,一时手痒就动手试试部署 2.参考官方 Ansible 离线方式部署 :https://pingcap.com/docs-cn/o ...
- 011.Ansible条件语句
一 简介 在有的时候play的结果依赖于变量.fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定如何执行后续的task.这个时候就需要用到条件判断. 条件语 ...
- Ansible入门与实践
一.ansible介绍 Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用.配置.编排task(持续交付.无 ...
- ansible管理windows实践
一.前言 近期打算搞搞自动部署,因为是windows服务器,一些工具和系统支持都不是太好.最后发现ansible比较火,最重要的是他支持windows.本文主要就ansible 在windows使用环 ...
- 自动化运维工具Ansible之LNMP实践环境部署
Ansible-实战指南-LNMP环境部署,并使用zabbix监控 主机规划 系统初始化:必要的系统初始化 基础组件包括:zabbix监控,mariadb(用于存放zabbix监控信息) 业务组件包括 ...
- Ansible playbook循环实践总结<一>
1.标准Loops 标准loops可以直接减少task的次数,如下: [root@zero01 playbook]# vi loops.yaml --- - hosts: all gather_fac ...
随机推荐
- Oracle ->> 行转列, 列转行
除了Pivot和Unpivot这两个函数,还有像CASE WHEN + 聚合函数像MAX,SUM这类的来完成.今天发现Oracle下居然有这样一个和SQL SERVER 2012以后新增的新函数叫II ...
- 使用ExtJs实现文件下载
文件下载,是不可以直接通过Ext.Ajax.Request来实现的.一般的,可以通过创建一个隐藏的form表单来实现.具体代码以及代码注释如下: if (!Ext.fly('downForm')){ ...
- 超大整数运算算法——为RSA加密算法提供运算工具
/* program: Large integer operations * Made by: Daiyyr * date: 2013/07/09 * This software is licen ...
- MongoDB安装Windows服务
由于官方下载较慢.这里提供一个个人百度共享网盘地址: http://pan.baidu.com/s/1mhHW0nI mongodb-win32-x86_64-3.2.3 使用以下命令将MongoDB ...
- 《c程序设计语言》读书笔记--每行一个单词打印输入的字符,除去空符
#include <stdio.h> int main() { int c; while((c = getchar()) != EOF) { if(c != '\n' && ...
- Data.gov.uk电子政务云,牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践
牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践 我是牛津互联网研究院的研究员,是英国开放互联网的一个主要的研究机构和相关政策制订的一个机构.今天主要给大家介绍一下英国数据治理的一些现状和实践 ...
- Toad
1. Toad 规矩: toad 不会违反, 限制, 扩大 你当前用户的权限, toad 不会影响你定义的关于instance的内容. 2. toad 可以执行大部分在 sql*plus 中执行的命令 ...
- LA 3177 长城守卫
n为偶数的时候比较简单,就是相邻两个守卫的礼物和的最大值. 首先这是个下限,其次这个值也满足题目要求,所以这就是答案了. 当n为奇数的时候上限是守卫索要礼物的最大值的三倍. 这也很容易理解,比如n=5 ...
- 基于Flume的美团日志收集系统(一)架构和设计
美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...
- Codeforces 424 B Megacity【贪心】
题意:给出城市(0,0),给出n个坐标,起始人数s,每个坐标k个人, 每个坐标可以覆盖到半径为r的区域,r=sqrt(x*x+y*y)的区域,问最小的半径是多少,使得城市的总人数大于等于1000000 ...