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 因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...

Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...

五、jmeter脚本参数化
目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...

【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练
本项目提出了ContentV框架,通过三项关键创新高效加速基于DiT的视频生成模型训练: 极简架构设计,最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略,利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...