【笔记】Helm-5 Chart模板指南-4 模板函数和流水线

模板函数和流水线

到目前为止,我们已经知道了如何将信息传到模板中。但是传入的信息并不能被修改。有时我们希望以一种更有用的方式来转换所提供的数据。

让我们从一个最佳实践开始:可以通过调用模板指令中的quote函数把 .Values对象中的字符串属性用引号引起来,然后放到模板中。

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-configmap

data:

  myvalue: "Hello World"

  drink: {{ quote .Values.favorite.drink }}

  food: {{ quote .Values.favorite.food }}

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-configmap
data:myvalue: "Hello World"drink: {{ quote .Values.favorite.drink }}food: {{ quote .Values.favorite.food }}

模板函数的语法是 functionName arg1 arg2...。在上面的代码片段中,quote .Values.favorite.drink 调用了quote函数并传递了一个参数(.Values.favorite.drink)。

Helm有超过60个可用函数。其中有些通过 Go模板语言 本身定义。其他大部分都是 Sprig模板库 。我们可以在示例看到其中很多函数。

template package - text/template - Go Packages

Sprig Function Documentation | sprig

小贴士:当我们讨论“Helm模板语言”时,感觉它是Helm专属的,实际上它是Go模板语言、一些额外的函数和用于向模板暴露某些对象的装饰器组合而成的。很多Go模板的资料也有助于您学习模板。

管道符

模板语言其中一个强大功能是管道概念。借鉴UNIX中的概念,管道符是将一系列的模板语言紧凑地将多个流式处理结构合并的工具。换句话说,管道符按顺序完成一系列任务的方式。现在用管道符重写上述示例:

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-configMap

data:

  myvalue: "Hello World"

  drink: {{ .Values.favorite.drink | quote }}

  food: {{ .Values.favorite.food | quote }}

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-configmap
data:myvalue: "Hello World"drink: {{ .Values.favorite.drink | quote }}food: {{ .Values.favorite.food | quote }}

在这个示例中,并不是调用quote参数,而是倒置了命令。使用管道符(|)将参数”发送“给函数:.Values.favorite.drink | quote。使用管道符可以将很多函数链接在一起:

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-configmap

data:

  myvalue: "Hello World"

  drink: {{ .Values.faforite.drink | quote }}

  food: {{ .Values.favorite.food | upper | quote }}

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-configmap
data:myvalue: "Hello World"drink: {{ .Values.favorite.drink | quote }}food: {{ .Values.favorite.food | upper | quote }}

小贴士:倒置命令是模板中的常见做法。可以经常看到 .val | quote 而不是quote .val。实际上两种操作都是可以的。

模板会生成以下内容:

# Source: mychart/templates/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: trendsetting-p-configmap

data:

  myvalues: "Hello World"

  drink: "coffee"

  food: "PIZZA"

注意原有的pizza现在已经被转换成了"PIZZA"。当管道符参数类似这样的时候,第一个表达式的结果(.Values.favorite.drink | upper 的结果)作为了quote的最后一个参数。也可以修改上述示例,用两个参数的函数来阐述:repeat COUNT STRING:

apiVersion: v1

kind: ConfigMap

metadata:

  name: {{ .Release.Name }}-configmap

data:

  myvalues: "Hello World"

  drink: {{ .Values.favorite.drink | repeat 5 | quote }}

  food: {{ .Values.favorite.food | upper | quote }}

apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}-configmap
data:myvalue: "Hello World"drink: {{ .Values.favorite.drink | repeat 5 | quote }}food: {{ .Values.favorite.food | upper | quote }}

repeat函数会返回给定特定的次数,则可以得到以下结果:

# Source: mychart/template/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: melting-porcup-configmap

data:

  myvalue: "Hello World"

  drink: "coffeecoffeecoffeecoffeecoffee"

  food: "PIZZA"

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: melting-porcup-configmap
data:myvalue: "Hello World"drink: "coffeecoffeecoffeecoffeecoffee"food: "PIZZA"

使用default函数

模板中频繁使用的一个函数是default: default DEFAULT_VALUE GIVEN_VALUE。这个函数允许您在模板中指定一个值,以防止这个值被忽略。现在使用它修改上述示例:

drink: {{ .Values.favorite.drink | default "tea" | quote }}

如果运行,会得到coffee:

# Source: mychart/templates/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: virtuous-mink-configmap

data:

  myvalue: "Hello World"

  drink: "coffee"

  food: "PIZZA"

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: virtuous-mink-configmap
data:myvalue: "Hello World"drink: "coffee"food: "PIZZA"

现在,从values.yaml中移除设置:

favorite:

  # drink: coffee

  food: pizza

favorite:#drink: coffeefood: pizza

现在重新运行helm install --dry-run --debug fair-worm ./mychart会生成如下内容:

# Source: mychart/templates/configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

  name: fair-worm-configmap

data:

  myvalue: "Hello World"

  drink: "tea"

  food: "PIZZA"

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: fair-worm-configmap
data:myvalue: "Hello World"drink: "tea"food: "PIZZA"

