rel*_*one 5 bash base64 yaml yq
我正在使用 yq (类似于 jq 但用于 yaml 文件)。我的目标是做到以下几点。我有一个类似于
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
Run Code Online (Sandbox Code Playgroud)
我有一个 yaml 文件(在本例中为 Openshift 模板),如下所示
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate:
key:
someOther: stuff
Run Code Online (Sandbox Code Playgroud)
现在我的目标是将证书注入到 yaml 中,以便输出看起来像这样
apiVersion: v1
...
certificate: |
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------
Run Code Online (Sandbox Code Playgroud)
然而,互联网搜索和文档都没有任何帮助。我得到的最接近的是使用
yq w /tmp/template.yaml objects[0].tls.certificate "\n$(cat cert.pem)"
给我留下以下输出
certificate: !!binary |
fC0KLS0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0tLQphc2RvcWlqZXBvcWp3ZTFpND
lpMTIwOTQxcDJqNG9tc2zDYXNkYWpzZMNxd2Vxd2UKcXdlbHFqd2vDYXNkbGFqc8O2bGtq
YXNsZGtqYWtsanNkbGtqYXNkYXNkcGlxd2UKLS0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS
0tLS0t
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这是我想添加的以 !!binary | 开头的 base64 编码值。任何想法发生了什么以及如何实现我想要的输出?
请注意,在 bash 中,当您使用 '$(..)' 时,它将修剪尾随换行符(这就是 yaml 字符串块以而|-不是|.
要获取|(并包括尾随的换行符),您需要:
IFS= read -rd '' output < <(cat cert.pem)
output=$output yq e '.objects[0].tls.certificate = strenv(output)' myfile.yml
Run Code Online (Sandbox Code Playgroud)
免责声明:我写的是yq
我已经测试了@Inian 的建议并且yq3它有效。
也可以使用yq4以下语法来实现:
模板.yml
\n# template.yml\napiVersion: v1\nkind: Template\nobjects:\n - apiVersion: v1\n kind: Route\n tls:\n certificate:\n key:\n someOther: stuff\nRun Code Online (Sandbox Code Playgroud)\n证书.pem
\n-------BEGIN CERTIFICATE-------\nasdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe\nqwelqjwkasdlajs\xc3\xb6lkjasldkjakljsdlkjasdasdpiqwe\n-------END CERTIFICATE--------\nRun Code Online (Sandbox Code Playgroud)\n命令
\nyq eval '.objects[0].tls.certificate = "'"$(< cert.pem)"'"' template.yml\nRun Code Online (Sandbox Code Playgroud)\n输出
\napiVersion: v1\nkind: Template\nobjects:\n - apiVersion: v1\n kind: Route\n tls:\n certificate: |-\n -------BEGIN CERTIFICATE-------\n asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe\n qwelqjwkasdlajs\xc3\xb6lkjasldkjakljsdlkjasdasdpiqwe\n -------END CERTIFICATE--------\n key:\n someOther: stuff\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |