ansible 学习之变量
参考文档: http://www.ansible.com.cn/docs/playbooks_variables.html#variables
合法的变量
ansible变量是有数字,字母,下划线组成并且变量始终应该以字母开头。
“foo_port”是个合法的变量名.”foo5”也是. “foo-port”, “foo port”, “foo.port” 和 “12”则不是合法的变量名.
在Inventory文件中创建变量
例如:
定义主机变量:
192.168.0.132 ansible_user="root" ansible_password="123456" ansible_port=22 ansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
这里变量使用了:
ansible_user
ansible_password
ansible_port
ansible_ssh_common_args
编写ansible-playbook 调用debug模块打印变量:
ansible-playbook 代码如下:
---
- hosts: 192.168.0.132tasks:- name: variable testdebug:msg:ansible_user: "{{ ansible_user }}"ansible_password: "{{ ansible_password }}"ansible_port: "{{ ansible_port }}"ansible_ssh_common_args: "{{ ansible_ssh_common_args }}"
运行效果:
[root@localhost ~]# ansible-playbook playbook.yaml PLAY [192.168.0.132] ****************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]TASK [variable test] ****************************************************************************************************************************************
ok: [192.168.0.132] => {"msg": {"ansible_password": 123456, "ansible_port": 22, "ansible_ssh_common_args": "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null", "ansible_user": "root"}
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
定义组变量:
[client]
192.168.0.132[client:vars]
`ntp_server`=ntp.aliyun.com
编写ansible-playbook 调用debug模块打印变量:
ansible-playbook 代码如下:
---
- hosts: clienttasks:- name: variable testdebug:msg:ntp_server: "{{ ntp_server }}"
运行效果:
[root@localhost ~]# ansible-playbook playbook.yaml PLAY [client] ***********************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]TASK [variable test] ****************************************************************************************************************************************
ok: [192.168.0.132] => {"msg": {"ntp_server": "ntp.aliyun.com"}
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在playbook中定义变量
使用 var 关键字定义变量:
定义全局变量:
---
- hosts: 192.168.0.132vars:var1: 123456var2: 654321tasks:- name: Use varsdebug:msg: var1: "{{ var1 }}"var2: "{{ var2 }}"
运行效果:
[root@localhost ~]# ansible-playbook playbook.yaml PLAY [192.168.0.132] ****************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]TASK [Use vars] *********************************************************************************************************************************************
ok: [192.168.0.132] => {"msg": {"var1": 123456, "var2": 654321}
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
创建局部变量:
---
- hosts: 192.168.0.132tasks:- name: Local variablevars:Local_var1: "Local variable"debug:msg: "This is a local variable : {{ Local_var1 }}"
运行结果同上。。。
使用文件创建变量
使用vars_files 关键字引入外部变量文件:
变量使用 key/value 格式,一行一个
[root@localhost ~]# cat vars.yml
var1: 123456
playbook文件内容如下:
[root@localhost ~]# cat playbook.yaml
---
- hosts: 192.168.0.132vars_files:- vars.ymltasks:- name: Use vars from filedebug:msg: var1: "{{ var1 }}"
如何
vars.yml在本地就不需要指定路径,如果路径不在本地,就需要指定路径
运行结果:
[root@localhost ~]# ansible-playbook playbook.yaml PLAY [192.168.0.132] ****************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]TASK [Use vars from file] ***********************************************************************************************************************************
ok: [192.168.0.132] => {"msg": {"var1": 123456}
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在命令行中使用-e或--extra-vars选项传递变量
playbook代码如下:
从命令行中传入var 变量
[root@localhost ~]# cat playbook.yaml
---
- hosts: 192.168.0.132tasks:- name: Use vars from filedebug:msg: var: "{{ var }}"
[root@localhost ~]# ansible-playbook playbook.yaml -e "var=value"PLAY [192.168.0.132] ****************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]TASK [Use vars from file] ***********************************************************************************************************************************
ok: [192.168.0.132] => {"msg": {"var": "value"}
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
传入多个变量需要改动playbook代码如下:
---
- hosts: 192.168.0.132tasks:- name: Use vars from filedebug:msg: var1: "{{ var1 }}"var2: "{{ var2 }}"
[root@localhost ~]# ansible-playbook playbook.yaml -e "var1=value2 var2=value2"PLAY [192.168.0.132] ****************************************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]TASK [Use vars from file] ***********************************************************************************************************************************
ok: [192.168.0.132] => {"msg": {"var1": "value2", "var2": "value2"}
}PLAY RECAP **************************************************************************************************************************************************
192.168.0.132 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
使用
--extra-vars传输变量:
传入单个变量:ansible-playbook your-playbook.yml --extra-vars '{"var": "value"}'传入多个变量:
ansible-playbook your-playbook.yml --extra-vars '{"var1": "value1", "var2": "value2"}'
变量的优先级
- extra vars (在命令行中使用 -e)优先级最高
- 然后是在inventory中定义的连接变量(比如ansible_ssh_user)
- 接着是大多数的其它变量(命令行转换,play中的变量,included的变量,role中的变量等)
- 然后是在inventory定义的其它变量
- 然后是由系统发现的facts
- 然后是 “role默认变量”, 这个是最默认的值,很容易丧失优先权
相关文章:
ansible 学习之变量
参考文档: http://www.ansible.com.cn/docs/playbooks_variables.html#variables 合法的变量 ansible变量是有数字,字母,下划线组成并且变量始终应该以字母开头。 “foo_port”是个合法的变量名.”foo5”也是. “foo-port”, “foo port”, …...
【知识科普】Markdown语法内容看这一篇就够了
文章目录 1. 标题2. 段落3. 字体4. 分隔线5. 删除线6. 列表7. 区块引用8. 代码11. HTML元素12. 特殊字符13. 数学公式14. 其他高级技巧 Markdown是一种轻量级标记语言,其排版语法简洁,让人们能更多地关注内容本身而非排版。以下是对Markdown语法的详细解…...
什么是智能合约?
什么是智能合约? 智能合约,就是一段写在区块链上的代码,一旦某个事件触发合约中的条款,代码即自动执行。也就是说,满足条件就执行,不需要人为操控、不需要第三方信任。区块链的安全性和不可篡改性…...
Oracle低代码平台apex介绍
Oracle APEX(Application Express)是一个强大的低代码开发平台,它允许开发者快速构建企业级Web应用程序。该平台基于Oracle数据库,并充分利用了数据库的功能来提供安全、可扩展且易于维护的应用程序。 什么是Oracle APEX…...
【读书笔记·VLSI电路设计方法解密】问题12:制造MOSFET晶体管的主要工艺步骤是什么
VLSI芯片是在半导体材料上制造的,这种材料的导电性介于绝缘体和导体之间。通过一种称为掺杂的工艺引入杂质,可以改变半导体的电气特性。能够在半导体材料的细小且定义明确的区域内控制导电性,促使了半导体器件的发展。结合更简单的无源元件(电阻、电容和电感),这些器件被…...
内存分析工具的使用——AddressSanitizer
一、c/c中的内存问题 memory corruption,内存崩溃或者说内存损坏。在c/c程序中,有相当一部分的Bug是由内存引起的,也就是刚刚提到的内存崩溃。说得再通俗一些,往往和内存的非法访问有关。内存问题,轻则导致程序失能&a…...
linux使用nmcli 管理wifi的命令
在 Linux 系统中,nmcli 是 NetworkManager 的命令行工具,常用于管理网络连接,包括 WiFi。下面是一些常见的使用 nmcli 管理 WiFi 的命令。 1. 显示所有可用的 WiFi 网络 nmcli dev wifi list这个命令会列出当前可以扫描到的 WiFi 网络及其信…...
deepin20.9安装部署 |deepin20.9镜像下载 |基本命令 |手动分区 |开启远程ssh服务
下载deepin20.9 .iso 阿里云 https://mirrors.aliyun.com/deepin-cd/20.9/deepin-desktop-community-20.9-amd64.iso 注意安装过程略 小白参考 : Centos 7.9 安装 图解版 小白必看 最新_centos7.9-CSDN博客文章浏览阅读2.4k次,点赞34次,…...
使用PL/SQL Deverloper过程遇见的问题
目录 背景: ORA-01031权限问题: PL/SQL Deverloper显示Oravle中存在的所有表: PL/SQL Deverloper优点: 背景: PL/SQL Developer是由Allround Automations公司开发的一款集成开发环境(IDE),它专门面向Oracle数据库存储的程序单元的开发。随着越来越多…...
pikachu靶场总结(三)
五、RCE 1.RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的…...
onvif相关的http api有哪些功能点
ONVIF 提供了一系列 HTTP API,用于访问和控制支持 ONVIF 的设备。这些 API 基于 SOAP 协议,通过 HTTP 协议传输。主要的 API 分为几个关键的服务类别,每个类别都有特定的操作。以下是 ONVIF 相关的 HTTP API 概述: 1. 设备管理服…...
AI大模型是如何改变我们的日常生活的?
随着AI大模型的不断发展和优化,它已经在各个领域展现出了巨大的潜力和广泛的应用。无论是在科技创新、医疗健康、金融服务、教育培训还是日常生活中,AI大模型都有着重要的作用。它不仅可以帮助人们提高工作效率、提供个性化的服务,还能够改善…...
kubernetes部署Nexus(Helm3)
参考文献: https://help.sonatype.com/en/single-data-center-on-premises-deployment-example-using-kubernetes.htmlhttps://github.com/sonatype/helm3-chartshttps://support.sonatype.com/hc/en-us/articles/7706583820691-How-to-install-Nexus-Pro-instance…...
PDF无法导出中文
font/SIMSUN.TTC with Identity-H is not recognized. 查看BaseFont源码发现".ttc," 改为"SIMSUN.TTC,a"提示数字转换异常 改为"SIMSUN.TTC,11"提示数字索引必须介于0和1之间 改为0或1结果正常 BaseFont baseFont BaseFont.createFont("/U…...
【docker】mysql8.0 的 docker 安装
安装 指定mysql 的安装版本8.0.18 拉取镜像 docker pull mysql:8.0。18创建目录 mkdir -p /opt/docker_volumn/mysql/conf mkdir -p /opt/docker_volumn/mysql/log mkdir -p /opt/docker_volumn/mysql/data mkdir -p /opt/docker_volumn/mysql/mysql-files此步骤是为了将容…...
vue3中父组件与子组件关系的理解 ------类比java中的启动类,类,对象等概念来解释一下
编程时的一点感受: 感觉子组件本身像是java的一个类,父组件像是启动类,父组件里引用子组件像是创建子组件的对象 查找资料后,发现确实如此,在很多方面,Vue 组件确实可以与面向对象编程中的类进行类比。…...
Java设计模式——装饰模式
目录 模式动机 模式定义 模式结构 类图 代码分析 示例:动态添加功能的流 组件接口 具体组件 装饰抽象类 具体装饰类 客户端 模式分析 核心思想 动态扩展功能 组合优于继承 优点 动态扩展功能 组合优于继承 代码复用性高 符合开闭原则 缺点 增加…...
【TouchSocket 和 client.GetStream 区别】
TouchSocket 和 client.GetStream() 是用于网络通信的不同工具和方法,但它们的功能层面和适用范围也有明显区别。下面我来详细解释 TouchSocket 和 client.GetStream() 的差异。 1. TouchSocket TouchSocket 是一个完整的 网络通信框架,专注于为开发者…...
怎么利用商品详情API接口实现数据获取与应用?
在当今数字化的商业时代,高效获取和利用商品数据对于企业和开发者来说至关重要。商品详情 API 接口为我们提供了一种便捷的方式来获取丰富的商品信息,从而实现各种有价值的应用。本文将深入探讨如何利用商品详情 API 接口实现数据获取与应用。 一、商品…...
【AGC005D】~K Perm Counting(计数抽象成图)
容斥原理。 求出f(m) ,f(m)指代至少有m个位置不合法的方案数。 怎么求? 注意到位置为id,权值为v ,不合法的情况,当且仅当 v idk或 v id-k 因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