在实际的chart中,所有的静态默认值应设置在values.yaml中,且不应该重复使用default命令(否则会出现冗余)。然而这个default命令很适合计算值,其不能声明在values.yaml文件中,比如:

drink: {{ .Values.favorite.drink | default (printf "%s-tea" (include "fullname" .)) }}

drink: {{ .Values.favorite.drink | default (printf "%s-tea" (include "fullname" .)) }}

有些场景,if条件比default更加适合。在下一章节我们就会看到。

模板函数和管道符是转换信息然后将其插入到YAML中的强有力方式。但是有些时候我们需要插入一些内容之前进行一些逻辑判断,而不仅仅是插入一个字符串。下一章节,我们会看到模板语言提供的控制结构。

使用lookup函数

lookup函数可以用于在运行的集群中查找资源。lookup函数简述为查找apiVersion,kind,namespace,name ->资源或者资源列表。

parameter type

apiVersion string

kind string

namespace string

name string

parametertype
apiVersionstring
kindstring
namespacestring
namestring

name和namespace都是选填的,且可以传空字符串("")作为空。

以下是可能的参数组合:

命令

Lookup函数

kubectl get pod mypod -n mynamespace

lookup "v1" "Pod" "mynamespace" "mypod"

kubectl get pods -n mynamespace

lookup "v1" "Pod" "mynamespace" ""

kubectl get pods --all-namespace

lookup "v1" "pod" "" ""

kubectl get namespace mynamespace

lookup "v1" "Namespace" "" "mynamespace"

kubectl get namespace

lookup "v1" "Namespace" "" ""

命令Lookup 函数
kubectl get pod mypod -n mynamespacelookup "v1" "Pod" "mynamespace" "mypod"
kubectl get pods -n mynamespacelookup "v1" "Pod" "mynamespace" ""
kubectl get pods --all-namespaceslookup "v1" "Pod" "" ""
kubectl get namespace mynamespacelookup "v1" "Namespace" "" "mynamespace"
kubectl get namespaceslookup "v1" "Namespace" "" ""

当lookup返回一个对象列表时,可以通过items字段访问对象列表:

{{ range $index, $service := (lookup "v1" "Service" "mynamespace" "").items }}

    {{/* do something with each service */}}

{{ end }}

{{ range $index, $service := (lookup "v1" "Service" "mynamespace" "").items }}{{/* do something with each service */}}
{{ end }}

当对象未找到时,会返回空值。可以用来检测对象是否存在。

lookup函数使用Helm已有的Kubernetes链接配置查询Kubernetes。当与调用API服务交互时返回了错误(比如缺少资源访问的权限),helm的模板操作会失败。

请记住,Helm在helm template或者helm install|upgrade|delete|rollback --dry-run时,不应该请求Kubernetes API服务。由此,lookup函数在该案例中会返回空列表(即字典)。

运算符也是函数

对于模板来说,运算符(eq,ne,lt,gt,and,or等等)都是作为函数来实现的。在管道符中,操作可以按照圆括号分组。

现在我们可以从函数和管道符返回到条件控制流,循环和范围修饰符。

————————————

仅用于本人学习

来源:Helm | Docs

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

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

相关文章

手机壳也能散热了?

作为一个玩了6年的王者荣耀玩家,手机发热真的很影响游戏体验!!游戏掉帧,性能下降很恼人,试过好几个散热工具,实际效果都不太好~ 自从入了Mate 60之后,看着这款微泵液冷壳毫无犹豫第…

计数排序(六)——计数排序及排序总结

目录 一.前言 二.归并小补充 三.计数排序 操作步骤: 代码部分: 四.稳定性的概念: 五.排序大总结: ​六.结语 一.前言 我们已经进入排序的尾篇了,本篇主要讲述计数排序以及汇总各类排序的特点。码字不易&#x…

CMake Error:check_source_compiles: CXX: needs to be enabled before use.已解决

在windows中使用安装的msys2-x86_64-20240113.exe下的C:/msys64/mingw64/bin/中的g.exe和gcc.exe出现标题中报错 经搜索有类似错误: CMake Error at /usr/share/cmake/Modules/Internal/CheckFlagCommonConfig.cmake:58 (message):check_compiler_flag: C: needs t…

如何实现一个百万亿规模的时序数据库,百度智能云 BTS 架构解析和实践分享

