diff --git a/src/devcenter/azext_devcenter/manual/_client_factory.py b/src/devcenter/azext_devcenter/manual/_client_factory.py index bc8612ca4c5..7cead06b4dd 100644 --- a/src/devcenter/azext_devcenter/manual/_client_factory.py +++ b/src/devcenter/azext_devcenter/manual/_client_factory.py @@ -7,21 +7,31 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +from .helper import get_project_data -def cf_devcenter_dataplane(cli_ctx, endpoint, project_name=None, *_): +def cf_devcenter_dataplane(cli_ctx, dev_center, project_name=None, *_): from azure.cli.core.commands.client_factory import get_mgmt_service_client from azext_devcenter.vendored_sdks.devcenter_dataplane import ( DevCenterDataplaneClient, ) + project = get_project_data(cli_ctx, dev_center, project_name) + endpoint = project.endpoint + # We need to set the project name even if we don't need this information + # since initializing DevCenterDataplaneClient requires this param + if project_name is None: + project_name = project.name + cli_ctx.cloud.endpoints.active_directory_resource_id = "https://devcenter.azure.com" return get_mgmt_service_client( cli_ctx, DevCenterDataplaneClient, + subscription_bound=False, + base_url_bound=False, endpoint=endpoint, - project_name=project_name, + project_name=project_name ) def cf_project_dp(cli_ctx, dev_center, *_): diff --git a/src/devcenter/azext_devcenter/manual/_params.py b/src/devcenter/azext_devcenter/manual/_params.py index fb50f6628a7..4004e0239fd 100644 --- a/src/devcenter/azext_devcenter/manual/_params.py +++ b/src/devcenter/azext_devcenter/manual/_params.py @@ -35,8 +35,6 @@ def load_arguments(self, _): required=True, help="The DevCenter to operate on.", ) - c.argument('filter_', options_list=['--filter'], type=str, help='An OData filter clause to apply to the ' - 'operation.') with self.argument_context("devcenter dev project show") as c: c.argument( @@ -70,8 +68,6 @@ def load_arguments(self, _): type=str, help="The DevCenter Project upon which to execute operations.", ) - c.argument('filter_', options_list=['--filter'], type=str, help='An OData filter clause to apply to the ' - 'operation.') with self.argument_context("devcenter dev pool show") as c: c.argument( @@ -119,9 +115,7 @@ def load_arguments(self, _): options_list=["--pool-name", "--pool"], type=str, help="The name of a pool of Dev Boxes.", - ) - c.argument('filter_', options_list=['--filter'], type=str, help='An OData filter clause to apply to the ' - 'operation.') + ) with self.argument_context("devcenter dev schedule show") as c: c.argument( @@ -163,12 +157,6 @@ def load_arguments(self, _): type=str, help="The DevCenter to operate on.", ) - c.argument( - "filter_", - options_list=["--filter"], - type=str, - help="An OData $filter clause to apply to the " "operation.", - ) c.argument( "project_name", options_list=[ diff --git a/src/devcenter/azext_devcenter/manual/commands.py b/src/devcenter/azext_devcenter/manual/commands.py index d3d89e03ee4..4eb1c95632a 100644 --- a/src/devcenter/azext_devcenter/manual/commands.py +++ b/src/devcenter/azext_devcenter/manual/commands.py @@ -220,19 +220,19 @@ def load_command_table(self, _): # data plane with self.command_group( - "devcenter dev project", devcenter_project_dp, client_factory=cf_project_dp + "devcenter dev project", devcenter_project_dp ) as g: g.custom_command("list", "devcenter_project_list_dp") g.custom_show_command("show", "devcenter_project_show_dp") with self.command_group( - "devcenter dev pool", devcenter_pool_dp, client_factory=cf_pool_dp + "devcenter dev pool", devcenter_pool_dp ) as g: g.custom_command("list", "devcenter_pool_list_dp") g.custom_show_command("show", "devcenter_pool_show_dp") with self.command_group( - "devcenter dev dev-box", devcenter_dev_box_dp, client_factory=cf_dev_box_dp + "devcenter dev dev-box", devcenter_dev_box_dp ) as g: g.custom_command("list", "devcenter_dev_box_list") g.custom_show_command("show", "devcenter_dev_box_show") @@ -254,30 +254,27 @@ def load_command_table(self, _): g.custom_command('skip-upcoming-action', 'devcenter_dev_box_skip_upcoming_action') with self.command_group( - "devcenter dev artifact", devcenter_artifact_dp, client_factory=cf_artifact_dp + "devcenter dev artifact", devcenter_artifact_dp ) as g: g.custom_command("list", "devcenter_artifact_list") with self.command_group( "devcenter dev catalog-item", - devcenter_catalog_item_dp, - client_factory=cf_catalog_item_dp, + devcenter_catalog_item_dp ) as g: g.custom_command("list", "devcenter_catalog_item_list") g.custom_show_command("show", "devcenter_catalog_item_show") with self.command_group( "devcenter dev catalog-item-version", - devcenter_catalog_item_version_dp, - client_factory=cf_catalog_item_version_dp, + devcenter_catalog_item_version_dp ) as g: g.custom_command("list", "devcenter_catalog_item_version_list") g.custom_show_command("show", "devcenter_catalog_item_version_show") with self.command_group( "devcenter dev environment", - devcenter_environment_dp, - client_factory=cf_environment_dp, + devcenter_environment_dp ) as g: g.custom_command("list", "devcenter_environment_list") g.custom_show_command("show", "devcenter_environment_show") @@ -307,19 +304,18 @@ def load_command_table(self, _): with self.command_group( "devcenter dev environment-type", - devcenter_environment_type_dp, - client_factory=cf_environment_type_dp, + devcenter_environment_type_dp ) as g: g.custom_command("list", "devcenter_environment_type_list_dp") with self.command_group( - "devcenter dev schedule", devcenter_schedule_dp, client_factory=cf_schedule_dp + "devcenter dev schedule", devcenter_schedule_dp ) as g: g.custom_command("list", "devcenter_schedule_list_dp") g.custom_show_command("show", "devcenter_schedule_show_dp") with self.command_group( - "devcenter dev notification setting", devcenter_notification_setting_dp, client_factory=cf_notification_setting_dp + "devcenter dev notification setting", devcenter_notification_setting_dp ) as g: g.custom_command("list-allowed-culture", "devcenter_notification_setting_list_allowed_culture_dp") g.custom_show_command("show", "devcenter_notification_setting_show_dp") diff --git a/src/devcenter/azext_devcenter/manual/custom.py b/src/devcenter/azext_devcenter/manual/custom.py index 4997bcdc840..539bafcad71 100644 --- a/src/devcenter/azext_devcenter/manual/custom.py +++ b/src/devcenter/azext_devcenter/manual/custom.py @@ -5,7 +5,6 @@ from azure.cli.core.util import sdk_no_wait from ._client_factory import cf_devcenter_dataplane -from .helper import get_endpoint # customized control plane commands (these will override the generated as they are imported second) @@ -301,62 +300,54 @@ def devcenter_schedule_delete(client, # dataplane commands -def devcenter_project_list_dp(cmd, dev_center, filter_=None): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint) - return cf_dataplane.project.list(filter=filter_) +def devcenter_project_list_dp(cmd, dev_center): + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center) + return cf_dataplane.project.list() def devcenter_project_show_dp(cmd, dev_center, project_name): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.project.get(project_name=project_name) -def devcenter_pool_list_dp(cmd, dev_center, project_name, filter_=None): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) - return cf_dataplane.pool.list(filter=filter_) +def devcenter_pool_list_dp(cmd, dev_center, project_name): + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) + return cf_dataplane.pool.list() def devcenter_pool_show_dp(cmd, dev_center, project_name, pool_name): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.pool.get(pool_name=pool_name) def devcenter_schedule_list_dp( - cmd, dev_center, project_name, pool_name, filter_=None + cmd, dev_center, project_name, pool_name ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) - return cf_dataplane.schedule.list(pool_name=pool_name, filter=filter_) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) + return cf_dataplane.schedule.list(pool_name=pool_name) def devcenter_schedule_show_dp(cmd, dev_center, project_name, pool_name, schedule_name): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.schedule.get(pool_name=pool_name, schedule_name=schedule_name ) def devcenter_dev_box_list( - cmd, dev_center, filter_=None, project_name=None, user_id=None + cmd, dev_center, project_name=None, user_id=None ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) if project_name is not None and user_id is not None: return cf_dataplane.dev_box.list_by_project( - filter=filter_, user_id=user_id + user_id=user_id ) if user_id is not None: - return cf_dataplane.dev_box.list_by_user(filter=filter_, user_id=user_id) - return cf_dataplane.dev_box.list(filter=filter_) + return cf_dataplane.dev_box.list_by_user(user_id=user_id) + return cf_dataplane.dev_box.list() def devcenter_dev_box_show(cmd, dev_center, project_name, user_id, dev_box_name): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.dev_box.get(user_id=user_id, dev_box_name=dev_box_name ) @@ -364,8 +355,7 @@ def devcenter_dev_box_show(cmd, dev_center, project_name, user_id, dev_box_name) def devcenter_dev_box_create( cmd, dev_center, project_name, dev_box_name, pool_name, user_id, no_wait=False, local_administrator=None ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) body = {} body["pool_name"] = pool_name if local_administrator is not None: @@ -382,8 +372,7 @@ def devcenter_dev_box_create( def devcenter_dev_box_delete( cmd, dev_center, project_name, user_id, dev_box_name, no_wait=False ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return sdk_no_wait( no_wait, cf_dataplane.dev_box.begin_delete, @@ -395,8 +384,7 @@ def devcenter_dev_box_delete( def devcenter_dev_box_get_remote_connection( cmd, dev_center, project_name, user_id, dev_box_name ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.dev_box.get_remote_connection( user_id=user_id, dev_box_name=dev_box_name ) @@ -405,8 +393,7 @@ def devcenter_dev_box_get_remote_connection( def devcenter_dev_box_start( cmd, dev_center, project_name, user_id, dev_box_name, no_wait=False ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return sdk_no_wait( no_wait, cf_dataplane.dev_box.begin_start, @@ -418,8 +405,7 @@ def devcenter_dev_box_start( def devcenter_dev_box_stop( cmd, dev_center, project_name, user_id, dev_box_name, no_wait=False, hibernate=None ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return sdk_no_wait( no_wait, cf_dataplane.dev_box.begin_stop, @@ -434,8 +420,7 @@ def devcenter_dev_box_delay_upcoming_action(cmd, dev_center, project_name, dev_box_name, upcoming_action_id, delay_until): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.dev_box.delay_upcoming_action(user_id=user_id, dev_box_name=dev_box_name, upcoming_action_id=upcoming_action_id, @@ -445,8 +430,7 @@ def devcenter_dev_box_delay_upcoming_action(cmd, dev_center, project_name, def devcenter_dev_box_list_upcoming_action(cmd, dev_center, project_name, user_id, dev_box_name): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.dev_box.list_upcoming_actions(user_id=user_id, dev_box_name=dev_box_name) @@ -455,8 +439,7 @@ def devcenter_dev_box_show_upcoming_action(cmd, dev_center, project_name, user_id, dev_box_name, upcoming_action_id): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.dev_box.get_upcoming_action(user_id=user_id, dev_box_name=dev_box_name, upcoming_action_id=upcoming_action_id) @@ -466,16 +449,14 @@ def devcenter_dev_box_skip_upcoming_action(cmd, dev_center, project_name, user_id, dev_box_name, upcoming_action_id): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.dev_box.skip_upcoming_action(user_id=user_id, dev_box_name=dev_box_name, upcoming_action_id=upcoming_action_id) def devcenter_environment_list(cmd, dev_center, project_name, user_id): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) if user_id is not None: return cf_dataplane.environments.list_by_project_by_user(user_id=user_id) return cf_dataplane.environments.list_by_project() @@ -484,8 +465,7 @@ def devcenter_environment_list(cmd, dev_center, project_name, user_id): def devcenter_environment_show( cmd, dev_center, project_name, user_id, environment_name ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.environments.get( user_id=user_id, environment_name=environment_name ) @@ -505,8 +485,7 @@ def devcenter_environment_create(cmd, tags=None, user=None, no_wait=False): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) body = {} if description is not None: body['description'] = description @@ -544,8 +523,7 @@ def devcenter_environment_update(cmd, scheduled_tasks=None, tags=None, no_wait=False): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) body = {} if description is not None: body['description'] = description @@ -570,8 +548,7 @@ def devcenter_environment_delete_environment(cmd, user_id, environment_name, no_wait=False): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return sdk_no_wait( no_wait, cf_dataplane.environments.begin_delete, @@ -590,8 +567,7 @@ def devcenter_environment_custom_action( parameters=None, no_wait=False, ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) body = {} body["action_id"] = action_id if parameters is not None: @@ -615,8 +591,7 @@ def devcenter_environment_deploy_action( parameters=None, no_wait=False, ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) body = {} body["action_id"] = action_id if parameters is not None: @@ -633,8 +608,7 @@ def devcenter_environment_deploy_action( def devcenter_artifact_list( cmd, dev_center, project_name, user_id, environment_name, artifact_path=None ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) if (user_id is not None and environment_name is not None and artifact_path is not None @@ -650,24 +624,21 @@ def devcenter_artifact_list( def devcenter_catalog_item_list(cmd, dev_center, project_name): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.catalog_items.list() def devcenter_catalog_item_show( cmd, dev_center, project_name, catalog_item_id ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.catalog_items.get(catalog_item_id=catalog_item_id) def devcenter_catalog_item_version_list( cmd, dev_center, project_name, catalog_item_id ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.catalog_item_versions.list( catalog_item_id=catalog_item_id ) @@ -676,8 +647,7 @@ def devcenter_catalog_item_version_list( def devcenter_catalog_item_version_show( cmd, dev_center, project_name, catalog_item_id, version, ): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.catalog_item_versions.get( catalog_item_id=catalog_item_id, version=version, @@ -685,22 +655,19 @@ def devcenter_catalog_item_version_show( def devcenter_environment_type_list_dp(cmd, dev_center, project_name): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.environment_type.list() def devcenter_dev_center_show_notification_setting(cmd, dev_center, project_name, user_id): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.notification_setting.get(user_id=user_id) def devcenter_notification_setting_list_allowed_culture_dp(cmd, dev_center, project_name, user_id): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) return cf_dataplane.notification_setting.list_allowed_cultures(user_id=user_id) @@ -711,8 +678,7 @@ def devcenter_notification_setting_create_dp(cmd, dev_center, project_name, boolean_enabled, email_notification, webhook_notification): - endpoint = get_endpoint(cmd.cli_ctx, dev_center) - cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, endpoint, project_name) + cf_dataplane = cf_devcenter_dataplane(cmd.cli_ctx, dev_center, project_name) body = {} body['name'] = "default" body['enabled'] = enabled diff --git a/src/devcenter/azext_devcenter/manual/helper.py b/src/devcenter/azext_devcenter/manual/helper.py index 1e7faf0930b..24ce83f4289 100644 --- a/src/devcenter/azext_devcenter/manual/helper.py +++ b/src/devcenter/azext_devcenter/manual/helper.py @@ -1,8 +1,47 @@ -from ..generated._client_factory import cf_devcenter_cl - -#To do regional host name customization -#Get all projects from ARG - find dev_center from devCenterId property -#Take devcenterUri property from found project -def get_endpoint(cmd, dev_center): - cf_controlplane = cf_devcenter_cl(cmd.cli_ctx) - return "" \ No newline at end of file +from azure.cli.core.azclierror import ResourceNotFoundError +from azure.cli.core.util import send_raw_request +import json + +class ProjectData: + def __init__(self,endpoint,name): + self.endpoint=endpoint + self.name=name + +def get_project_data(cli_ctx, dev_center_name, project_name=None): + management_hostname = cli_ctx.cloud.endpoints.resource_manager.strip('/') + api_version = "2021-03-01" + + project_filter = "" + if project_name is not None: + project_filter = f"| where name =~ '{project_name}'" + + query = f""" Resources |where type =~'Microsoft.devcenter/projects' + {project_filter} + | extend devCenterArr = split(properties.devCenterId, '/') + | extend devCenterName = devCenterArr[array_length(devCenterArr) -1] + | where devCenterName =~ '{dev_center_name}' + | take 1 + | extend devCenterUri = properties.devCenterUri + | project name,devCenterUri """ + + content = {"query": query} + request_url = f"{management_hostname}/providers/Microsoft.ResourceGraph/resources?api-version={api_version}" + + response = send_raw_request(cli_ctx, "POST", request_url, body=json.dumps(content), resource=cli_ctx.cloud.endpoints.resource_manager) + resource_graph_data = response.json()['data'] + + #TODO: confirm this scenario and error messages + if len(resource_graph_data) == 0 and project_name is None: + error_message = f"""No projects were found in the dev center \ +'{dev_center_name}'. Please contact your admin to gain access to specific projects.""" + raise ResourceNotFoundError(error_message) + elif len(resource_graph_data) == 0: + error_message = f"""No project '{project_name}' was found in the dev center \ +'{dev_center_name}'. Please contact your admin to gain access to specific projects.""" + raise ResourceNotFoundError(error_message) + + project = resource_graph_data[0] + if project_name is None: + project_name = project['name'] + endpoint = project['devCenterUri'] + return ProjectData(endpoint, name=project_name) \ No newline at end of file diff --git a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/aio/_dev_center.py b/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/aio/_dev_center.py deleted file mode 100644 index 80c2b214e2b..00000000000 --- a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/aio/_dev_center.py +++ /dev/null @@ -1,108 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from typing import Any, TYPE_CHECKING - -from azure.mgmt.core import AsyncARMPipelineClient -from msrest import Deserializer, Serializer - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials_async import AsyncTokenCredential - -from ._configuration import DevCenterConfiguration -from .operations import ProjectOperations -from .operations import PoolOperations -from .operations import ScheduleOperations -from .operations import DevBoxOperations -from .operations import EnvironmentsOperations -from .operations import ActionsOperations -from .operations import ArtifactsOperations -from .operations import CatalogItemOperations -from .operations import CatalogItemsOperations -from .operations import CatalogItemVersionsOperations -from .operations import EnvironmentTypeOperations -from .. import models - - -class DevCenter(object): - """The devcenter common definitions and endpoints. - - :ivar project: ProjectOperations operations - :vartype project: dev_center.aio.operations.ProjectOperations - :ivar pool: PoolOperations operations - :vartype pool: dev_center.aio.operations.PoolOperations - :ivar schedule: ScheduleOperations operations - :vartype schedule: dev_center.aio.operations.ScheduleOperations - :ivar dev_box: DevBoxOperations operations - :vartype dev_box: dev_center.aio.operations.DevBoxOperations - :ivar environments: EnvironmentsOperations operations - :vartype environments: dev_center.aio.operations.EnvironmentsOperations - :ivar actions: ActionsOperations operations - :vartype actions: dev_center.aio.operations.ActionsOperations - :ivar artifacts: ArtifactsOperations operations - :vartype artifacts: dev_center.aio.operations.ArtifactsOperations - :ivar catalog_item: CatalogItemOperations operations - :vartype catalog_item: dev_center.aio.operations.CatalogItemOperations - :ivar catalog_items: CatalogItemsOperations operations - :vartype catalog_items: dev_center.aio.operations.CatalogItemsOperations - :ivar catalog_item_versions: CatalogItemVersionsOperations operations - :vartype catalog_item_versions: dev_center.aio.operations.CatalogItemVersionsOperations - :ivar environment_type: EnvironmentTypeOperations operations - :vartype environment_type: dev_center.aio.operations.EnvironmentTypeOperations - :param credential: Credential needed for the client to connect to Azure. - :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. - """ - - def __init__( - self, - credential: "AsyncTokenCredential", - **kwargs: Any - ) -> None: - base_url = 'https://{devCenter}.{devCenterDnsSuffix}' - self._config = DevCenterConfiguration(credential, **kwargs) - self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) - - client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} - self._serialize = Serializer(client_models) - self._serialize.client_side_validation = False - self._deserialize = Deserializer(client_models) - - self.project = ProjectOperations( - self._client, self._config, self._serialize, self._deserialize) - self.pool = PoolOperations( - self._client, self._config, self._serialize, self._deserialize) - self.schedule = ScheduleOperations( - self._client, self._config, self._serialize, self._deserialize) - self.dev_box = DevBoxOperations( - self._client, self._config, self._serialize, self._deserialize) - self.environments = EnvironmentsOperations( - self._client, self._config, self._serialize, self._deserialize) - self.actions = ActionsOperations( - self._client, self._config, self._serialize, self._deserialize) - self.artifacts = ArtifactsOperations( - self._client, self._config, self._serialize, self._deserialize) - self.catalog_item = CatalogItemOperations( - self._client, self._config, self._serialize, self._deserialize) - self.catalog_items = CatalogItemsOperations( - self._client, self._config, self._serialize, self._deserialize) - self.catalog_item_versions = CatalogItemVersionsOperations( - self._client, self._config, self._serialize, self._deserialize) - self.environment_type = EnvironmentTypeOperations( - self._client, self._config, self._serialize, self._deserialize) - - async def close(self) -> None: - await self._client.close() - - async def __aenter__(self) -> "DevCenter": - await self._client.__aenter__() - return self - - async def __aexit__(self, *exc_details) -> None: - await self._client.__aexit__(*exc_details) diff --git a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_project_operations.py b/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_project_operations.py index daf9de6f980..f0e6e1ef25a 100644 --- a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_project_operations.py +++ b/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_project_operations.py @@ -39,6 +39,12 @@ class ProjectOperations(object): models = models + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + def list( self, filter=None, # type: Optional[str]