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后面会介绍。
在此解决

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

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

相关文章

C语言--字符函数与字符串函数

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing 原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位…

关于技术标准那些事——第一篇:面纱

突然就冒出来这两个字“面纱”,就拿她来做开篇的标题吧。 想了很久,从检测到全面质量管理,有太多可展开的内容,但是如果不回归到根本,我们会在偏离的轨道上越跑越远,所以还是从了解标准,了解标准…

Java 数据结构篇-实现二叉搜索树的核心方法

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 二叉搜索树的概述 2.0 二叉搜索树的成员变量及其构造方法 3.0 实现二叉树的核心接口 3.1 实现二叉搜索树 - 获取值 get(int key) 3.2 实现二叉搜索树 - 获取最小…

程序流程图的意义(合集)

程序流程图的意义 1、矩形 作用:一般用作要执行的处理(process),在程序流程图中做执行框。 在axure中如果是画页面框架图,那么也可以指代一个页面。有时候我们会把页面和执行命令放在同一个流程中做说明,这个时候将两类不同的矩形…

RHCE8 资料整理(十)三

RHCE8 资料整理 第 31 章 变量的使用(二)31.8 内置变量 groups31.9 内置变量 hostvars31.10 内置变量 inventory_hostname31.11 变量过滤器31.11.1 数字类型31.11.2 列表31.11.3 设置变量默认值default31.11.4 字符串相关31.11.5 加密相关 第 31 章 变量…

算法(2)——滑动窗口

前言: 步骤及算法模板: 确定两个指针变量,left0,right0; 进窗口: 判断: 出窗口 更新结果 接下来我们的所用滑动窗口解决问题都需要以上几个步骤。 一、长度最小的子数组 209. 长度最小的子数组 - 力扣(L…

Ebullient第一阶段开发小结

一. 简介 距离Ebullient硬件发布已有一段时间,小一个月吧,在这段时间内在努力的编写代码,现在终于完成了第一阶段的功能设计,算是一个小型的样机吧,基本的代码框架基本确定了,相信后续的会快一点(希望如此…

Nodejs 第二十六章(反向代理)

什么是反向代理? 反向代理(Reverse Proxy)是一种网络通信模式,它充当服务器和客户端之间的中介,将客户端的请求转发到一个或多个后端服务器,并将后端服务器的响应返回给客户端。 负载均衡:反向代理可以根…

前端全栈基础之CSS中margin,padding

一、margin属性 Margin属性有以下一些属性值: 1.margin-top: 设置元素上方的外边距大小; 2.margin-right: 设置元素右侧的外边距大小; 3.margin-bottom: 设置元素下方的外边距大小; 4.margin-left: 设置元素左侧的外边距大小…

二、W5100S/W5500+RP2040之MicroPython开发<DHCP示例>

文章目录 1 前言2 相关网络信息2 .1 简介2.2 DHCP工作原理2.3 DHCP的优点2.4 应用场景 3 WIZnet以太网芯片4 DHCP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 在这个智能硬件和物联网时代&#…

在Python中使用Kafka帮助我们处理数据

Kafka是一个分布式的流数据平台,它可以快速地处理大量的实时数据。Python是一种广泛使用的编程语言,它具有易学易用、高效、灵活等特点。在Python中使用Kafka可以帮助我们更好地处理大量的数据。本文将介绍如何在Python中使用Kafka简单案例。 一、安装K…

C到C++笔记记录

C到C笔记记录 输入(cin) and 输出(cout)bool内联(inline)重载缺省函数哑元引用(&)C动态内存分配笔记扩充&#xff1a; 输入(cin) and 输出(cout) #include<iostream>using namespace std;void main() {int i;//输入 cincin >> i;//输出 coutcout << i &…

浅谈云性能测试的关键要点

随着云计算的广泛应用&#xff0c;云性能测试成为确保云服务质量和性能的关键环节。云性能测试不仅涵盖了传统性能测试的方面&#xff0c;还需要考虑云环境的特殊性。以下是云性能测试的几个关键要点&#xff1a; 1. 模拟真实云环境 云环境具有虚拟化、弹性扩展等特点&#xff…

IDEA tomcat内存不足

-Xms256m -Xmx256m -XX:MaxNewSize256m -XX:MaxPermSize256m

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph API资源对象StorageClass SC的主要作用在于&#xff0c;自动创建PV&#xff0c;从而实现PVC按需自动绑定PV。 下面我们通过创建一个基于NFS的SC来演示SC的作用。 要想使用NFS的SC&#xff0c;还需要安装一个NFS…

npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3

在使用npm时&#xff0c;有时候您可能会遇到类似以下错误的权限问题&#xff1a; npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3 npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall open npm ERR! Error: EACCES: permission denie…

掌握数组处理的利器:双指针技巧详解

掌握数组处理的利器&#xff1a;双指针技巧详解 在算法的世界里&#xff0c;数组是最基础也是最常见的数据结构之一。处理数组相关问题时&#xff0c;我们经常需要遍历数组元素&#xff0c;而如何高效地进行遍历&#xff0c;就显得尤为重要。今天&#xff0c;我们就来深入探讨…

Kubernetes 的用法和解析 -- 5

一.企业级镜像仓库Harbo 准备&#xff1a;另起一台新服务器&#xff0c;并配置docker yum源&#xff0c;安装docker 和 docker-compose 1.1 上传harbor安装包并安装 [rootharbor ~]# tar xf harbor-offline-installer-v2.5.3.tgz [rootharbor ~]# cp harbor.yml.tmpl harbor…

不会代码循环断言如何实现?只要6步!

对于使用jmeter工具完成接口测试的测试工程师而言。在工作中&#xff0c;或者在面试中&#xff0c;都会遇到一个问题—— “CSV文档做了一大笔测试数据后&#xff0c;怎么去校验这个结果呢&#xff1f;” 现在大部分测试工程师可能都是通过人工的方法去查看结果&#xff0c;十…

作业--day33

基于UDP的TFTP文件上传 #include <myhead.h>#define PORT 69 #define IP "192.168.125.59"int down(const char *); int up(const char *);int main(int argc, const char *argv[]) {while(1){system("clear");//打印菜单puts("**************…