RHCE8 资料整理(十)三

RHCE8 资料整理

    • 第 31 章 变量的使用(二)
      • 31.8 内置变量 groups
      • 31.9 内置变量 hostvars
      • 31.10 内置变量 inventory_hostname
      • 31.11 变量过滤器
        • 31.11.1 数字类型
        • 31.11.2 列表
        • 31.11.3 设置变量默认值default
        • 31.11.4 字符串相关
        • 31.11.5 加密相关

第 31 章 变量的使用(二)

31.8 内置变量 groups

在ansible中,除了用户手动定义一些变量外,还有一些内置变量,这些变量不需要用户定义可以直接使用。

groups用于列出清单文件中所有定义的主机组及里面的主机,

[root@node-137 ansible]# cat 7-groups.yaml
---
- hosts: db1tasks:- name: xxxdebug: msg={{groups}}
[root@node-137 ansible]# ansible-playbook 7-groups.yamlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [xxx] ****************************************************************************************************************************
ok: [node-138] => {"msg": {"all": ["node-138","node-140"],"db1": ["node-138"],"db2": ["node-140"],"db3": ["node-138","node-140"],"ungrouped": []}
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

这里显示了清单文件中所有的主机组及里面的主机信息

如果仅想列出某个主机组,可以通过groups['主机组名']groups.主机组名来表示

[root@node-137 ansible]# cat 7-groups.yaml
---
- hosts: db1tasks:- name: xxxdebug: msg={{groups.db1}}- name: yyydebug: msg={{groups['db2']}}
[root@node-137 ansible]# ansible-playbook 7-groups.yamlPLAY [db1] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
ok: [node-138]TASK [xxx] ****************************************************************************************************************************
ok: [node-138] => {"msg": ["node-138"]
}TASK [yyy] ****************************************************************************************************************************
ok: [node-138] => {"msg": ["node-140"]
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

注意:groups['db2']中的引号不能省略,单双引号均可

31.9 内置变量 hostvars

hostvars用来显示指定主机的fact变量,用法如下,

hostvars['主机名'].键值

此变量一般用于,当某个play的hosts中只写了A主机组,但同时想在此play中显示B主机组中的信息,此时可以选择此变量

这里只能指定主机来获取fact变量,不能指定主机组

[root@node-137 ansible]# cat 8-hostvars.yaml
---
- hosts: db2gather_facts: true- hosts: db1gather_facts: falsetasks:- debug: msg={{hostvars['db2'].ansible_default_ipv4.address}}		#注意此处
[root@node-137 ansible]# ansible-playbook 8-hostvars.yamlPLAY [db2] ****************************************************************************************************************************
...
ok: [node-140]PLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
fatal: [node-138]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: \"hostvars['db2']\" is undefined\n\nThe error appears to be in '/opt/ansible/8-hostvars.yaml': line 8, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n  tasks:\n  - debug: msg={{hostvars['db2'].ansible_default_ipv4.address}}\n    ^ here\nWe could be wrong, but this one looks like it might be an issue with\nmissing quotes. Always quote template expression brackets when they\nstart a value. For instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written as:\n\n    with_items:\n      - \"{{ foo }}\"\n"}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
node-140                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0[root@node-137 ansible]# cat 8-hostvars.yaml
---
- hosts: db2gather_facts: true- hosts: db1gather_facts: falsetasks:- debug: msg={{hostvars['node-140'].ansible_default_ipv4.address}}	#注意此处
[root@node-137 ansible]# ansible-playbook 8-hostvars.yamlPLAY [db2] ****************************************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************************
...
ok: [node-140]PLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "192.168.81.140"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node-140                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

31.10 内置变量 inventory_hostname

这个变量记录了每个主机在清单文件中的名称

[root@node-137 ansible]# cat hosts
node-138
node-140[db1]
node-138[db2]
node-140[db3:children]
db1
db2
[root@node-137 ansible]# cat 9-inventory.yaml
---
- hosts: db3gather_facts: falsetasks:- debug: msg={{inventory_hostname}}
[root@node-137 ansible]# ansible-playbook 9-inventory.yamlPLAY [db3] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "node-138"
}
ok: [node-140] => {"msg": "node-140"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node-140                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

31.11 变量过滤器

所谓变量的过滤器,实际上就是对变量的值进行一些操作,例如,进行类型转化,截取,加密等操作,格式如下,

{{变量|函数}}

把大写字符转换成小写字符,如

[root@node-137 ansible]# cat 10-vars.yaml
---
- hosts: db1gather_facts: falsevars:aa: aabb: BBtasks:- debug: msg={{bb|lower}}- debug: msg={{aa|upper}}
[root@node-137 ansible]# ansible-playbook 10-vars.yamlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "bb"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "AA"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

常见的过滤器,如下

31.11.1 数字类型

整型int,可以把字符串转换成整型
浮点型float,可以把字符串转换成小数类型
绝对值abs,可以把负数转换成正数

[root@node-137 ansible]# cat 10-vars.yaml
---
- hosts: db1gather_facts: falsetasks:- debug: msg={{3+('3'|int)}}- debug: msg={{3+('3'|float)}}- debug: msg={{-3|abs}}
[root@node-137 ansible]# ansible-playbook 10-vars.yamlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "6"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "6.0"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "3"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
31.11.2 列表

列表的过滤器可以求出列表的长度,最大值,最小值
length,用于求列表的长度
max,用于求列表中的最大值
min,用于求列表的最小值
sort,排序
sum,求和
shuffle,打乱顺序显示

[root@node-137 ansible]# cat 10-vars1.yaml
---
- hosts: db1gather_facts: falsevars:list1: [1,3,"5",7,4,6,2,"ad",3.14,"|"]tasks:- debug: msg="list1:{{list1}}"- debug: msg="length:{{list1|length}}"- debug: msg="max:{{list1|max}}"- debug: msg="min:{{list1|min}}"- debug: msg="sort:{{list1|sort}}"- debug: msg="sum:{{list1|sum}}"ignore_errors: true- debug: msg="shuffle:{{list1|shuffle}}"
[root@node-137 ansible]# ansible-playbook 10-vars1.yamlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "list1:[1, 3, u'5', 7, 4, 6, 2, u'ad', 3.14, u'|']"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "length:10"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "max:|"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "min:1"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "sort:[1, 2, 3, 3.14, 4, 6, 7, u'5', u'ad', u'|']"
}TASK [debug] **************************************************************************************************************************
fatal: [node-138]: FAILED! => {"msg": "Unexpected templating type error occurred on (sum:{{list1|sum}}): unsupported operand type(s) for +: 'int' and 'AnsibleUnicode'"}
...ignoringTASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "shuffle:[3.14, u'5', 6, 2, 7, 4, 3, u'|', 1, u'ad']"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=7    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=1

