yq - 添加多行字符串
yq - add a multiline string
我正在使用 yq(类似于 jq,但用于 yaml 文件)。我的目标是执行以下操作。我有一个类似于
的证书文件
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
我有一个如下所示的 yaml 文件(在本例中为 Openshift 模板)
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate:
key:
someOther: stuff
现在我的目标是将证书注入到 yaml 中,这样输出看起来有点像这样
apiVersion: v1
...
certificate: |
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
然而,无论是互联网搜索还是文档都没有任何帮助。我得到的最接近的是使用
yq w /tmp/template.yaml objects[0].tls.certificate "\n$(cat cert.pem)"
给我留下以下输出
certificate: !!binary |
fC0KLS0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0tLQphc2RvcWlqZXBvcWp3ZTFpND
lpMTIwOTQxcDJqNG9tc2zDYXNkYWpzZMNxd2Vxd2UKcXdlbHFqd2vDYXNkbGFqc8O2bGtq
YXNsZGtqYWtsanNkbGtqYXNkYXNkcGlxd2UKLS0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS
0tLS0t
这奇怪的是我想添加的 base64 编码值前面有 !!binary |。知道发生了什么以及如何实现我想要的输出吗?
我已经用 yq3
测试了@Inian 的建议,它有效。
也可以在yq4
中实现,语法如下:
template.yml
# template.yml
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate:
key:
someOther: stuff
cert.pem
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
命令
yq eval '.objects[0].tls.certificate = "'"$(< cert.pem)"'"' template.yml
输出
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate: |-
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
key:
someOther: stuff
请注意,在 bash 中,当您使用“$(..)”时,它将 trim 尾随换行符(这就是为什么 yaml 字符串块以 |-
开头而不是|
.
要获得 |
(包括结尾的新行),您需要:
IFS= read -rd '' output < <(cat cert.pem)
output=$output yq e '.objects[0].tls.certificate = strenv(output)' myfile.yml
免责声明:我写了yq
我正在使用 yq(类似于 jq,但用于 yaml 文件)。我的目标是执行以下操作。我有一个类似于
的证书文件-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
我有一个如下所示的 yaml 文件(在本例中为 Openshift 模板)
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate:
key:
someOther: stuff
现在我的目标是将证书注入到 yaml 中,这样输出看起来有点像这样
apiVersion: v1
...
certificate: |
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
然而,无论是互联网搜索还是文档都没有任何帮助。我得到的最接近的是使用
yq w /tmp/template.yaml objects[0].tls.certificate "\n$(cat cert.pem)"
给我留下以下输出
certificate: !!binary |
fC0KLS0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0tLQphc2RvcWlqZXBvcWp3ZTFpND
lpMTIwOTQxcDJqNG9tc2zDYXNkYWpzZMNxd2Vxd2UKcXdlbHFqd2vDYXNkbGFqc8O2bGtq
YXNsZGtqYWtsanNkbGtqYXNkYXNkcGlxd2UKLS0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS
0tLS0t
这奇怪的是我想添加的 base64 编码值前面有 !!binary |。知道发生了什么以及如何实现我想要的输出吗?
我已经用 yq3
测试了@Inian 的建议,它有效。
也可以在yq4
中实现,语法如下:
template.yml
# template.yml
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate:
key:
someOther: stuff
cert.pem
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
命令
yq eval '.objects[0].tls.certificate = "'"$(< cert.pem)"'"' template.yml
输出
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate: |-
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
key:
someOther: stuff
请注意,在 bash 中,当您使用“$(..)”时,它将 trim 尾随换行符(这就是为什么 yaml 字符串块以 |-
开头而不是|
.
要获得 |
(包括结尾的新行),您需要:
IFS= read -rd '' output < <(cat cert.pem)
output=$output yq e '.objects[0].tls.certificate = strenv(output)' myfile.yml
免责声明:我写了yq