2. ansible-playbook 条件语句-内部变量使用
内部变量指的是把变量定义在playbook里面或者是执行结果作为变量
循环语句-标准Loops
[root@LeoDevops playb]# cat p_loop.yaml
- hosts: u12
gather_facts: False
tasks:
- name: debug loops
debug: msg="name -------> {{ item }}"
with_items:
- one
- two
运行结果如下:
[root@LeoDevops playb]# ansible-playbook p_loop.yaml
PLAY [u12] ************************************************************************************************************************************************************************************
TASK [debug loops] ****************************************************************************************************************************************************************************
ok: [192.168.93.137] => (item=one) => {
"changed": false,
"item": "one",
"msg": "name -------> one"
}
ok: [192.168.93.137] => (item=two) => {
"changed": false,
"item": "two",
"msg": "name -------> two"
}
PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.137 : ok=1 changed=0 unreachable=0 failed=0
当然也支持字典格式的数据对于要循环的内容
[root@LeoDevops playb]# cat p_loop.yaml
- hosts: u12
gather_facts: False
tasks:
- name: debug loops
debug: msg="key--> {{ item.key }} value ---> {{ item.value }}"
with_items:
- {"key":"name","value":"one"}
- {"key":"name","value":"two"}
- {"key":"name","value":"three"}
- {"key":"name","value":"four"}
嵌套循环loop
[root@LeoDevops playb]# cat p_iframe_loop.yaml
- hosts: u12
gather_facts: False
tasks:
- name: debug loops
debug: msg="name --> {{ item[0] }} value ---> {{ item[1] }}"
with_nested:
- [1]
- ['a','b','c']
执行效果如下:
[root@LeoDevops playb]# ansible-playbook p_iframe_loop.yaml
PLAY [u12] ************************************************************************************************************************************************************************************
TASK [debug loops] ****************************************************************************************************************************************************************************
ok: [192.168.93.137] => (item=[1, u'a']) => {
"changed": false,
"item": [
1,
"a"
],
"msg": "name --> 1 value ---> a"
}
ok: [192.168.93.137] => (item=[1, u'b']) => {
"changed": false,
"item": [
1,
"b"
],
"msg": "name --> 1 value ---> b"
}
ok: [192.168.93.137] => (item=[1, u'c']) => {
"changed": false,
"item": [
1,
"c"
],
"msg": "name --> 1 value ---> c"
}
PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.137 : ok=1 changed=0 unreachable=0 failed=0
散列loops
散列loops比标准的loops就是变量支持更丰富的数据结构,比如标准的loops的最外层数据必须是Python 的List数据类型,而散列loops直接支持YAML格式的数据变量。例如下面的简单例子:
[root@LeoDevops playb]# cat p-sanlieloop.yaml
- hosts: u12
gather_facts: False
vars:
users:
yq:
name: yq
shell: bash
ljf:
name: ljf
shell: bash
tasks:
- name: test for sanlie loop
debug: msg="name --> {{ item.key }} value --> {{ item.value.name }} shell ---> {{ item.value.shell }}"
with_dict: users
文件匹配loops
针对一个目录下制定格式的文件进行处理,这个时候直接使用with_fileglob循环去匹配我们需要处理的文件即可。
[root@LeoDevops playb]# cat p-fileloop.yaml
- hosts: u12
gather_facts: False
tasks:
- name: debug file loop
debug: msg="files ---> {{ item }}"
with_fileglob:
- /tmp/playb/*.yaml
随机选择loops
随机数
[root@LeoDevops playb]# cat p-randomloop.yaml
- hosts: u12
gather_facts: False
tasks:
- name: debug loops
debug: msg="name -->> {{ item }}"
with_random_choice:
- "a1"
- "a2"
- "a3"
- "a4"
条件判断loops
有时候task执行一个task后,我们需要检测这个task的结果是否达到了预想状态,如果没有达到我们预想的状态,那么就需要退出整个playbook执行,那么这个时候我们就需要对某个task结果一直循环检测了。
[root@LeoDevops playb]# cat p-conditionloop.yaml
- hosts: u12
tasks:
- name: debug loop
shell: hostname
register: pwd
until: pwd.stdout.startswith("LeoTestMachine") # stdout与stdout_lines是不一样的,这个要注意哦
retries: 3 # 重复3次
delay: 2 # 间隔2秒
文件优先匹配
[root@LeoDevops playb]# cat p-filefilter.yaml
- hosts: u12
gather_facts: True
tasks:
- name: debug codes
debug: msg="files --->{{ item }}"
with_first_found:
- "{{ ansible_distribution }}.yaml"
- "default.yaml"
register Loops
register不但用于task直接互相传递数据,也可以吧register用在单一的task中进行变量临时存储,并且可以接受多个task结果当做变量临时存储。
[root@LeoDevops playb]# cat register_loops.yaml
- hosts: u12
gather_facts: True
tasks:
- name: debug loops
shell: "{{ item }}"
with_items:
- hostname
- uname
register: ret
- name: display loops
debug: msg="{% for i in ret.results %}--->{{ i.stdout }}{% endfor %}"
执行多个task并且register给一个变量时,它的数据就和平常的不一样了,就需要使用jinja2语法显示出来
2. ansible-playbook 条件语句-内部变量使用的更多相关文章
- Ansible的条件语句
此篇主要讲述的ansible的condition,主要是用条件进行一些判断,此篇为官方文档的翻译,没有进行相关的测试,后续会写入相关的测试. Ansible的条件语句 1. 前言 在有的时候pl ...
- ansible之条件语句when
注册变量: 变量的另一个用途是将一条命令的运行结果保存到变量中,供后面的playbook使用.例如: - hosts: webservers tasks: - shell: /usr/bin/foo ...
- ansible 之条件语句 when
注册变量: 变量的另一个用途是将一条命令的运行结果保存到变量中,供后面的playbook使用.例如: - hosts: webservers tasks: - shell: /usr/bin/foo ...
- Ansible14:Playbook条件语句
目录 简介 when关键字 1. when基本使用 2. 比较运算符 3. 逻辑运算符 条件判断与tests 判断变量 判断执行结果 判断路径 判断字符串 判断整除 其他tests 条件判断与bloc ...
- 3 ansible-playbook 条件语句-外部变量使用
外部变量指的是从playbook文件之外获取的数值 lookups file file是我们经常使用的一种lookups的方式,它的原理就是使用python的codecs.open打开文件然后把结果返 ...
- Ansible Playbook handlers 语句
handlers 用法如下,表示当 tasks 执行成功之后再执行 handlers,相当于 shell 中的 && 用法,如果 tasks 执行失败是不会执行 handlers 语句 ...
- ansible playbook详解
ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法 语法 描述 缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键 ...
- Linux就该这么学--Shell脚本条件语句(二)
1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...
- Azure Terraform(十)利用 Azure DevOps 的条件语句选择发布环境
一,引言 之前我讲过的所有的案例中,都是将整个Azure Resource 部署到同一个订阅下,没有做到灵活的在 Azure Pipeline 在运行前选择需要部署的环境.在实际的项目开发中,我们也会 ...
随机推荐
- MySQL(八)
与python交互 安装引入模块 安装mysql模块 sudo apt-get install python-mysql 在文件中引入模块 import Mysqldb Connection对象 用于 ...
- Mybatis Hibernate->MyBatis
Hibernate对JDBC的封装程度比较高,不需要编写SQL(Structured Query Language)语句,只要使用HQL(Hibernate Query Language)语言就可以了 ...
- 三行代码辨别PS
三行代码辨别PS 博主的好友动态和朋友圈经常出现各种图片,博主很想知道这些图片有没有经过PS,于是选择了技术流-- 代码 先放代码为敬,返回结果为TRUE表示进行过PS. isPS.py #!/usr ...
- 【数位dp】Beautiful Numbers @2018acm上海大都会赛J
目录 Beautiful Numbers PROBLEM 题目描述 输入描述: 输出描述: 输入 输出 MEANING SOLUTION CODE Beautiful Numbers PROBLEM ...
- 【倍增】T-shirt @2018acm徐州邀请赛 I
问题 I: T-shirt 时间限制: 1 Sec 内存限制: 64 MB 题目描述 JSZKC is going to spend his vacation! His vacation has N ...
- dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- 硬件工程师必会电路模块之MOS管应用
实际工程应用中常用的MOS管电路(以笔记本主板经典电路为例): 学到实际系统中用到的开关电路模块以及MOS管非常重要的隔离电路(结合IIC的数据手册和笔记本主板应用电路): MOS管寄生体二极管,极性 ...
- VMWare 下安装 MSDN版 MS-DOS 6.22
最近有些怀旧,刚从孔夫子旧书网淘回一本<Borland 传奇>,里面讲到了很多DOS时代的经典软件,特别想尝试一下~比如:Turbo Pascal.SideKick.Borland C/C ...
- Centos如何安装163yum源
如果Centos使用系统自带的yum源,在用yum进行安装的时候,速度会受到限制,所以我们需要替换为国内的yum源,一般会选择163源,速度比较快包也比较全,使用yum进行安装的时候可以大大节省时间 ...
- angular 2 - 002 - 基本概念和使用
service的注入, 注入的是service的单一实例