Azure Python SDK为订阅添加标签失败,请求排查问题
问题分析与解决
你的代码问题在于混淆了全局标签定义管理和资源(订阅)标签应用的API:
- 你调用的
rc.tags.create_or_update(tag_name="testing_one")是用来创建/更新全局的标签名称(即Azure中可复用的标签键),并不是将这个标签应用到具体的订阅资源上,所以订阅上看不到标签。 - 要实现和
az tag update --operation merge --resource-id /subscriptions/{subscription-id} --tags <tag-name>=<tag-value>相同的效果,需要使用begin_update_at_scope方法来针对订阅资源更新标签。
修正后的代码示例
import os from azure.identity import DefaultAzureCredential from azure.mgmt.resource.subscriptions import SubscriptionClient from azure.mgmt.resource.resources import ResourceManagementClient def main(): credential = DefaultAzureCredential() subscription_client = SubscriptionClient(credential=credential) # 遍历所有订阅 for sub in subscription_client.subscriptions.list(): sub_id = sub.subscription_id rc = ResourceManagementClient(credential=credential, subscription_id=sub_id) # 订阅的资源ID格式为 /subscriptions/{subscription-id} scope = f"/subscriptions/{sub_id}" # 执行标签合并操作,和az命令的--operation merge对应 update_result = rc.tags.begin_update_at_scope( scope=scope, operation="merge", properties={"tags": {"testing_one": "your-tag-value"}} # 这里需要指定标签值 ).result() print(f"订阅 {sub_id} 的标签更新结果: {update_result}") if __name__ == "__main__": main()
关键说明
- scope参数:必须传入订阅的完整资源ID,格式为
/subscriptions/{subscription-id},这对应az命令中的--resource-id参数。 - operation参数:设为
merge,和az命令的--operation merge行为一致,保留现有标签并添加新标签;如果要替换所有标签可以设为replace。 - tags字典:必须包含键值对,az命令中
--tags <tag-name>=<tag-value>的格式对应这里的字典结构,不能只传标签名。
内容的提问来源于stack exchange,提问作者rammanoj
相关产品推荐
相关产品推荐

