使用toJson或toRawJson没有自动添加引号?



我有一个值。带有一个字符串变量的Yaml文件,该字符串变量表示数据库连接字符串,不带引号,如下所示(别担心,不是真正的密码):

ActionLogsConnectionString: Database=ActionLogs;Server=SQL_DEV;User Id=sa;Password=Y19|yxdySh53&h

我的目标是在ConfigMap资源中打印它,以便它可以作为dotnet应用程序的.json配置文件注入到我的pod中。我还想在连接字符串中附加应用程序名称:

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "asp.fullname" . }}
labels:
{{- include "asp.labels" . | nindent 4 }}
data:
appsettings.k8s.json: |-
{
"ConnectionStrings": {
"ActionLogsConnectionString": "{{ .Values.ActionLogsConnectionString }};Application Name=Asp;"
}
}

结果如下:

"ActionLogsConnectionString": "Database=ActionLogs;Server=SQL_DEV;User Id=sa;Password=Y19|yxdySh53&h;Application Name=Asp;"

看起来太棒了!在这一点上,我没有报价问题。

现在的问题,斜杠没有转义json文件格式。很好,我们提供了一个toJson函数。不幸的是,它也改变了&;&;&;到unicode值。然后我找到了toRawJson,它给出了预期的结果。

我的问题是,当使用toJson或toRawJson时,它会添加额外的引号并破坏我的结果:

那么这个yalm文件:

"ActionLogsConnectionString": "{{ .Values.ActionLogsConnectionString | toRawJson }};Application Name=Asp;"

导致这个json文件(注意额外的引号):

"ActionLogsConnectionString": ""Database=ActionLogs;Server=SQL_DEV;User Id=sa;Password=Y19|yx\dySh53&h";Application Name=Asp;"

我看到有一个名为| quote的函数,但这只添加了一些。没有办法使用toRawJson没有添加任何?

在这里使用toJsontoRawJson是错误的解决方案,因为根据定义,字符串的JSON表示包含双引号。"foo"是一个JSON字符串,foo不是有效的JSON。

但是您只处理标量值,因此首先将其封送到JSON中没有多大意义。我认为以下内容可以满足你的需求:

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "asp.fullname" . }}
labels:
{{- include "asp.labels" . | nindent 4 }}
data:
appsettings.k8s.json: |-
{
"ConnectionStrings": {
"ActionLogsConnectionString": {{ printf "%s;Application Name=asp" .Values.ActionLogsConnectionString | quote }}
}
}

在这里,我们使用printf来生成所需的字符串(然后将其传递给quote函数以正确引用)。

这产生:

---
# Source: example/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-example-fullname
labels:
# This is a test
data:
appsettings.k8s.json: |-
{
"ConnectionStrings": {
"ActionLogsConnectionString": "Database=ActionLogs;Server=SQL_DEV;User Id=sa;Password=Y19|yx\dySh53&h;Application Name=asp"
}
}

相关内容

  • 没有找到相关文章