تطبيق العلامات باستخدام Python

توضح هذه المقالة كيفية استخدام Python لوضع علامة على الموارد ومجموعات الموارد والاشتراكات. للحصول على توصيات العلامات والقيود، راجع استخدام العلامات لتنظيم موارد Azure والتسلسل الهرمي للإدارة.

المتطلبات الأساسية

  • تم تثبيت Python 3.8 أو إصدار أحدث. لتثبيت الأحدث، راجع Python.org

  • حزم مكتبة Azure التالية ل Python المثبتة في بيئتك الظاهرية. لتثبيت أي من الحزم، استخدم pip install {package-name}

    • هوية azure
    • azure-mgmt-resource

    إذا كان لديك إصدارات قديمة من هذه الحزم مثبتة بالفعل في بيئتك الظاهرية، فقد تحتاج إلى تحديثها باستخدام pip install --upgrade {package-name}

  • تستخدم الأمثلة في هذه المقالة المصادقة المستندة إلى CLI (AzureCliCredential). اعتمادا على بيئتك، قد تحتاج إلى التشغيل az login أولا للمصادقة.

  • متغير بيئة مع معرف اشتراك Azure الخاص بك. للحصول على معرف اشتراك Azure، استخدم:

    az account show --name 'your subscription name' --query id -o tsv
    

    لتعيين القيمة، استخدم الخيار للبيئة الخاصة بك.

    setx AZURE_SUBSCRIPTION_ID your-subscription-id
    

    إشعار

    إذا كنت بحاجة فقط إلى الوصول إلى متغير البيئة في وحدة التحكم الحالية قيد التشغيل، يمكنك تعيين متغير البيئة باستخدام set بدلا من setx.

    بعد إضافة متغيرات البيئة، قد تحتاج إلى إعادة تشغيل أي برامج قيد التشغيل ستحتاج إلى قراءة متغير البيئة، بما في ذلك نافذة وحدة التحكم. على سبيل المثال، إذا كنت تستخدم Visual Studio كمحرر، فعد تشغيل Visual Studio قبل تشغيل المثال.

تطبيق العلامات

يقدم Azure Python أسلوب ResourceManagementClient.tags.begin_create_or_update_at_scope لتطبيق العلامات. يحل محل جميع العلامات على المورد أو مجموعة الموارد أو الاشتراك. عند استدعاء الأمر، قم بتمرير معرف المورد للكيان الذي تريد وضع علامة عليه.

يطبق المثال التالي مجموعة من العلامات على حساب تخزين:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"
storage_account_name = "demostore"

tags = {
    "Dept": "Finance",
    "Status": "Normal"
}

tag_resource = TagsResource(
    properties={'tags': tags}
)

resource = resource_client.resources.get_by_id(
    f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
    "2022-09-01"
)

resource_client.tags.begin_create_or_update_at_scope(resource.id, tag_resource)

print(f"Tags {tag_resource.properties.tags} were added to resource with ID: {resource.id}")

إذا قمت بتشغيل الأمر مرة أخرى، ولكن هذه المرة بعلامات مختلفة، فلاحظ أن العلامات السابقة تختفي.

tags = {
    "Team": "Compliance",
    "Environment": "Production"
}

لإضافة علامات إلى مورد يحتوي بالفعل على علامات، استخدم ResourceManagementClient.tags.begin_update_at_scope. في كائن TagsPatchResource ، قم بتعيين المعلمة operation إلى Merge.

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"
storage_account_name = "demostore"

tags = {
    "Dept": "Finance",
    "Status": "Normal"
}

tag_patch_resource = TagsPatchResource(
    operation="Merge",
    properties={'tags': tags}
)

resource = resource_client.resources.get_by_id(
    f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
    "2022-09-01"
)

resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)

print(f"Tags {tag_patch_resource.properties.tags} were added to existing tags on resource with ID: {resource.id}")

لاحظ أن العلامات الموجودة تتزايد مع إضافة العلامتين الجديدتين.

يمكن أن يكون لكل اسم علامة قيمة واحدة فقط. إذا قمت بتوفير قيمة جديدة للعلامة، فإنها تحل محل القيمة القديمة حتى إذا كنت تستخدم عملية الدمج. يغير المثال التالي Status العلامة من عادي إلى أخضر.

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"
storage_account_name = "demostore"

tags = {
    "Status": "Green"
}

tag_patch_resource = TagsPatchResource(
    operation="Merge",
    properties={'tags': tags}
)

resource = resource_client.resources.get_by_id(
    f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
    "2022-09-01"
)

resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)

print(f"Tags {tag_patch_resource.properties.tags} were added to existing tags on resource with ID: {resource.id}")

عند تعيين المعلمة operation على Replace، تحل مجموعة العلامات الجديدة محل العلامات الموجودة.

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"
storage_account_name = "demostore"

tags = {
    "Project": "ECommerce",
    "CostCenter": "00123",
    "Team": "Web"
}

tag_patch_resource = TagsPatchResource(
    operation="Replace",
    properties={'tags': tags}
)

resource = resource_client.resources.get_by_id(
    f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
    "2022-09-01"
)

resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)