可以看到列表过滤器按照ASCII码进行计算,并且只计算首位

31.11.3 设置变量默认值default

如果某个变量没有被定义,那么可以通过default给它设置一个默认值,用法,

{{ var1 | default(value1) }}

如果变量var1已经被定义了,否则会被赋值为value1

[root@node-137 ansible]# cat 10-vars2.yaml
---
- hosts: db1gather_facts: falsevars:aa: 100bb: 200tasks:- debug: msg={{aa|default(111)}}- debug: msg={{bb|default(222)}}- debug: msg={{cc|default(333)}}[root@node-137 ansible]# ansible-playbook 10-vars2.yamlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "100"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "200"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "333"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
31.11.4 字符串相关

string,能把其他数据类型转换成字符串类型
capitalize,用于把字符串首字符转换成大写
upper,把小写字符串转换成大写
lower,把大写字符串转换成小写

[root@node-137 ansible]# cat 10-vars3.yaml
---
- hosts: db1gather_facts: falsevars:aa: abcdefgbb: ABCDEFGcc: 123456tasks:- debug: msg={{aa|capitalize}}- debug: msg={{bb|lower}}- debug: msg={{aa|upper}}- debug: msg={{cc|string}}- debug: msg={{123456}}- debug: msg='{{123456}}'- debug: msg={{"123456"}}- debug: msg={{'123456'}}
[root@node-137 ansible]# ansible-playbook 10-vars3.yamlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "Abcdefg"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "abcdefg"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "ABCDEFG"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123456"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123456"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123456"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123456"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "123456"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=8    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

关注前几个函数即可

