3 ansible-playbook 条件语句-外部变量使用
外部变量指的是从playbook文件之外获取的数值
lookups file
file是我们经常使用的一种lookups的方式,它的原理就是使用python的codecs.open打开文件然后把结果返回给变量,请看例子
[root@LeoDevops playb]# cat lookups_file.yaml
- hosts: u12
gather_facts: False
vars:
contents: "{{ lookup('file','/etc/sysconfig/network') }}"
tasks:
- name: debug file lookup
debug: msg="the content is {% for i in contents.split('\n') %} ,{{ i }} {% endfor %} "
执行结果如下:
[root@LeoDevops playb]# ansible-playbook lookups_file.yaml
PLAY [u12] ************************************************************************************************************************************************************************************
TASK [debug file lookup] **********************************************************************************************************************************************************************
ok: [192.168.93.137] => {
"msg": "the content is ,NETWORKING=yes ,HOSTNAME=LeoDevops "
}
PLAY RECAP ************************************************************************************************************************************************************************************
192.168.93.137 : ok=1 changed=0 unreachable=0 failed=0
lookup password
对传入的内容加密处理
[root@LeoDevops playb]# cat lookup_passwd.yaml
- hosts: u12
gather_facts: False
vars:
contents: "{{ lookup('password','ansible_book') }}"
tasks:
- name: debug lookups
debug: msg="true contents is {{ contents }}"
lookups pipe
pipe lookups的实现原理很简单,其实调用的是subprocess.Popen执行的
[root@LeoDevops playb]# cat lookup_pipe.yaml
- hosts: u12
gather_facts: False
vars:
contents: "{{ lookup('pipe','date +%F') }}"
tasks:
- name: debug lookups
debug: msg="the content is {% for i in contents.split('\n') %} -- {{ i }} {% endfor %}"
lookups redis_kv
redis_kv是从redis数据库中get数据,依赖于python的redis库,
[root@LeoDevops playb]# cat redis_k.yaml
- hosts: u12
gather_facts: False
vars:
contents: "{{ lookup('redis_kv','redis://localhost:6379,resource_usage_rate') }}"
tasks:
- name: get_redis_k
debug: msg="the content is {% for i in contents.split('\n') %} --->{{ i }}{% endfor %}"
lookups template
template 跟file方式有点类似,都是读取文件,但是template在读取文件之前需要把jinja模板渲染完成后再读取,
[root@LeoDevops playb]# cat lookup_template.yaml
- hosts: u12
gather_facts: True
vars:
contents: "{ lookup('template','./hehe.conf' }"
tasks:
- name: debug lookup
#debug: msg="teht contents is {% for i in contents.split('\n') %} -->{{ i }} {% endfor %}"
debug: msg="teht contents is {{ contents }}"
[root@LeoDevops playb]# cat hehe.conf
work_process: {{ ansible_processor_cores }}
ip_addr: {{ ansible_default_ipv4.address }}
3 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 ...
- 2. ansible-playbook 条件语句-内部变量使用
内部变量指的是把变量定义在playbook里面或者是执行结果作为变量 循环语句-标准Loops [root@LeoDevops playb]# cat p_loop.yaml - hosts: u12 ...
- 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 在运行前选择需要部署的环境.在实际的项目开发中,我们也会 ...
随机推荐
- hihocoder1148 February 29(区间闰年计数)
hihocoder1148https://hihocoder.com/problemset/problem/1148 因为题目没有给范围,我本来是这么写的. ; i <= ; i++){ ==& ...
- [转载]理解 Git 分支管理最佳实践
原文 理解 Git 分支管理最佳实践 Git 分支有哪些 在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途. 分支分类 根据生命周期区分 主分支:master,deve ...
- Arcmap内容列表刷新
Arcmap内容列表刷新ILayer pLayer = pFDOGLayer as ILayer; if (!pLayer.Visible) ...
- ASP.NET微信公众号获取AccessToken
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.acces ...
- 更新 app 操作过期提示
增加的操作过期提示,再让用户选择是否登录,登录成功后自动返回上一次操作的面页
- 最课程阶段大作业06:U度节能平台控制系统
除了互联网项目,当今社会还有一个概念非常流行,那就是:物联网.什么是物联网?物联网是通过传感设备,按约定的协议,把任意物品与互联网相连接,进行信息交换和通信,以实现智能化识别.定位.跟踪.监控和管理的 ...
- iOS 获取IP
#import <ifaddrs.h> //获取IP #import <arpa/inet.h> //只能获取WIFI下的IP地址 + (NSString *)getIPAdd ...
- Lombok 使用攻略
1. Lombok 简介 Lombok 可以通过简单的注解来帮助我们简化消除一些必须有但显得很臃肿的Java代码,通过使用对应的注解,可以在编译源码的时候生成对应的方法. Lombok 既是一个 ID ...
- Java编译过程(传送门)
我不是要做一门编程语言,了解这个对我现在的工作也没什么帮助,纯粹好奇而已. 传送门
- 哪些 Python 库让你相见恨晚?【转】
原文链接:https://www.zhihu.com/question/24590883/answer/92420471 原文链接:Python 资源大全 ---------------- 这又是一个 ...