本文整理自 2023 年 12 月 16 日,百度智能云数据库总架构师朱洁在《国产数据库共话未来趋势》技术沙龙上的主题分享。 随着互联网和物联网的高速发展,产生了大量的结构化、半结构化数据。在百度集团内部, BTS(Baidu Table Storage…

Windows系统本地安装Wnmp服务并结合内网穿透公网远程访问

目录 前言 1.Wnmp下载安装 2.Wnmp设置 3.安装cpolar内网穿透 3.1 注册账号 3.2 下载cpolar客户端 3.3 登录cpolar web ui管理界面 3.4 创建公网地址 4.固定公网地址访问 结语 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊Windows…

【虚拟机数据恢复】异常断电导致虚拟机无法启动的数据恢复案例

虚拟机数据恢复环境: 某品牌R710服务器MD3200存储,上层是ESXI虚拟机和虚拟机文件,虚拟机中存放有SQL Server数据库。 虚拟机故障: 机房非正常断电导致虚拟机无法启动。服务器管理员检查后发现虚拟机配置文件丢失,所幸…

leetcode 1921

消灭的怪物数量 踩坑点:double类型的比较, C语言有qsort的排序函数,需要设计比较函数,double类型的数据存在精度问题,不能直接用号判断数据是否相等,需要通过设置精度eps。 int cmp(const void* val1,con…

###C语言程序设计-----C语言学习(7)#(调试篇)

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 一. 程序调试 1.程序调试介绍: 程序调试是软件开发过程中非常重…

npm 和 yarn 的使用

安装 yarn npm i yarn -g查看版本 npm -v yarn --version切换 npm/yarn 的下包镜像源 // 查看当前的镜像源 npm config get registry// 切换淘宝镜像源 // 新的淘宝源,旧的淘宝源已于2022年05月31日零时起停止服务 npm config set registry https://registry.…

iOS 17.4 苹果公司正在加倍投入人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

重学Ajax

摘要:AJAX是一个在前端的应用非常广泛技术,为什么还要谈它呢?么得办法之前学的不全面,再收拾收拾。水平有限,欢迎指正! AJAX(全称:Asynchronous JavaScript and XML)是一…

vue3 组合式API获取子组件的属性和方法

在vue2中&#xff0c;获取子组件实例的方法或者属性时&#xff0c;父组件直接通过ref即可直接获取子组件的属性和方法&#xff0c;如下&#xff1a; // father.vue <child ref"instanceRef" /> this.$ref[instanceRef].testVal this.$ref[instanceRef].testFun…

unity 讯飞webapi在线语音合成

websocker插件使用的unitywebsocker 讯飞webapi&#xff0c;连接后只能请求一次&#xff0c;所以每次使用时进行连接&#xff0c;连接成功后进行请求&#xff0c;请求完成后关闭连接。 为什么连接后只能请求一次呢&#xff0c;可能是方便统计使用量。 如何通过音频数据计算出…

UPS负载过大有什么危害性

UPS&#xff08;不间断电源&#xff09;是一种用于保护电子设备免受电力波动和突然停电影响的设备。然而&#xff0c;如果UPS负载过大&#xff0c;可能会对其性能和寿命产生严重影响。以下是UPS负载过大的一些危害性&#xff1a; 1. 降低UPS效率&#xff1a;当UPS负载过大时&am…

C++ 11新特性之week_ptr

概述 在C11 标准中&#xff0c;智能指针的引入极大地提升了内存管理的安全性和便利性。除了已经广为人知的shared_ptr和unique_ptr之外&#xff0c;还有一个重要但相对较少被单独提及的智能指针类型——std::weak_ptr。std::weak_ptr是C 11引入的一种弱引用智能指针&#xff0c…

【RT-DETR改进涨点】ResNet18、34、50、101等多个版本移植到ultralytics仓库(RT-DETR官方一比一移植)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文是本专栏的第一篇改进,我将RT-DETR官方版本中的ResNet18、ResNet34、ResNet50、ResNet101移植到ultralytics仓库,网上很多改进机制是将基础版本的也就是2015年发布的ResNet移植到ultralytics仓库中,但是其实…

JavaScript进阶教程 - 事件循环和回调队列

JavaScript的事件循环是一种执行模型&#xff0c;它允许JavaScript引擎执行异步任务&#xff0c;尽管JavaScript是单线程的。这个模型确保了即使在执行长时间运行的操作&#xff08;如从服务器获取数据&#xff09;时&#xff0c;JavaScript代码也能保持响应性。事件循环和回调…

百度云网盘下载速度如何提升到正常速度

引入问题 我们在下载代码学习资料的时候大多数都是百度云网盘&#xff0c;但是限速&#xff01;下载的十分的慢&#xff0c;有什么办法能让我们不开通会员就能享受正常速度呢&#xff1f; 当然有&#xff01; 解决百度云网盘下载速度过慢&#xff0c;提高到正常速度 点击右…

Element ui 的组件弹窗 el-dialog点击的时候全屏变灰问题解决

最近在使用Element UI 的弹窗组件的时候发现这个组件各种的应用都没有问题&#xff0c;数据和元素的应用都是正确的但是在点击显示这个弹窗的时候全屏幕都会变灰。 这也不是因为增加了modal 遮挡幕的问题&#xff0c;在经过不断的排查代码的时候基本排除了代码的问题&#xf…

算法笔记:地理探测器

1 空间分层异质性&#xff08;spatial stratified heterogeneity&#xff09; 空间分层异质性&#xff08;空间分异性/区异性&#xff09;&#xff1a;层内方差小于层间方差的地理现象例如气 候带、土地利用图、地貌图、生物区系、区际经济差异、城乡差异以及主体功能区等 等[…