Ansible常用变量【下】

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


前言

在上一篇文章《Ansible常用变量【上】》中,学习了Ansible常用变量的前半部分,放了个五一假,继续学习Ansible常用变量的后半部分:

1. 模版中使用变量——在模版文件中使用自定义变量和系统变量;

2. 注册变量——把任务的运行结果作为一个变量来使用;

3. 额外变量——为了使playbook更灵活,通用性更强,允许用户在执行playook时传入变量的值,这时候就需要用到“额外变量”。

1. 模版中使用变量

在template模版文件中使用变量可以使用Facts系统变量,也可以使用用户自定义的变量。

1.1 在模版文件中引用系统变量

1)创建一个jinja2文件:

[root@test101 ansible-test]# cat template.vars-test.j2
my ip is: {{ ansible_host }}
my hostname is: {{ ansible_nodename }}
[root@test101 ansible-test]# 

2)创建yaml文件:

[root@test101 ansible-test]# cat test.yaml
---
- name: Example Playbook with Template(Fcts)hosts: allgather_facts: yes  #使用的系统变量,这里需要设置为yesvars:ip: "ip"hostname: "hostname"tasks:- name: description of hosttemplate:src: template.vars-test.j2dest: /tmp/host.txt
[root@test101 ansible-test]#

3)执行playbook:

ansible-playbook test.yaml

执行效果:

1.2 在模板文件中使用自定义变量

在模版文件中也可以使用自定义变量,例如:

1)创建一个j2文件:

[root@test101 ansible-test]# cat template.vars-test.j2
name: "sre"
age: "18"
other:height: "155"hobby: "work"
[root@test101 ansible-test]#

2)创建一个yaml文件:

[root@test101 ansible-test]# cat test.yaml
---
- name: Example Playbook with Templatehosts: allgather_facts: novars:name: "name"age: "age"other:height: "height"hobby: "hobby"tasks:- name: description of sretemplate:src: template.vars-test.j2dest: /tmp/sre.txt
[root@test101 ansible-test]#

3)执行文件:

ansible-playbook test.yaml

执行效果:

2. 注册变量

有些场景下会需要把执行结果注册到变量中,然后在后面的任务中可调用,这时候就需使用关键字register。

例如,创建一个yaml:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Ansible playbook with registered variablehosts: allgather_facts: notasks:- name: my testshell: echo "This is SRE's test"register: my_test_output- name: echo the result of "my test"debug:msg: "The output of 'my test' was '{{ my_test_output.stdout }}.'"
[root@test101 ansible-test]#

执行命令:

ansible-playbook test.yaml

执行效果:

3. 额外变量

有时为了让playbook的使用更加灵活,更具有通用性,会允许用户在执行playbook的时候传入变量的值,这时候就需要用到“额外变量”。

3.1 无初始值自定义变量

有时候在yaml文件中只定义变量,没有默认值,等待用户执行yaml时传参。

例如,创建一个yaml文件:

[root@test101 ansible-test]# cat test.yaml 
---
- name: my custom_variable testhosts: "{{ hosts }}"  #设置第一个变量gather_facts: novars:custom_variable: "{{ custom_command_variable }}"   #设置第二个变量tasks:- name: echo variable msgdebug:msg: "{{ custom_variable }}"
[root@test101 ansible-test]#

传参执行yaml,有三种方式:

① 普通格式传参执行:

ansible-playbook test.yaml --extra-vars "hosts=all custom_command_variable='this is a test of custom variable'"

② 使用json格式传参执行:

ansible-playbook test.yaml --extra-vars "{'hosts':'all', 'custom_command_variable':'this is a test of custom variable'}"  

③ 将参数放在文件中引用传参执行:

[root@test101 ansible-test]# ll
total 8
-rw-r--r-- 1 root root 229 May 11 08:49 test.yaml
-rw-r--r-- 1 root root  85 May 11 08:57 vars-test.json   #创建参数json文件
[root@test101 ansible-test]# 
[root@test101 ansible-test]# cat vars-test.json    #文件内容
{"hosts":"all","custom_command_variable":"this is a test of custom variable"
}
[root@test101 ansible-test]# 
[root@test101 ansible-test]# ansible-playbook test.yaml --extra-vars "@vars-test.json"   #执行命令引用文件传参