31.11.5 加密相关

有时候需要对字符串进行加密操作,例如,创建用户时给用户设定密码,就要用密文形式

求哈希值:hash,算法:md5sha1

[root@node-137 ansible]# cat 10-vars4.yaml
---
- hosts: db1gather_facts: falsevars:passwd: haha01tasks:- debug: msg={{passwd|hash('md5')}}- debug: msg={{passwd|hash('sha1')}}- debug: msg={{passwd|hash('sha512')}}
[root@node-137 ansible]# ansible-playbook 10-vars4.yamlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "56433d003c7aae5f9d33b3a964751b94"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "56bed31bd19bc363ce992aa45eb9808e844b0b52"
}TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "e5eb574e00afc458cf074a665e0a59dee1c0f9faf64d39417a5e5f2a193987ca4d39fa30ce59d60f984aa683adf5087415b5ce3ce03aed40028b25c88b53c3c1"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

hash过滤器中的算法(md5或sha1等)需要用''单引号引起来

除了使用hash作为过滤器加密外,还可以使用password_hash作为过滤器,用法,

password_hash('算法名')
[root@node-137 ansible]# cat 10-vars4.yaml
---
- hosts: db1gather_facts: falsevars:passwd: haha01tasks:- debug: msg={{passwd|password_hash('sha512')}}
[root@node-137 ansible]# ansible-playbook 10-vars4.yamlPLAY [db1] ****************************************************************************************************************************TASK [debug] **************************************************************************************************************************
ok: [node-138] => {"msg": "$6$r8h.egWSvkbXDLeo$ChfIk1UJOU3.8XBQhbOZjTvoOF.FsFZ1KM7/xx2Kpwnrh0weePg95qmoikx1HKfN1qzZ/ikdtYgb1oD/nPrb31"
}PLAY RECAP ****************************************************************************************************************************
node-138                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

password_hash过滤器中的算法(md5或sha1等)同样需要用''单引号引起来

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

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

相关文章

算法(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("**************…

《Kotlin核心编程》笔记:设计模式

创建型模式 主流的创建型模式有&#xff1a;工厂方法模式、抽象工厂模式、构建者模式 伴生对象增强工厂模式 在有些地方会把工厂模式细分为简单工厂、工厂方法模式以及抽象工厂。 这里主要介绍简单工厂的模式&#xff0c;它的核心作用就是通过一个工厂类隐藏对象实例的创建…

C++初阶-反向迭代器的模拟实现

反向迭代器的模拟实现 一、反向迭代器的定义二、反向迭代器的功能2.1 operator2.2 operator- -2.3 operator*2.4 operator&#xff01; 三、list反向迭代器模拟实现完整代码3.1 list.h3.2 iterator.h3.3 test.cpp 一、反向迭代器的定义 我们反向迭代器的思路是复用正向迭代器的…

STM32F407-14.3.12-01使用断路功能

使用断路功能 使用断路功能时&#xff0c;根据其它控制位&#xff08;TIMx_BDTR 寄存器中的 MOE⑨、OSSI⑪ 和 OSSR⑩ 位以及 TIMx_CR2 寄存器中的 OISx⑰ 和 OISxN⑱ 位&#xff09;修改输出使能信号和无效电平。任何情况下&#xff0c;OCx③ 和 OCxN④ 输出都不能同时置为有效…

LD2450-24G人体移动跟踪轨迹雷达模块

文章目录 前言一、LD2450简介特点引脚定义 二、使用步骤上位机使用方法通信协议协议格式数据输出协议 雷达命令配置方式串口解析示例 前言 运动目标跟踪是指在区域内实时跟踪运动目标所在的位置&#xff0c;实现对区域内运动目标测距、测角和测速。LD2450是海凌科24G毫米波雷达…

WFrest 库:快速、高效的基于workflow的C++异步 Web 框架

在这篇博客中&#xff0c;我将介绍 WFrest 库&#xff0c;一个基于 C Workflow 企业级程序引擎的异步 Web 框架。WFrest 库能够帮助开发者快速搭建 HTTP 服务器&#xff0c;实现高效的 Web 应用开发。 一、WFrest 库的背景 WFrest 库是一个由[作者/团队]开发的开源项目&#…