如何在 Pulumi Azure Native 中设置全局标签
How to set global tags in Pulumi Azure Native
在特定于堆栈的设置文件中(即 Pulumi.dev.yaml
),如果设置了位置(即 azure-native:location
),则会自动设置资源组位置,并且资源的位置源自资源组位置。现在我正在尝试为所有资源应用通用标签,即 CreatedBy: Pulumi
。 有什么方法可以设置 common/global 标签,类似于设置文件 (Pulumi.dev.yaml
) 中的 azure-native:location
吗?
预期:位置和标签都将从 Pulumi.dev.yaml
开始设置
config:
azure-native:location: japaneast
azure-native:tags:
CreatedBy: Pulumi
var mainRgArgs = config.RequireObject<JsonElement>(KEY_RESOURCE_GROUP_ARGS);
var mainRgName = mainRgArgs.GetProperty(RESOURCE_GROUP_NAME).GetString()!;
var mainRg = new ResourceGroup(RESOURCE_GROUP_MAIN, new ResourceGroupArgs
{
ResourceGroupName = mainRgName
//Location =
//Tags =
});
无法自动设置标签,因为标签不是必需的 API 属性。
之所以 location
是提供者参数,是因为每个资源在创建时都需要一个位置。标签不是这样。
但是,可以使用 transformation
自动将标签添加到可标记的资源(并非所有资源)
转换允许您将属性注入每个资源,无论您是否明确地为您的资源设置了该值。但是,您必须设置可标记资源列表,因为并非每个 Azure 资源都是可标记的。
在资源上注册标签的函数如下所示:
export function registerAutoTags(autoTags: Record<string, string>): void {
pulumi.runtime.registerStackTransformation((args) => {
if (isTaggable(args.type)) {
args.props["tags"] = { ...args.props["tags"], ...autoTags };
return { props: args.props, opts: args.opts };
}
return undefined;
});
}
然后您可以通过调用函数来使用这些标签:
registerAutoTags({
"user:Project": pulumi.getProject(),
"user:Stack": pulumi.getStack(),
"user:Cost Center": config.require("costCenter"),
});
关于此的更多信息(尽管是针对 AWS,而非 Azure)here. You can find a list of Azure resources that are support tags here
在特定于堆栈的设置文件中(即 Pulumi.dev.yaml
),如果设置了位置(即 azure-native:location
),则会自动设置资源组位置,并且资源的位置源自资源组位置。现在我正在尝试为所有资源应用通用标签,即 CreatedBy: Pulumi
。 有什么方法可以设置 common/global 标签,类似于设置文件 (Pulumi.dev.yaml
) 中的 azure-native:location
吗?
预期:位置和标签都将从 Pulumi.dev.yaml
config:
azure-native:location: japaneast
azure-native:tags:
CreatedBy: Pulumi
var mainRgArgs = config.RequireObject<JsonElement>(KEY_RESOURCE_GROUP_ARGS);
var mainRgName = mainRgArgs.GetProperty(RESOURCE_GROUP_NAME).GetString()!;
var mainRg = new ResourceGroup(RESOURCE_GROUP_MAIN, new ResourceGroupArgs
{
ResourceGroupName = mainRgName
//Location =
//Tags =
});
无法自动设置标签,因为标签不是必需的 API 属性。
之所以 location
是提供者参数,是因为每个资源在创建时都需要一个位置。标签不是这样。
但是,可以使用 transformation
自动将标签添加到可标记的资源(并非所有资源)转换允许您将属性注入每个资源,无论您是否明确地为您的资源设置了该值。但是,您必须设置可标记资源列表,因为并非每个 Azure 资源都是可标记的。
在资源上注册标签的函数如下所示:
export function registerAutoTags(autoTags: Record<string, string>): void {
pulumi.runtime.registerStackTransformation((args) => {
if (isTaggable(args.type)) {
args.props["tags"] = { ...args.props["tags"], ...autoTags };
return { props: args.props, opts: args.opts };
}
return undefined;
});
}
然后您可以通过调用函数来使用这些标签:
registerAutoTags({
"user:Project": pulumi.getProject(),
"user:Stack": pulumi.getStack(),
"user:Cost Center": config.require("costCenter"),
});
关于此的更多信息(尽管是针对 AWS,而非 Azure)here. You can find a list of Azure resources that are support tags here