- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 python 在 Azure 中的每个资源上创建标签。
create_or_update:创建订阅资源标签list:获取订阅资源标签列表
好像只能对资源组进行标记操作,不能对资源进行标记操作?
示例:
向资源组添加标签:Set-AzureRmResourceGroup向资源添加标签:Set-AzureRmResource
编辑:
感谢您提供的 api 查找代码,非常简洁。但我相信我手动放置的旧 api 也应该可以工作。我几乎没有修改就尝试了你的代码(我们可能有不同的Azure SDK,我使用的是2.0.0rc5)。添加 api 函数后(非常有帮助),不幸的是我仍然遇到同样的错误。
from azure.common.credentials import UserPassCredentials
from azure.mgmt.resource.resources import ResourceManagementClient
def resolve_resource_api(client, resource):
""" This method retrieves the latest non-preview api version for
the given resource (unless the preview version is the only available
api version) """
provider = client.providers.get(resource.id.split('/')[6])
rt = next((t for t in provider.resource_types
if t.resource_type == '/'.join(resource.type.split('/')[1:])), None)
#print(rt)
if rt and 'api_versions' in rt.__dict__:
#api_version = [v for v in rt[0].api_versions if 'preview' not in v.lower()]
#return npv[0] if npv else rt[0].api_versions[0]
api_version = [v for v in rt.__dict__['api_versions'] if 'preview' not in v.lower()]
return api_version[0] if api_version else rt.__dict__['api_versions'][0]
credentials = UserPassCredentials(
'****@****.com', # Your new user
'******', # Your password
)
subscription_id= '*****-***-****-****-*******'
resource_client = ResourceManagementClient(credentials,
subscription_id)
for resource in resource_client.resources.list():
#print(resource)
#print(resolve_resource_api(resource_client, resource))
if resource.id.split('/')[4] == 'Build':
#resource.tags = {'foo':'bar'}
if resource.type == 'Microsoft.Web/sites':
print('resource.id: ', resource.id)
print('resource_group_name: ', resource.id.split('/')[4])
print('resource_provider_namespace: ', resource.id.split('/')[6])
print('parent_resource_path: ', '')
print('resource_type: ', str(resource.type).split('/')[-1])
print('resource_name: ', resource.name)
print('api_version: ', resolve_resource_api(resource_client, resource))
resource.tags['test'] = 'test1'
#print(resolve_resource_api(resource_client, resource))
#continue
print(resource)
resource_client.resources.create_or_update(
resource_group_name= resource.id.split('/')[4], # Extract from resource.id
resource_provider_namespace=resource.id.split('/')[6], # Extract from resource.id
parent_resource_path='', # Extract from resource.id
resource_type=str(resource.type).split('/')[-1], # Extract from resource type
resource_name=resource.name,
api_version=resolve_resource_api(resource_client, resource),
parameters=resource
)
print('-'*10)
Error Traceback (most recent call last): File "C:\Python35-32\Scripts\Azure\temp.py", line 56, in parameters=resource File "C:\Python35-32\lib\site-packages\azure\mgmt\resource\resources\operations\resources_operations.py", line 408, in create_or_update raise exp msrestazure.azure_exceptions.CloudError: Operation failed with status: 'Bad Request'. Details: 400 Client Error: Bad Request for url: https://management.azure.com/subscriptions/--***-*****-*******/resourcegroups/Build/providers/Microsoft.Web/sites/build-dev?api-version=2016-03-01
我做了更多工作,发现我可以通过以下方式使用 create_or_update 方法:
from azure.mgmt.resource.resources.models import GenericResource
parameters=GenericResource(
location='West US',
properties={},
)
代码示例中的响应错误消息显示“参数属性具有无效值”。所以我猜测参数=资源需要修复。我会进一步研究这一点。
更新(已解决!):
for resource in resource_client.resources.list():
#print(resource)
if resource.id.split('/')[4] == 'Build':
if resource.type == 'Microsoft.Web/sites':
print('resource.id: ', resource.id)
print('resource_group_name: ', resource.id.split('/')[4])
print('resource_provider_namespace: ', resource.id.split('/')[6])
print('parent_resource_path: ', '')
print('resource_type: ', str(resource.type).split('/')[-1])
print('resource_name: ', resource.name)
print('api_version: ', resolve_resource_api(resource_client, resource))
if not resource.tags:
resource.tags = {}
resource.tags['test'] = 'test1'
else:
resource.tags['test'] = 'test1'
# This solves the error 400 Client Error: Bad Request. The parameter properties has an invalid value.
if not resource.properties:
resource.properties = {}
resource_client.resources.create_or_update(
resource_group_name= resource.id.split('/')[4], # Extract from resource.id
resource_provider_namespace=resource.id.split('/')[6], # Extract from resource.id
parent_resource_path='', # Extract from resource.id
resource_type=str(resource.type).split('/')[-1], # Extract from resource type
resource_name=resource.name,
api_version=resolve_resource_api(resource_client, resource),
parameters=resource,
)
print('-'*10)
出于某种奇怪的原因,如果resource.properties为None,则请求不喜欢它。它必须是 {}。
感谢特拉维斯的帮助!当我使用 Azure SDK 时,我会发布更多问题;)
最佳答案
如果您使用的是 Python SDK,通常可以使用资源的 create_or_update
方法向资源添加标签。这些方法采用一个名为 parameters
的对象,该对象通常是您感兴趣的资源的对象类型。您可以在其中找到标签。
例如标记虚拟网络:
from azure.mgmt.network.models import VirtualNetwork
vnet = client.virtual_networks.get(resource_group_name, vnet_name)
vnet.tags = {'a':'b'}
client.virtual_networks.create_or_update(resource_group_name, virtual_network_name, vnet)
此外,您可以使用(在本例中)azure network vnet set -t {tags}
命令通过 Xplat-Cli 标记您的资源。
您可以使用 azure group set -t {tags}
标记资源组,一般使用 azure resources set -t {tags}
标记资源。
希望有帮助。
更新 (8/26/16)
获取 API 版本可能很棘手。您可能认为它只是通用资源对象的一部分,但由于某种原因它不是。但是,尝试这样的事情:
from azure.common.credentials import UserPassCredentials
from azure.mgmt.resource.resources import ResourceManagementClient
def resolve_resource_api(client, resource):
""" This method retrieves the latest non-preview api version for
the given resource (unless the preview version is the only available
api version) """
provider = client.providers.get(resource.id.split('/')[6])
rt = next((t for t in provider.resource_types if t.resource_type == resource.type), None)
if rt and len(rt) == 1 and rt[0].api_versions:
api_version = [v for v in rt[0].api_versions if 'preview' not in v.lower()]
return npv[0] if npv else rt[0].api_versions[0]
credentials = UserPassCredentials(
'****@****.com', # Your new user
'******', # Your password
)
subscription_id= '*****-***-****-****-*******'
resource_client = ResourceManagementClient(credentials, subscription_id)
for resource in resource_client.resources.list():
resource.tags['test'] = 'test1'
# avoid error 400 if properties must be set
if not resource.properties:
resource.properties = {}
resource_client.resources.create_or_update(
resource_group_name= resource.id.split('/')[4],
resource_provider_namespace=resource.id.split('/')[6],
parent_resource_path='', # WARNING: this will not work with child resources
resource_type=str(resource.type).split('/')[-1],
resource_name=resource.name,
api_version=resolve_resource_api(resource_client, resource),
parameters=resource
)
client.resources 下的列表操作提供整个订阅的 GenericResource 对象的分页列表。您发布的方式是逐个循环访问资源组,然后循环访问每个资源组内的资源。这样就可以正常工作,并且可以避免您从 ID 中提取资源组名称,但我认为这个解决方案更干净一些。
resolve_resource_api
方法使用提供程序命名空间和资源 ID 中的资源类型,通过资源提供程序 get 操作查找该资源类型的可用 API 版本。此代码(缺少一些验证)将检索不是预览版本的最新 API 版本(除非这是唯一可用的版本)。仅仅在字符串中任意指定版本通常是行不通的,因为不同的资源将具有不同的 API 版本。
此外,您的代码指定“”作为父路径,因此这通常不适用于子资源。
关于python - Azure SDK Python : tag a particular resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38992201/
似乎有很多方法可以在 Azure 中自动使用 PowerShell。由于 ARM 模板是最新的,Azure 中的其他 PowerShell 选项是否已过时?这些工具/脚本之间有什么区别: Azure
我正在开发一个将托管在 Azure 中的 Web API。我想使用 Azure 诊断将错误记录到 Azure 表存储中。在经典门户中,我可以将日志配置为转到 Azure 表存储。 Classic Po
Azure 文件存储事件可以触发 Azure WebJob 或 Azure Function 吗? 例如,在文件夹“/todo/”中创建文件时。 最佳答案 我们目前没有任何 Azure 文件绑定(bi
我需要创建一个逻辑应用程序,我的要求是,我需要从 azure data Lake Gen2 文件夹迁移 json 文件,并根据某些值需要将该 json 转换为 xml,然后将其发送到 SQL。 因此,
我使用 VS Code 创建了 1 个 node.js 和 1 个 java Azure Function 当我使用 VS Code 将这两个函数部署到 Azure 时,我最终获得了这么多 Azure
收集 Azure 诊断数据时,暂存槽是否也会将诊断数据发送到 WadPerformanceCounters 表? 如果是这样,我该如何关闭它?或者在阅读诊断信息时如何区分暂存/生产。 我不想显示有关我
您好,我是 Azure 的新手。我有 VS 2012 和 Azure SDK 2.1,当我使用模拟器运行我的 Web 应用程序时一切正常。但是当我在 azure 上部署时出现错误消息: Could n
我很难区分 Azure 订阅和 Azure 租户有何不同?我尝试使用示例来弄清楚,但每次我得出的结论是它们在某种程度上是相同的?如果租户是组织在注册 Microsoft 云服务时接收并拥有的 Azur
如果我想在 Azure Insights 中设置自定义指标集合,并以(近)实时的方式可视化其中一些指标,并查看聚合的历史数据,我应该使用 Azure Metrics Explorer 还是 Azure
我想了解具有以下配置的 Azure 数据工厂 (ADF) 的现实示例/用例: Azure 集成运行时 (AIR) 默认值 自托管集成运行时(SHIR) 其他问题: 这两种配置(AIR 和 SHIR)是
请参阅下面来自 Azure 服务总线的指标。想要识别请求数量中的背景噪音|流量较低时的响应。假设振荡请求| session 中 amqp 握手的响应是潜在的。只是不明白这是什么类型的握手?从总线接收的
此问题与 Azure 事件中心和 Azure 服务总线之间的区别无关。 问题如下: 如果您将Azure Events Hub添加到您的应用程序中,那么您会注意到它依赖于Azure Service Bu
这两个事情是完全不同的,还是它们能完成的事情大致相同/相似? 最佳答案 Azure 辅助角色是“应用程序场”中您自己的一组虚拟机。您可以以分布式方式在它们上运行任何代码。通常,您编写业务代码以在这些服
我目前正在使用 Windows Azure 虚拟机来运行 RStudio, 我的虚拟机是 Windows Server R2 2012,它是 Azure 上的一项附加服务。 我还有一个 Azure 存
我们正在寻找托管一个网站(一些 css、js、一个 html 文件,但不是 aspx、一个通用处理程序)。 我们部署为: 1) Azure 网站 2) Azure 云服务 两种解决方案都有效。但有一个
我想从 Azure 表创建 blob。 AzCopy 支持此功能,但我找不到任何说明数据移动 API 也支持它的文档。此选项可用吗? https://azure.microsoft.com/en-us
This article表示 Azure 订阅所有者有权访问订阅中的所有资源。但是,要访问 Azure 数据库,必须是数据库中的用户,或者是 Azure Admin AD 组的成员。 无论 SQL 安
我尝试使用以下代码将 XML 文件上传到 Azure FTP 服务器: https://www.c-sharpcorner.com/article/upload-and-download-files-
除了 Azure 服务总线使用主题而 Azure 事件中心基于事件 - Azure 事件中心和 Azure 服务总线之间是否有任何根本区别? 对我来说,事件和消息之间没有真正的区别,因为两者只是不同类
我有一个通过虚拟网络网关连接到 Azure 虚拟网络的 Windows VPN 客户端。目标#1 是使用其内部 IP 地址连接到我的虚拟机。这有效。 第二个目标是使用其内部计算机名称进行连接(因为 I
我是一名优秀的程序员,十分优秀!