是否有一种简单的方法可以从文件中获取第一行?



我正在尝试用helm创建一个kubernetes ConfigMap,它只是由配置文件中的第一行组成。我把我的文件放在helm/config/file.txt中,它有几行内容,但我只想提取第一行。我的第一次尝试是遍历文件的行(很自然),但在第一次循环后退出:

apiVersion: v1
kind: ConfigMap
metadata:
name: one-line-cm
data:
first-line:
{{- range .Files.Lines "config/file.txt" }}
{{ . }}
{{ break }} # not a real thing
{{- end }}

不幸的是,break似乎不是helm中的一个概念/功能,即使它在golang中。我发现了这个困难的方式,以及阅读类似的问题在另一个帖子:Helm: break loop (range) in template

我不坚持使用循环,我只是想知道是否有另一种解决方案来执行使用helm语法从文件中提取第一行的简单任务。

编辑:
我已经确定以下是最干净的解决方案:

.Files.Lines "config/file.txt" | first

(作为旁注,由于我的文件内容包含特殊字符,我不得不在实际解决方案中管道到squote)


在helm文档中寻找替代功能后,我想出了一个可行的解决方案,它只是不那么漂亮:

apiVersion: v1
kind: ConfigMap
metadata:
name: one-line-cm
data:
first-line: |
{{ index (regexSplit "\n" (.Files.Get "config/file.txt") -1) 0 }}

这就是上面发生的事情(从内到外工作):

  1. .Files.Get "config/file.txt"返回文件内容的字符串表示形式。
  2. regexSplit "\n" <step-1> -1正在用换行符分隔步骤1的文件内容(-1表示返回可能的子字符串匹配的最大数目)
  3. index <step-2> 0从步骤2返回的列表中抓取第一项(索引0)。

希望这能帮助到其他有类似情况的人,我仍然愿意接受其他解决方案的建议。

相关内容

  • 没有找到相关文章

最新更新