Pulumi kubernetes ConfigGroup 需要字符串,我只有输出

Posted

技术标签:

【中文标题】Pulumi kubernetes ConfigGroup 需要字符串,我只有输出【英文标题】:Pulumi kubernetes ConfigGroup takes string, I only got Outputs 【发布时间】:2022-01-09 22:27:12 【问题描述】:

我需要为 Configgroup 提供 yaml。 yaml 需要填充来自 Pulumi 输出的值。我的问题是下面代码中的 yaml 字段只接受字符串,我无法找到从输出创建此字符串的方法。

例如,想象一下从输出中获取某种 Id 并替换 foo。

有什么想法吗?

import * as k8s from "@pulumi/kubernetes";

const example = new k8s.yaml.ConfigGroup("example", 
    yaml: `
          apiVersion: v1
          kind: Namespace
          metadata:
             name: foo
`,
)

【问题讨论】:

【参考方案1】:

当您需要在字符串中使用输出值时,您需要确保使用 apply 解析输出。

在你的情况下,它看起来有点像这样:

import * as k8s from "@pulumi/kubernetes";
import * as pulumi from "@pulumi/pulumi";

const nsName = pulumi.output("foo")

nsName.apply(name => 
    const example = new k8s.yaml.ConfigGroup("example", 
        yaml: `
        apiVersion: v1
        kind: Namespace
        metadata:
           name: $name
        `
    )
)

但是,通常不希望像这样在应用程序中创建资源,因为这意味着预览不准确。如果您只是想创建一个命名空间,强烈建议您使用 kubernetes 提供者的命名空间资源,而不是 ConfigGroup(尽管我知道您正在尝试获取一个工作示例,可能是为了其他目的)

您可以考虑使用kube2pulumi 来转换您正在安装的任何 YAML,因为一旦您使用标准类型,您就可以轻松地将输出传递到字段,如下所示:

const newNs = new k8s.core.v1.Namespace("example", 
    metadata: 
        name: nsName
    
)

【讨论】:

完美运行!我必须添加一个 pulumi.all 来收集三个输出,然后使用 apply。是的,它不是命名空间,实际上使用的是 Secret Store CSI 驱动程序,secrets-store.csi.k8s.io 并且我在找到要直接使用的 pulumi api 时遇到问题,因此求助于使用 yaml.ConfigGroup。 @TomHells 如果您针对该用例提出新问题,很乐意使用原生 Pulumi 代码帮助解决该特定问题

以上是关于Pulumi kubernetes ConfigGroup 需要字符串,我只有输出的主要内容,如果未能解决你的问题,请参考以下文章

Pulumi kubernetes ConfigGroup 需要字符串,我只有输出

Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24

Pulumi 如何在 Windows 环境中设置

Pulumi Stack 命令不能找到默认的 Stack

如何使用 Pulumi 向 Web App 添加身份验证

Pulumi Stack 命令不能找到默认的 Stack