当我使用 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_key
和 storage_name
都是 pulumi 输出,当你直接连接它们时你会得到奇怪的结果。
您应该将 Output.all
与 .apply
或 Output.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",
)
我想在我的代码 (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_key
和 storage_name
都是 pulumi 输出,当你直接连接它们时你会得到奇怪的结果。
您应该将 Output.all
与 .apply
或 Output.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",
)