我想用Typescript中的Pulumi创建一个秘密它应该包含以下数据:
remote_write:
- url: "example.com"
basic_auth:
username: "user"
password: "XXX"
代码看起来像:
const databaseSecret = new k8s.core.v1.Secret(
"secret-config",
{
data: {
remote_write: [
{
url: "example.com",
basic_auth:
{
username: "user",
password: "XXX",
}
}
],
}
},
k8sOpts
);
但这显示了以下错误消息:
"类型"{url:string;basic_auth:{username:string;密码:"字符串;};}[]"不可分配给类型"Input">
我不知道如何解决这个问题?如何将这样的嵌套数据转换为机密?
这里有几个问题。
首先:一个Kubernetes秘密接受一个带有密钥名称的输入,然后是一些字符串数据。您将密钥名称作为remote_write
传递,然后尝试传递TypeScript对象——您需要首先将其字符串化。您可以利用YAML作为JSON的超集来处理以下问题:
let secret = [
{
url: "example.com",
basic_auth: {
username: "user",
password: "XXX",
},
},
];
const databaseSecret = new k8s.core.v1.Secret("secret-config", {
data: {
remote_write: JSON.stringify(secret),
},
});
然而,这里还有一个额外的问题:Kubernetes希望机密中的对象是base64编码的,所以您需要首先对其进行编码:
const databaseSecret = new k8s.core.v1.Secret("secret-config", {
data: {
remote_write: Buffer.from(JSON.stringify(secret), 'binary').toString('base64'),
},
});