执行结果:

3.2 用传参覆盖变量原有值

有些场景下定义了变量之后,会给变量设置一个初始值,这时候如果再传参进去,就会将原有的初始值覆盖掉。

例如,创建一个yaml文件:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Test playbook with custom variableshosts: allgather_facts: novars:custom_message: "Hello, SRE"  #设置参数值tasks:- name: Display custom messagedebug:msg: "{{ custom_message }}"  #参数调用
[root@test101 ansible-test]#

传参执行yaml文件:

ansible-playbook test.yaml  --extra-vars "custom_message='This is a new message'

执行效果:

最后打印的不是变量的初始值,而是执行yaml时传进去的参数值。但如果在模板文件中,j2文件中的变量值优先级会高于执行命令时传的参数。

3.3 在模板文件中使用额外变量

1)创建一个jinja2文件:

[root@test101 ansible-test]# cat template.vars-test.j2 
name: {{ name }}
age: {{ age }}
other:height: {{ height }}hobby: {{ hobby }}
[root@test101 ansible-test]#

2)创建一个执行的yaml文件:

[root@test101 ansible-test]# cat test.yaml 
---
- name: Example Playbook with Templatehosts: allgather_facts: novars:name: "name"age: "age"other:height: "height"hobby: "hobby"tasks:- name: description of sretemplate:src: template.vars-test.j2dest: /tmp/sre.txt
[root@test101 ansible-test]#

3)执行yaml文件:

ansible-playbook test.yaml --extra-vars "name=sre age=18 height=155 hobby=work"

执行效果:

感谢您的喜爱与分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

买货查窜货过程中的可能情况

控价除了要管控渠道中的低价、乱价链接外,还可能需要解决窜货问题,当窜货问题蔓延不及时解决时,渠道会越来越受影响,所以治理窜货也是控价过程中很重要的一步,窜货问题的治理多通过买货溯源来解决,买货要先…

点云分割论文阅读01--FusionVision

FusionVision: A Comprehensive Approach of 3D Object Reconstruction and Segmentation from RGB-D Cameras Using YOLO and Fast Segment Anything FusionVision:使用 YOLO 和 Fast Segment Anything 从 RGB-D 相机重建和分割 3D 对象的综合方法 toread&#x…

拥有一台服务器可以做哪些有趣又实用的事情?

在接触云服务器这个概念你以前,你是不是在想: 可能是,云服务器,这个产品的存在,它可以为你做些什么实用的事情吗? 或者是,云服务器这个看似高大上的科技产品,其实可以为我们的生活…

JVM 自定义类加载器

文章目录 1. 为什么要自定义类加载器1.1 隔离加载类1.2 修改类加载的方式1.3 扩展加载源1.4 防止源码泄漏 2. 自定义类加载器应用场景有哪些3. 两种实现方式 自定义类加载器是Java中的一个高级特性,允许您在运行时动态加载类。通过自定义类加载器,您可以…

论文翻译及部分笔记:LANDMARC: Indoor Location Sensing Using Active RFID

LANDMARC: Indoor Location Sensing Using Active RFID 摘要 移动计算设备和嵌入式技术的日益融合引发了“上下文感知”应用的发展和部署,其中位置是最重要的上下文。在本文中,我们介绍了一种名为LANDMARC的定位感知原型系统,该系统使用射频识…

在云计算与人工智能中,7ECloud扮演着什么样的角色

数据驱动的时代,云计算和人工智能已成为推动现代科技进步的两大引擎。作为一家专注于云计算的公司,7ECloud正是在这个领域发挥自己的力量,力图为企业提供一站式解决方案,并拥有来自厂家的源头支持,用极其低的价格助力企…

QT day5 作业

服务器头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QList> //链表类 #include <QMessageBox> //消息对话框类 #include <QDebu…

vscode无法连接 , .vscode-server版本问题

vscode无法连接 &#xff0c; .vscode-server版本问题 解决办法 &#xff1a; 查看自己的版本号 2. 两边vscode版本号需要一致 找一台vscode可以远程连接的&#xff0c; 将它的.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a 传到 远程服务器上 或者 本地的…

VTK 数据类型:vtkUnstructuredGrid