print(f"Tags {tag_patch_resource.properties.tags} replaced tags on resource with ID: {resource.id}")

تبقى العلامات الجديدة فقط على المورد.

تعمل نفس الأوامر أيضًا مع مجموعات الموارد أو الاشتراكات. قم بتمريرها في معرف مجموعة الموارد أو الاشتراك الذي تريد وضع علامة عليه. لإضافة مجموعة جديدة من العلامات إلى مجموعة موارد، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"

tags = {
    "Dept": "Finance",
    "Status": "Normal"
}

tag_resource = TagsResource(
    properties={'tags': tags}
)

resource_group = resource_client.resource_groups.get(resource_group_name)

resource_client.tags.begin_create_or_update_at_scope(resource_group.id, tag_resource)

print(f"Tags {tag_resource.properties.tags} were added to resource group: {resource_group.id}")

لتحديث العلامات لمجموعة موارد، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"

tags = {
    "CostCenter": "00123",
    "Environment": "Production"
}

tag_patch_resource = TagsPatchResource(
    operation="Merge",
    properties={'tags': tags}
)

resource_group = resource_client.resource_groups.get(resource_group_name)

resource_client.tags.begin_update_at_scope(resource_group.id, tag_patch_resource)

print(f"Tags {tag_patch_resource.properties.tags} were added to existing tags on resource group: {resource_group.id}")

لتحديث علامات الاشتراك، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

tags = {
    "Team": "Web Apps"
}

tag_patch_resource = TagsPatchResource(
    operation="Merge",
    properties={'tags': tags}
)

resource_client.tags.begin_update_at_scope(f"/subscriptions/{subscription_id}", tag_patch_resource)

print(f"Tags {tag_patch_resource.properties.tags} were added to subscription: {subscription_id}")

قد يكون لديك أكثر من مورد واحد بنفس الاسم في مجموعة موارد. في هذه الحالة، يمكنك تعيين كل مورد بالأوامر التالية:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"

tags = {
    "Dept": "IT",
    "Environment": "Test"
}

tag_patch_resource = TagsPatchResource(
    operation="Merge",
    properties={'tags': tags}
)

resources = resource_client.resources.list_by_resource_group(resource_group_name, filter="name eq 'sqlDatabase1'")

for resource in resources:
    resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)
    print(f"Tags {tag_patch_resource.properties.tags} were added to resource: {resource.id}")

قائمة العلامات

للحصول على علامات مورد أو مجموعة موارد أو اشتراك، استخدم أسلوب ResourceManagementClient.tags.get_at_scope ومرر معرف المورد للكيان.

للاطلاع على العلامات الخاصة بالموارد، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_group_name = "demoGroup"
storage_account_name = "demostorage"

resource_client = ResourceManagementClient(credential, subscription_id)

resource = resource_client.resources.get_by_id(
    f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
    "2022-09-01"
)

resource_tags = resource_client.tags.get_at_scope(resource.id)
print (resource_tags.properties.tags)

للاطلاع على العلامات الخاصة بمجموعة موارد، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group = resource_client.resource_groups.get("demoGroup")

resource_group_tags = resource_client.tags.get_at_scope(resource_group.id)
print (resource_group_tags.properties.tags)

للاطلاع على علامات الاشتراك، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

subscription_tags = resource_client.tags.get_at_scope(f"/subscriptions/{subscription_id}")
print (subscription_tags.properties.tags)

القائمة حسب العلامة

للحصول على الموارد التي لها اسم علامة وقيمة معينة، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resources = resource_client.resources.list(filter="tagName eq 'CostCenter' and tagValue eq '00123'")

for resource in resources:
    print(resource.name)

للحصول على الموارد التي لها اسم علامة محددة مع أي قيمة علامة، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resources = resource_client.resources.list(filter="tagName eq 'Dept'")

for resource in resources:
    print(resource.name)

للحصول على مجموعات الموارد التي لها اسم علامة وقيمة معينة، استخدم:

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_groups = resource_client.resource_groups.list(filter="tagName eq 'CostCenter' and tagValue eq '00123'")

for resource_group in resource_groups:
    print(resource_group.name)

إزالة العلامات

لإزالة علامات معينة، قم بتعيين operation إلى Delete. قم بتمرير معرفات الموارد للعلامات التي تريد حذفها.

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import TagsPatchResource

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

resource_group_name = "demoGroup"
storage_account_name = "demostore"

tags = {
    "Dept": "IT",
    "Environment": "Test"
}

tag_patch_resource = TagsPatchResource(
    operation="Delete",
    properties={'tags': tags}
)

resource = resource_client.resources.get_by_id(
    f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}",
    "2022-09-01"
)

resource_client.tags.begin_update_at_scope(resource.id, tag_patch_resource)

print(f"Tags {tag_patch_resource.properties.tags} were removed from resource: {resource.id}")

تتم إزالة العلامات المحددة.

لإزالة كافة العلامات، استخدم أسلوب ResourceManagementClient.tags.begin_delete_at_scope .

import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient

credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

resource_client = ResourceManagementClient(credential, subscription_id)

subscription = resource_client.subscriptions.get(subscription_id)

resource_client.tags.begin_delete_at_scope(subscription.id)

الخطوات التالية