yaml - Helm-Charts(yaml):正则表达式被破坏
问题描述
我正在使用https://github.com/prometheus-community/helm-charts并且遇到了一些问题,一些正则表达式查询是我们基本 yaml 部署的一部分。我遇到的问题专门与普罗米修斯图表的节点导出器部分有关。我已经配置了这个:
nodeExporter:
extraArgs: {
collector.filesystem.ignored-fs-types="^(devpts|devtmpfs|mqueue|proc|securityfs|binfmt_misc|debugfs|overlay|pstore|selinuxfs|tmpfs|hugetlbfs|nfsd|cgroup|configfs|rpc_pipefs|sysfs|autofs|rootfs)$",
collector.filesystem.ignored-mount-points="^/etc/.+$",
collector.netstat.fields="*",
collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$", # BROKEN
collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$, # BROKEN
collector.nfs
}
tolerations:
- operator: Exists
如上所述,这两条带有正则表达式的行被破坏了:
collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$", # BROKEN
collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$, # BROKEN
|
第一个中的“nvme”之前的字符似乎有问题,第二个中的字符似乎有问题?:
。我相信这与 regex/yaml 格式有关,但我不知道如何纠正这个问题。
解决方案
有了{
,您就开始了 YAML流映射。它通常包含逗号分隔的键值对,但您也可以像本例中一样,提供单个值,这将使它们成为具有null
值的键。
在 YAML 中,一旦您输入流式集合,所有特殊的流式指示符都不能再用于纯标量。特殊的流量指标是{}[],
。纯标量是未引用的文本值。
第一个损坏的值是非法的,因为它包含[
and ]
。根据规范,第二个损坏的值实际上是合法的,但是相当多的 YAML 实现会阻塞它,因为?
它也用作映射键的指示符。
你有几个选择:
- 引用标量。因为它们都不包含单引号,所以用单引号括起来就可以了。通常你也可以双引号,但是你需要转义所有双引号字符和所有反斜杠,这不利于可读性。
nodeExporter:
extraArgs: {
collector.filesystem.ignored-fs-types="^(devpts|devtmpfs|mqueue|proc|securityfs|binfmt_misc|debugfs|overlay|pstore|selinuxfs|tmpfs|hugetlbfs|nfsd|cgroup|configfs|rpc_pipefs|sysfs|autofs|rootfs)$",
collector.filesystem.ignored-mount-points="^/etc/.+$",
collector.netstat.fields="*",
'collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$"',
'collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$',
collector.nfs
}
tolerations:
- operator: Exists
- 使用块标量。块标量通常是输入具有许多特殊字符的标量的最佳方式,因为它们以缩进结束,因此可以包含任何特殊字符。块标量只能出现在其他块结构中,因此您需要进行
extraArgs
块映射:
nodeExporter:
extraArgs:
? collector.filesystem.ignored-fs-types="^(devpts|devtmpfs|mqueue|proc|securityfs|binfmt_misc|debugfs|overlay|pstore|selinuxfs|tmpfs|hugetlbfs|nfsd|cgroup|configfs|rpc_pipefs|sysfs|autofs|rootfs)$"
? collector.filesystem.ignored-mount-points="^/etc/.+$"
? collector.netstat.fields="*"
? |-
collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$"
? |-
collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$
? collector.nfs
tolerations:
- operator: Exists
如您所见,这现在使用前面提到?
的作为关键指标。由于它是一个块序列,因此您不再需要逗号。
|-
开始一个文字块标量,从中剥离最后的换行符。
推荐阅读
- sql-server - 在 Order By 子句中调用存储过程
- python - 在 Python Tkinter 中单击要显示为复选框的文本
- javascript - 试图通过反应发出命令来赋予角色。- 不和谐.js
- python - 如何从包含大约 200 个国家的数据集中制作干净的时间序列?
- javascript - 使用 FETCH 单击按钮提交表单并使用 PHPMailer 发送电子邮件
- xslt - XSLT 确定参数是 null 还是空然后做一些事情
- flutter - flutter 如何组合多个Map
; 在一个变量中 - javascript - 使用 java 脚本和 html css 移动图像
- python - Numpy 数组在不同索引处分成多维切片
- javascript - 无法在 Bing 地图中显示自定义图钉