VTK 数据类型&#xff1a;vtkUnstructuredGrid VTK 数据类型&#xff1a;vtkUnstructuredGridVTK 中数据类型的继承关系常用的几何类型实例&#xff1a;vtkHexahedron 和 vtkTetra VTK 数据类型&#xff1a;vtkUnstructuredGrid 非结构化点是在空间中离散随意分布的点&#xf…

【数据可视化01】matplotlib实例介绍2

目录 一、引言二、实例介绍1.箱线图2.热力图3.3D图 一、引言 接着上一文章【数据可视化01】matplotlib实例介绍1继续介绍matplotlib的实例。 二、实例介绍 在matplotlib中&#xff0c;常用的图形类型包括&#xff1a; 箱线图&#xff08;Box plot&#xff09;&#xff1a;用…

算法day05

第一题 1004. 最大连续1的个数 III 题目如下所示&#xff1a; 如上题所示&#xff1a; 题目本意是在一个数组中只有1和0&#xff0c;给定一个k值&#xff0c;将小于k个0翻转成1&#xff0c;然后返回最终得到最长的1的个数&#xff1b; 我们将这到题的意思转化为另外一种意思&…

单元测试之TestNG知识点总结及代码示例

TestNG 是一个测试框架&#xff0c;用于自动化测试 Java 和 Scala 应用程序&#xff0c;它是 JUnit 和 NUnit 的一个强大替代品。TestNG 支持数据驱动测试、参数化测试、测试套件、依赖管理、多线程测试等特性。TestNG官网&#xff1a;TestNG Documentation 目录 1.TestNG 基…

PCB笔记(二十六):PCB检查

前言 首先检查元器件是否100&#xff05; 放置 文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过&#xff08;一般不允许线经过&#xff09;c.打开place_bo…

【管理咨询宝藏101】普华永道并购尽调内部培训

【管理咨询宝藏101】普华永道并购尽调内部培训 【格式】PDF版本 【关键词】普华永道、兼并收购、尽职调查 【核心观点】 - 尽职调查的目的&#xff0c;发现潜在的致命缺陷&#xff0c;判断是否继续交易进程&#xff1b;发现潜在的问题&#xff0c;制定交易前后相应的应对措施。…

C语言 | Leetcode C语言题解之第88题合并两个有序数组

题目&#xff1a; 题解&#xff1a; void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nu…

Kali Linux菜单中各工具功能大全

网络安全学习路线 &#xff08;2024最新整理&#xff09; 如图片过大被平台压缩导致看不清的话&#xff0c;评论区点赞和评论区留言扣1或者关注我我后台会主动发给你&#xff01; 第一阶段&#xff1a;安全基础 网络安全行业与法规 Linux操作系统 计算机网络 HTML PHP Mysql P…

【董晓算法】竞赛常用知识之字符串2

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列&#xff08;还没学完&#xff09; 【董晓算法】动态规划之线性DP问题-CSDN博客 【董晓算法】动态规划之背包DP问题&#xff…

用Rust打印杨辉三角

一、杨辉三角是什么&#xff1f; 杨辉三角是一个著名的数学图形&#xff0c;它展示了二项式系数的排列方式。 杨辉三角是一种将二项式系数以三角形阵列排列的数学图形&#xff0c;具有丰富的历史和数学意义。 杨辉三角的历史起源可以追溯到中国南宋时期&#xff0c;由数学家杨辉…

极端天气对气膜建筑有什么影响吗—轻空间

气膜建筑在近年来的发展迅速&#xff0c;逐渐替代了一部分传统建筑&#xff0c;展现了良好的市场前景。然而&#xff0c;面对自然环境中的极端天气&#xff0c;如暴风、暴雨和暴雪&#xff0c;气膜建筑是否能够经受住考验是大家关注的焦点。轻空间带您探讨一下这些极端天气对气…

探究NVMe SSD HMB应用场景与影响-<续>

如果需要采用HMB功能&#xff0c;需要SSD支持NVME协议且NVMe 1.2及以上版本。NVME协议中对HMB对应有2个关键参数&#xff1a; HMB建议值&#xff08;HMPRE&#xff09;&#xff1a;设定实际分配给HMB使用的主机内存容量&#xff0c;为设备提供最优性能的内存分配量。 HMB最小值…