RHCE8 资料整理(十)二
RHCE8 资料整理
- 第 31 章 变量的使用(一)
- 31.1 手动定义变量
- 31.2 变量文件
- 31.3 字典变量
- 31.4 列表变量
- 31.5 数字变量的运算
- 31.6 注册变量
- 31.7 facts变量
第 31 章 变量的使用(一)
31.1 手动定义变量
通过vars来定义变量,vars和tasks对齐,格式如下,
vars:var1: value1var2: value2...
定义变量时,不可有重复的变量,否则后面定义的变量值会覆盖前面的,会有提示信息
[root@node-137 ansible]# ansible-playbook test6.yml
[WARNING]: While constructing a mapping from /opt/ansible/test6.yml, line 6, column 5, found a duplicate dict key (v1). Using last
defined value only.PLAY [echo vars] **********************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": 456
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0[root@node-137 ansible]# cat test6.yml
---
- hosts: db1name: echo varsgather_facts: falsevars:v1: 123v2: 321v1: 456tasks:- debug: msg={{v1}}
引用变量时用{{ 变量名 }},大括号内存两边有无空格均可,但相同大括号之间不能有空格
{{ var }}
{{var}}
{{ var}}
{ {var}}#错误
[root@node-137 ansible]# ansible-playbook test6.yml
...
The offending line appears to be:tasks:- debug: msg={ {v1}}^ here
[root@node-137 ansible]# cat test6.yml
---
- hosts: db1name: echo varsgather_facts: falsevars:v1: 123v2: 321v3: 456tasks:- debug: msg={ {v1}}
31.2 变量文件
如果定义的变量太多,可以把变量拿出来单独放在一个文件中,然后在vars_files引用此变量文件,就可以直接使用文件中的变量了。该文件中变量的格式要和在playbook的vars中变量的结构一致
[root@node-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] **********************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": 123
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0[root@node-137 ansible]# cat vars.yaml
v1: 123
v2: 456
v3: 789
[root@node-137 ansible]# cat test6.yml
---
- hosts: db1name: echo varsgather_facts: falsevars_files:- vars.yamltasks:- debug: msg={{v1}}
也可以这样写
[root@node-137 ansible]# cat test6.yml
---
- hosts: db1name: echo varsgather_facts: falsevars_files: vars.yamltasks:- debug: msg={{v1}}
31.3 字典变量
所谓字典(dictionaries简写为dict),这里和python中含义相同,键不能重复。
字典中如果出现了相同的变量名,则后面定义的变量的值会覆盖前面的
字典是在vars中定义的,语法,
字典名:var1: value1var2: value2...
在字典中定义变量时,变量前面是不加
-的,且定义变量没有先后顺序
通过字典名.变量名引用变量,如,
[root@node-137 ansible]# cat test6.yml
---
- hosts: db1name: echo varsgather_facts: falsevars:dict1:v1: 123v2: 345v3: 456dict2:v1: 321v2: 543v3: 654tasks:- debug: msg={{dict1.v1}}- debug: msg={{dict2.v1}}
[root@node-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] **********************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "321"
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
31.4 列表变量
在playbook中列表变量和字典变量比较容易混淆,语法,
列表名:
- var1: value1var2: value2var3: value1- var1: value1var2: value2var3: value1- var1: value1var2: value2var3: value1...
- 列表中变量通过索引来引用变量,所以前后变量名相同,并不会覆盖。
- 每个元素的第一个变量前都加上
-,表示它是该元素的第一个变量。 - 获取
元素值通过列表名[n],n从0开始。获取变量值通过列表名[n].var1。
例如,
[root@node-137 ansible]# cat test6.yml
---
- hosts: db1name: echo varsgather_facts: falsevars:list1:- v1: 123v2: 345v3: 456- v1: 789v2: 987list2:- v1: 321v2: 543v3: 654- v1: 000v2: 222tasks:- debug: msg={{list1[0]}}- debug: msg={{list2[1].v1}}
[root@node-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] **********************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": {"v1": 123,"v2": 345,"v3": 456}
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "0"
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
这里变量值为整数类型,所以打印的是0,而非000,可以在定义时改为"000"试试
定义列表时,可以直接写值,而不写变量名,如,
vars:list1:- 123- 345- 456
这种定义方式可以转换成如下内容,
list1: [v1, v2, v3]
不过这种方式
好像只能表示一维列表,笔者也不太确定
[root@node-137 ansible]# cat test6.yml
---
- hosts: db1name: echo varsgather_facts: falsevars:list1:- "123,431"- 345- 456tasks:- debug: msg={{list1[0]}}- debug: msg={{list1[0][1]}}[root@node-137 ansible]# ansible-playbook test6.ymlPLAY [echo vars] **********************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123,431"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "2"
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
31.5 数字变量的运算
在YAML文件中定义的变量,其值如果时数字,则可以进行数学运算。常见的数学运算符包括:+,-,*,/和**(幂)。
计算变量aa*2和aa的3次幂
[root@node-137 ansible]# ansible-playbook 4-vars.yamlPLAY [vars] ***************************************************************************************************************************TASK [aa*2] ***************************************************************************************************************************
ok: [node-138] => {"msg": "6"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "27"
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0[root@node-137 ansible]# cat 4-vars.yaml
---
- hosts: db1name: varsgather_facts: falsevars:aa: 3tasks:- name: aa*2debug: msg={{aa*2}}- debug: msg={{aa**3}}
31.6 注册变量
在playbook中用shell模块执行某个系统命令后,在结果中时不会显示这个命令结果的,这和在命令行中用ansible命令调用shell模块不一样
[root@node-137 ansible]# cat 5_reg1.yml
---
- hosts: db1name: hostnamegather_facts: falsetasks:- name: display hostnameshell: hostname
[root@node-137 ansible]# ansible-playbook 5_reg1.ymlPLAY [hostname] ***********************************************************************************************************************TASK [display hostname] ***************************************************************************************************************
changed: [node-138]PLAY RECAP ****************************************************************************************************************************
node-138 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
如果想要查看shell命令的结果,可以把shell命令的结果保存在一个变量中,这个变量就是注册变量,然后打印这个变量的值即可。
修改上面的yaml文件
[root@node-137 ansible]# cat 5_reg1.yml
---
- hosts: db1name: hostnamegather_facts: falsetasks:- name: display hostnameshell: hostnameregister: aa- name: display aadebug: msg={{aa}}
[root@node-137 ansible]# ansible-playbook 5_reg1.ymlPLAY [hostname] ***********************************************************************************************************************TASK [display hostname] ***************************************************************************************************************
changed: [node-138]TASK [display aa] *********************************************************************************************************************
ok: [node-138] => {"msg": {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"cmd": "hostname","delta": "0:00:00.032575","end": "2023-12-19 17:04:41.632157","failed": false,"rc": 0,"start": "2023-12-19 17:04:41.599582","stderr": "","stderr_lines": [],"stdout": "node-138","stdout_lines": ["node-138"]}
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
结果中msg后面的内容就是aa的值,可以看到aa是一个字典。其中cmd是执行的系统命令,rc是此命令的返回值,stdout表示此命令的结果。
如果只获取命令结果,只要打印字典aa中的stdout变量即可
[root@node-137 ansible]# cat 5_reg1.yml
---
- hosts: db1name: hostnamegather_facts: falsetasks:- name: display hostnameshell: hostnameregister: aa- name: display aadebug: msg={{aa.stdout}}
[root@node-137 ansible]# ansible-playbook 5_reg1.ymlPLAY [hostname] ***********************************************************************************************************************TASK [display hostname] ***************************************************************************************************************
changed: [node-138]TASK [display aa] *********************************************************************************************************************
ok: [node-138] => {"msg": "node-138"
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
31.7 facts变量
ansible通过setup模块是可以获取到被管理主机的所有信息的,这些信息都是以变量的方式存在的,这些变量称为facts,另外如果要获取facts不能把gather_facts设置为false,可以不设置(默认为true),或者设置为true
[root@node-137 ansible]# cat 6-fact.yaml
---
- hosts: db1name: display ipv4.addressgather_facts: truetasks:- name: display ipdebug: msg={{ansible_default_ipv4.address}}- name: display fqdndebug: msg={{ansible_fqdn}}
[root@node-137 ansible]# ansible-playbook 6-fact.yamlPLAY [display ipv4.address] ***********************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [display ip] *********************************************************************************************************************
ok: [node-138] => {"msg": "192.168.81.138"
}TASK [display fqdn] *******************************************************************************************************************
ok: [node-138] => {"msg": "node-138"
}PLAY RECAP ****************************************************************************************************************************
node-138 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在本系列文章 九 29.20 使用 setup 模块获取被管理服务器信息中提到
命令行中如果filter含有子键,结果不会显示,所以上面命令未看到IP。不过如果把这个键写入ansible-playbook(剧本)中,会显示哦,关于playbook后面会介绍。
在此解决
相关文章:
RHCE8 资料整理(十)二
RHCE8 资料整理 第 31 章 变量的使用(一)31.1 手动定义变量31.2 变量文件31.3 字典变量31.4 列表变量31.5 数字变量的运算31.6 注册变量31.7 facts变量 第 31 章 变量的使用(一) 31.1 手动定义变量 通过vars来定义变量ÿ…...
CUDA 学习记录2
1.是否启用一级缓存有什么影响: 启用一级缓存(缓存加载操作经过一级缓存):一次内存十五操作以128字节的粒度进行。 不启用一级缓存(没有缓存的加载不经过一级缓存):在内存段的粒度上ÿ…...
探索Qt 6.3:了解基本知识点和新特性
学习目标: 理解Qt6.3的基本概念和框架:解释Qt是什么,它的核心思想和设计原则。学会安装和配置Qt6.3开发环境:提供详细的步骤,让读者能够顺利安装和配置Qt6.3的开发环境。掌握Qt6.3的基本编程技巧:介绍Qt6.…...
持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布
目录 一、实验 1. GitLabCI环境设置 2.优化GitLabCI共享库代码 3.JenkinsCD 发布后端项目 4.再次优化GitLabCI共享库代码 5.JenkinsCD 再次发布后端项目 一、实验 1. GitLabCI环境设置 (1)GitLab给后端项目添加CI配置路径 (2…...
一些好用的VSCode扩展
可以在扩展这里直接搜索需要的扩展,点击安装即可。 1.Chinese 中文扩展,就是说虽然咱们懂点英语,但还是中文看着方便 2.Auto Rename Tag 当你重命名一个HTML 标签时,会自动重命名与他配对的HTML 标签 当你选择h4这个标签时&…...
3dsmax渲染太慢,用云渲染农场多少钱?
对于许多从事计算机图形设计的创作者来说,渲染速度慢是一个常见问题,尤其是对于那些追求极致出图效果的室内设计师和建筑可视化师,他们通常使用3ds Max这样的工具,而高质量的渲染经常意味着长时间的等待。场景复杂、细节丰富&…...
JVM-9-Class类文件的结构
Java技术能够一直保持着非常良好的向后兼容性,Class文件结构的稳定功不可没。 Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中。 Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,…...
Redis持久化,性能管理
Redis高可用主要通过以下几种方式来实现:单机、主从复制、哨兵模式、和集群模式。这些方式都旨在提高系统的稳定性和可用性,特别是在面对服务器故障或其他问题时。 持久化: 在数据库和缓存系统中,持久化是指将数据保存在存储介质&…...
linux(centos7)离线安装mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar
1. 卸载mariadb相关rpm # 查找 rpm -qa|grep mariadb rpm -qa|grep mysql# 卸载 rpm -e --nodeps mariadb... rpm -e --nodeps mysql...2. 删除mysql相关文件 # 查找 find / -name mysql# 删除 rm -rf /var/lib/mysql...3. 查看是否有相关依赖,没有需安装 rpm -q…...
【lesson17】MySQL表的基本操作--表去重、聚合函数和group by
文章目录 MySQL表的基本操作介绍插入结果查询(表去重)建表插入数据操作 聚合函数建表插入数据操作 group by(分组)建表插入数据操作 MySQL表的基本操作介绍 CRUD : Create(创建), Retrieve(读取),Update(更新)&#x…...
面试题总结(十二)【Qt】【华清远见西安中心】
Qt是什么? Qt是一个跨平台的应用程序开发框架,最初由挪威的Trolltech公司开发。它提供了一套丰富的工具和类库,用于开发图形用户界面(GUI)应用程序、网络应用程序和嵌入式应用程序等。 Qt框架基于C语言编写,…...
GPT-4V with Emotion:A Zero-shot Benchmark forMultimodal Emotion Understanding
GPT-4V with Emotion:A Zero-shot Benchmark forMultimodal Emotion Understanding GPT-4V情感:多模态情感理解的zero-shot基准 1.摘要 最近,GPT-4视觉系统(GPT-4V)在各种多模态任务中表现出非凡的性能。然而,它在情感识别方面的功效仍然是个问题。本文定…...
CogVLM与CogAgent:开源视觉语言模型的新里程碑
引言 随着机器学习的快速发展,视觉语言模型(VLM)的研究取得了显著的进步。今天,我们很高兴介绍两款强大的开源视觉语言模型:CogVLM和CogAgent。这两款模型在图像理解和多轮对话等领域表现出色,为人工智能的…...
CSS的盒子模型(重点)
网页布局的三大核心:盒子模型、浮动、定位 网页布局的过程: 1. 先准备好相关的网页元素,网页元素基本都是盒子 Box 。 2. 利用 CSS 设置好盒子样式,然后摆放到相应位置。 3. 往盒子里面装内容.网页布局的核心本质: 就…...
论文笔记:Bilinear Attention Networks
更精简的论文学习笔记 1、摘要 多模态学习中的注意力网络提供了一种选择性地利用给定视觉信息的有效方法。然而,学习每一对多模态输入通道的注意力分布的计算成本是非常昂贵的。为了解决这个问题,共同注意力为每个模态建立了两个独立的注意分布&#x…...
2312llvm,01基本介绍
LLVM设计的核心是它的IR. 在把LLVMIR翻译特定汇编语言时,LLVM首先将程序变换为(DAG)有向无环图,以更易选指(SelectionDAG)容易,然后变换回三地址指令,来调度指令(MachineFunction). 为了看清驱动编译程序时,调用的后续工具,用-###命令行参数: $ clang -### hello.c -o hello…...
Spring之手写IoC
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…...
IDEA运行JSP启动后页面中文乱码
源代码截图: 运行结果截图: 在<head>标签内加入代码 <% page contentType"text/html; charsetgb2312"%> 重启服务器,问题已改善 ————————————————— 该文仅供学习以及参考,可做笔记收藏…...
Python 自动化之收发邮件(二)
发邮件之Windows进程监控 文章目录 发邮件之Windows进程监控前言一、基本内容二、基本结构三、库模块四、函数模块1.进程监控2.邮件发送 五、程序运行模块1.获取时间2.用户输入3.进程监控3.1进程启动发邮件3.2进程停止发邮件 总结 前言 上一篇简单写了一下如何进行邮件的收发操…...
RHEL8_Linux_Ansible常用模块的使用
本章主要介绍Ansible中最常见模块的使用 shell模块文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下。 ansible 机器名 -m 模块x -a "模块的参数" 对被管理机器执行不同的操作,只需要调用不同的模块…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
英国云服务器上安装宝塔面板(BT Panel)
在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...
Python异步编程:深入理解协程的原理与实践指南
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...
jieba实现和用RNN实现中文分词的区别
Jieba 分词和基于 RNN 的分词在技术路线、实现机制、性能特点上有显著差异,以下是核心对比: 1. 技术路线对比 维度Jieba 分词RNN 神经网络分词范式传统 NLP(规则 统计)深度学习(端到端学习)核心依赖词典…...
Modbus转ETHERNET IP网关:快速冷却系统的智能化升级密钥
现代工业自动化系统中,无锡耐特森Modbus转Ethernet IP网关MCN-EN3001扮演着至关重要的角色。通过这一技术,传统的串行通讯协议Modbus得以在更高速、更稳定的以太网环境中运行,为快速冷却系统等关键设施的自动化控制提供了强有力的支撑。快速冷…...
低代码采购系统搭建:鲸采云+能源行业订单管理自动化案例
在能源行业数字化转型浪潮下,某大型能源集团通过鲸采云低代码平台,仅用3周时间就完成了采购订单管理系统的定制化搭建。本文将揭秘这一成功案例的实施路径与关键成效。 项目背景与挑战 该企业面临: 供应商分散:200供应商使用不同…...
