你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 Python 的 Azure DevCenter 服务客户端库 - 版本 1.0.0b3

Azure DevCenter 包提供用于管理 Microsoft Dev Box 和 Azure 部署环境资源的访问权限。 此 SDK 支持在 Azure 中管理开发人员计算机和环境。

使用 Azure DevCenter 的包可以:

创建、访问、管理和删除 Dev Box 资源 创建、部署、管理和删除环境资源

入门

安装包

python -m pip install azure-developer-devcenter

先决条件

  • 使用此包需要 Python 3.7 或更高版本。
  • 需要 Azure 订阅 才能使用此包。
  • 必须先 配置 DevCenter、项目、网络连接、Dev Box 定义和池,然后才能创建开发箱
  • 必须先 配置 DevCenter、项目、目录和环境类型,然后才能创建环境

使用 Azure Active Directory 凭据创建

若要使用 Azure Active Directory (AAD) 令牌凭据,请提供从 azure 标识 库获取的所需凭据类型的实例。

若要使用 AAD 进行身份验证,必须先安装 pipazure-identity

设置后,可以从 azure.identity 中选择要使用的 凭据 类型。 例如, 可以使用 DefaultAzureCredential 对客户端进行身份验证:

将 AAD 应用程序的客户端 ID、租户 ID 和客户端密码的值设置为环境变量: AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_CLIENT_SECRET

使用返回的令牌凭据对客户端进行身份验证:

>>> import os
>>> from azure.developer.devcenter import DevCenterClient
>>> from azure.identity import DefaultAzureCredential
>>> tenant_id = os.environ['AZURE_TENANT_ID']
>>> endpoint = os.environ["DEVCENTER_ENDPOINT"]
>>> client = DevCenterClient(endpoint, credential=DefaultAzureCredential())

示例

Dev Box 管理

>>> import os
>>> from azure.developer.devcenter import DevCenterClient
>>> from azure.identity import DefaultAzureCredential
>>> from azure.core.exceptions import HttpResponseError
>>> tenant_id = os.environ['AZURE_TENANT_ID']
>>> endpoint = os.environ["DEVCENTER_ENDPOINT"]
>>> client = DevCenterClient(endpoint, credential=DefaultAzureCredential())
>>> try:
        # Fetch control plane resource dependencies
        projects = list(client.list_projects(top=1))
        target_project_name = projects[0]['name']

        pools = list(client.list_pools(target_project_name, top=1))
        target_pool_name = pools[0]['name']

        # Stand up a new dev box
        create_response = client.begin_create_dev_box(target_project_name, "me","Test_DevBox", {"poolName": target_pool_name})
        devbox_result = create_response.result()

        LOG.info(f"Provisioned dev box with status {devbox_result['provisioningState']}.")

        # Connect to the provisioned dev box
        remote_connection_response = client.get_remote_connection(target_project_name, "me", "Test_DevBox")
        LOG.info(f"Connect to the dev box using web URL {remote_connection_response['webUrl']}")

        # Tear down the dev box when finished
        delete_response = client.begin_delete_dev_box(target_project_name, "me", "Test_DevBox")
        delete_response.wait()
        LOG.info("Deleted dev box successfully.")
    except HttpResponseError as e:
        print('service responds error: {}'.format(e.response.json()))

环境管理

>>> import os
>>> from azure.developer.devcenter import DevCenterClient
>>> from azure.identity import DefaultAzureCredential
>>> from azure.core.exceptions import HttpResponseError
>>> tenant_id = os.environ['AZURE_TENANT_ID']
>>> endpoint = os.environ["DEVCENTER_ENDPOINT"]
>>> client = DevCenterClient(endpoint, credential=DefaultAzureCredential())
>>> try:
        # Fetch control plane resource dependencies
        target_project_name = list(client.list_projects(top=1))[0]['name']
        target_catalog_item_name = list(client.list_catalog_items(target_project_name, top=1))[0]['name']
        target_environment_type_name = list(client.list_environment_types(target_project_name, top=1))[0]['name']
        target_catalog_name = list(client.list_catalog_items(target_project_name, top=1))[0]['catalogName']

        # Stand up a new environment
        create_response = client.begin_create_or_update_environment(target_project_name,
                                                           "Dev_Environment",
                                                           {"catalogName": target_catalog_name,
                                                            "catalogItemName": target_catalog_item_name,
                                                            "environmentType": target_environment_type_name
                                                            })     
        
        environment_result = create_response.result()

        LOG.info(f"Provisioned environment with status {environment_result['provisioningState']}.")

        # Fetch deployment artifacts
        environment = client.get_environment_by_user(target_project_name, "me", "Dev_Environment")
        LOG.info(environment)

        # Tear down the environment when finished
        delete_response = client.begin_delete_environment(target_project_name, "me", "Dev_Environment")
        delete_response.wait()
        LOG.info("Completed deletion for the environment.")
    except HttpResponseError as e:
        print('service responds error: {}'.format(e.response.json()))

关键概念

开发箱是指在 Azure 中运行的托管开发人员计算机。 开发箱在池中预配,用于定义用于开发箱的网络和映像。

环境是指模板化开发人员环境,它将模板 (目录项) 和参数组合在一起。

故障排除

在初始请求和长时间运行的操作期间可能会发生错误,并且将提供有关如何解决错误的信息。 请确保确认依赖资源(如池和目录)已正确设置并且处于正常状态。 当依赖资源处于失败状态时,将无法使用包创建资源。

后续步骤

通过浏览我们的示例并开始使用该包开始!

贡献

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 https://cla.microsoft.com

提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。

本项目采用 Microsoft 开源行为准则。 有关详细信息,请参阅“行为准则常见问题解答”,如有其他任何问题或意见,请联系 opencode@microsoft.com。