【问题标题】:Pulumi kubernetes ConfigGroup takes string, I only got OutputsPulumi kubernetes ConfigGroup 需要字符串,我只有输出
【发布时间】:2023-03-24 18:38:02
【问题描述】:

我需要为 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
`,
})

【问题讨论】:

    标签: kubernetes yaml pulumi


    【解决方案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 代码帮助解决该特定问题
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多