当我使用 F-string 在 Pulumi 中使用 Python 创建连接字符串时收到错误

Receive an error when I using F-string for creating a connection string with Python in the Pulumi

我想在我的代码 (Pulumi) 中使用 F-String 创建一个存储连接字符串。场景和示例代码为:

例如,我的存储名称是test

我收到存储名称:

storage_name = storage_account.name

我收到了存储密钥:

 storage_primary_key = pulumi.Output.all(resource_group.name, storage_account.name).apply(lambda args: storage.list_storage_account_keys(
     resource_group_name=args[0], account_name=args[1])).apply(lambda accountkeys: accountkeys.keys[0].value)

下面的输出是可以的:

pulumi.export('storage name is', storage_name)
pulumi.export('storage key is', storage_primary_key)

输出:

storage name is: test
storage key is: sg373dhh

现在,我想要使用以下代码创建连接字符串:

conn_str = f"DefaultEndpointsProtocol=https;AccountName={storage_name};AccountKey={storage_primary_key};EndpointSuffix=core.windows.net"

当 运行 此代码时:

pulumi.export('storage connection string is', conn_str )

但是,输出是不同的:

storage connection string is "DefaultEndpointsProtocol=https;AccountName=<pulumi.output.Output object at 0x000002152C3233D0>;AccountKey=<pulumi.output.Output object at 0x000002152C3233D0>;EndpointSuffix=core.windows.net"

我不知道为什么要添加 <pulumi.output.Output object at 0x000002152C3233D0> 而不是真实值。

包含字符串的输出不能直接用于string concatenation等操作。由于 storage_primary_keystorage_name 都是 pulumi 输出,当你直接连接它们时你会得到奇怪的结果。

您应该将 Output.all.applyOutput.concat 一起使用,并按如下方式构造您的字符串。请注意,conn_str 又是一个 pulumi 输出:

    # using concat
    conn_str = pulumi.Output.concat(
        "DefaultEndpointsProtocol=https;AccountName=",
        storage_name,
        ";AccountKey=",
        storage_primary_key,
        ";EndpointSuffix=core.windows.net",
    )

    # using Output.all with apply
    conn_str = pulumi.Output.all(storage_name, storage_primary_key).apply(
        lambda args: f"DefaultEndpointsProtocol=https;AccountName={args[0]};AccountKey={args[1]};EndpointSuffix=core.windows.net",
    )