Helm‘toYaml’不保留该命令



尝试使用toYaml获取log4j2节表单values.yml,但它没有保留顺序。

log4j2.yml: |-
{{ toYaml .Values.log4j2 | indent 4 }}

输出-

log4j2:
Configuration:
Appenders:
Console:
Filters:
DuplicateLogFilter:
ttlInSeconds: 60
MarkerFilter:
marker: TRACE
onMatch: ACCEPT
onMismatch: NEUTRAL
PatternLayout:
pattern: '%-5p | %d{yyyy-MM-dd HH:mm:ss,SSS} | [%t] [%X{AD.requestGUID}] [%X{trace.id}]
%x %c{1.}:%L - %m%n'
name: CONSOLE
target: SYSTEM_OUT
monitorInterval: 300
shutdownHook: disable

预期输出-

log4j2:
Configuration:
monitorInterval: 300
shutdownHook: disable
Appenders:
Console:
name: CONSOLE
target: SYSTEM_OUT
Filters:
MarkerFilter:
marker: TRACE
onMatch: ACCEPT
onMismatch: NEUTRAL
DuplicateLogFilter:
ttlInSeconds: 60
PatternLayout:
pattern: "%-5p | %d{yyyy-MM-dd HH:mm:ss,SSS} | [%t] [%X{AD.requestGUID}] [%X{trace.id}] %x %c{1.}:%L - %m%n"

值文件被解析为映射(或者字典,如果你愿意的话(,并且通常不需要映射结构来保持字段顺序。因此,您的问题不是toYaml函数本身的问题,而是在values.yaml中放置log4j配置的问题。

您可以做的是将您的log4j配置移动到一个单独的log4j2.yml文件中(在图表的根目录中(,并将其作为原始文件包含:

log4j2.yml: |-
{{- .Files.Get "log4j2.yml" | nindent 10 }}

(相应调整缩进(

我绕过了Log4j2的怪癖,提取了Log4j2强制执行订单的项目,然后输出Configuration,并使用omit函数提交这些项目。

Configuration:
packages: {{ .Values.log4j2.Configuration.packages | toYaml }}
Appenders: {{ .Values.log4j2.Configuration.Appenders | toYaml | nindent 4 }}
{{- $theRest := omit .Values.log4j2.Configuration "packages" "Appenders" }}
{{ $theRest | toYaml | indent 2 }}

PS:虽然packages必须在引用之前,但没有这样的要求适用于AppendersAFAIK——我只是把Appenders放进去说明

相关内容

  • 没有找到相关文章

最新更新