diff --git a/src/devcenter/azext_devcenter/_help.py b/src/devcenter/azext_devcenter/_help.py index 2a3e0b75ec3..6a63e84a46b 100644 --- a/src/devcenter/azext_devcenter/_help.py +++ b/src/devcenter/azext_devcenter/_help.py @@ -135,6 +135,22 @@ --pool-name "DevPool" --project-name "DevProject" """ +helps[ + "devcenter dev image-build-logs show" +] = """ + type: command + short-summary: "Gets the log for an imaging build task." + examples: + - name: Get using dev center + text: |- + az devcenter dev image-build-logs show--dev-center-name "ContosoDevCenter" \ + --project-name "DevProject" --image-build-log-id "91835dc0-ef5a-4f58-9e3a-099aea8481f4" + - name: Get using endpoint + text: |- + az devcenter dev image-build-logs show --endpoint "https://8a40af38-3b4c-4672-a6a4-5e964b1870ed-contosodevcenter.centralus.devcenter.azure.com/" \ +--project-name "DevProject"--image-build-log-id "91835dc0-ef5a-4f58-9e3a-099aea8481f4" +""" + helps[ "devcenter dev dev-box" ] = """ @@ -423,6 +439,70 @@ "schedule-default" --user-id "00000000-0000-0000-0000-000000000000" """ +helps[ + "devcenter dev dev-box show-snapshot" +] = """ + type: command + short-summary: "Gets a snapshot by snapshot id." + examples: + - name: Get snapshot using dev center + text: |- + az devcenter dev dev-box show-snapshot --name "myDevBox" --dev-center-name "ContosoDevCenter" \ +--project-name "DevProject" --user-id "00000000-0000-0000-0000-000000000000" --snapshot-id "CPC_974f0852-a0f4-4a9f-8ce7-d0d0d7a604cf_9b656834-3563-4bca-93c6-f90cfa3c6797" + - name: Get snapshot using endpoint + text: |- + az devcenter dev dev-box show-snapshot --name "MyDevBox" --endpoint "https://8a40af38-3b4c-4672-a6a4-5e964b1870ed-contosodevcenter.centralus.devcenter.azure.com/" \ +--project-name "DevProject" --user-id "00000000-0000-0000-0000-000000000000" --snapshot-id "CPC_974f0852-a0f4-4a9f-8ce7-d0d0d7a604cf_9b656834-3563-4bca-93c6-f90cfa3c6797" +""" + +helps[ + "devcenter dev dev-box list-snapshot" +] = """ + type: command + short-summary: "Lists snapshots for this Dev Box." + examples: + - name: List snapshots using dev center + text: |- + az devcenter dev dev-box list-snapshot --dev-center-name "ContosoDevCenter" \ +--project-name "DevProject" --name "myDevBox" --user-id "00000000-0000-0000-0000-000000000000" + - name: List snapshots using endpoint + text: |- + az devcenter dev dev-box list-snapshot --name "MyDevBox" --endpoint "https://8a40af38-3b4c-4672-a6a4-5e964b1870ed-contosodevcenter.centralus.devcenter.azure.com/" \ +--project-name "DevProject" --user-id "00000000-0000-0000-0000-000000000000" +""" + +helps[ + "devcenter dev dev-box capture-snapshot" +] = """ + type: command + short-summary: "Captures a manual snapshot of the Dev Box." + examples: + - name: Capture snapshot using dev center + text: |- + az devcenter dev dev-box capture-snapshot --dev-center-name "ContosoDevCenter" \ +--project-name "DevProject" --name "myDevBox" --user-id "00000000-0000-0000-0000-000000000000" + - name: Capture snapshot using endpoint + text: |- + az devcenter dev dev-box capture-snapshot --name "MyDevBox" --endpoint "https://8a40af38-3b4c-4672-a6a4-5e964b1870ed-contosodevcenter.centralus.devcenter.azure.com/" \ +--project-name "DevProject" --user-id "00000000-0000-0000-0000-000000000000" +""" + +helps[ + "devcenter dev dev-box restore-snapshot" +] = """ + type: command + short-summary: "Restores a Dev Box to a specified snapshot." + examples: + - name: Restore using dev center + text: |- + az devcenter dev dev-box restore-snapshot --dev-center-name "ContosoDevCenter" \ +--project-name "DevProject" --name "myDevBox" --user-id "00000000-0000-0000-0000-000000000000" --snapshot-id "CPC_974f0852-a0f4-4a9f-8ce7-d0d0d7a604cf_9b656834-3563-4bca-93c6-f90cfa3c6797" + - name: Restore using endpoint + text: |- + az devcenter dev dev-box repair --name "MyDevBox" --endpoint "https://8a40af38-3b4c-4672-a6a4-5e964b1870ed-contosodevcenter.centralus.devcenter.azure.com/" \ +--project-name "DevProject" --user-id "00000000-0000-0000-0000-000000000000" --snapshot-id "CPC_974f0852-a0f4-4a9f-8ce7-d0d0d7a604cf_9b656834-3563-4bca-93c6-f90cfa3c6797" +""" + helps[ "devcenter dev environment" ] = """ diff --git a/src/devcenter/azext_devcenter/_params.py b/src/devcenter/azext_devcenter/_params.py index 40fe53f3e09..f75e4dc1259 100644 --- a/src/devcenter/azext_devcenter/_params.py +++ b/src/devcenter/azext_devcenter/_params.py @@ -139,6 +139,26 @@ def load_arguments(self, _): help="The name of a pool of dev boxes.", ) + with self.argument_context("devcenter dev image-build-logs show") as c: + c.argument( + "dev_center", + arg_type=dev_center_type, + ) + c.argument( + "project_name", + arg_type=project_type, + ) + c.argument( + "endpoint", + arg_type=endpoint, + ) + c.argument( + "image_build_log_id", + options_list=["--image-build-log-id"], + type=str, + help="An imaging build log id.", + ) + with self.argument_context( "devcenter dev dev-box list", validator=validate_dev_box_list ) as c: @@ -469,6 +489,120 @@ def load_arguments(self, _): help="The name of an action that will take place on a dev box.", ) + with self.argument_context("devcenter dev dev-box show-snapshot") as c: + c.argument( + "dev_center", + arg_type=dev_center_type, + ) + c.argument( + "project_name", + arg_type=project_type, + ) + c.argument( + "endpoint", + arg_type=endpoint, + ) + c.argument( + "user_id", + type=str, + help="The AAD object id of the user. If value is 'me', the identity is taken " + "from the authentication context.", + ) + c.argument( + "dev_box_name", + options_list=["--name", "-n", "--dev-box-name"], + type=str, + help="The name of a dev " "box.", + ) + c.argument( + "snapshot_id", + type=str, + help="The id of the snapshot. Should be treated as opaque string.", + ) + + with self.argument_context("devcenter dev dev-box list-snapshot") as c: + c.argument( + "dev_center", + arg_type=dev_center_type, + ) + c.argument( + "project_name", + arg_type=project_type, + ) + c.argument( + "endpoint", + arg_type=endpoint, + ) + c.argument( + "user_id", + type=str, + help="The AAD object id of the user. If value is 'me', the identity is taken " + "from the authentication context.", + ) + c.argument( + "dev_box_name", + options_list=["--name", "-n", "--dev-box-name"], + type=str, + help="The name of a dev " "box.", + ) + + with self.argument_context("devcenter dev dev-box capture-snapshot") as c: + c.argument( + "dev_center", + arg_type=dev_center_type, + ) + c.argument( + "project_name", + arg_type=project_type, + ) + c.argument( + "endpoint", + arg_type=endpoint, + ) + c.argument( + "user_id", + type=str, + help="The AAD object id of the user. If value is 'me', the identity is taken " + "from the authentication context.", + ) + c.argument( + "dev_box_name", + options_list=["--name", "-n", "--dev-box-name"], + type=str, + help="The name of a dev " "box.", + ) + + with self.argument_context("devcenter dev dev-box restore-snapshot") as c: + c.argument( + "dev_center", + arg_type=dev_center_type, + ) + c.argument( + "project_name", + arg_type=project_type, + ) + c.argument( + "endpoint", + arg_type=endpoint, + ) + c.argument( + "user_id", + type=str, + help="The AAD object id of the user. If value is 'me', the identity is taken " + "from the authentication context.", + ) + c.argument( + "dev_box_name", + options_list=["--name", "-n", "--dev-box-name"], + type=str, + help="The name of a dev " "box.", + ) + c.argument( + "snapshot_id", + type=str, + help="The snapshot id to use for the restore operation.", + ) + with self.argument_context( "devcenter dev dev-box delay-action", validator=validate_time ) as c: @@ -795,6 +929,13 @@ def load_arguments(self, _): type=str, help="The name " "of the environment.", ) + c.argument( + "force", + arg_type=get_three_state_flag(), + help="Optional to force environment deletion even if the environment definition does not exist. " + "This is a best-effort delete, and anything custom that forces resource creation beyond the associated resource group may not be deleted.", + is_preview=True, + ) with self.argument_context("devcenter dev catalog list") as c: c.argument( diff --git a/src/devcenter/azext_devcenter/commands.py b/src/devcenter/azext_devcenter/commands.py index fca5acf0194..a1689b3c5f3 100644 --- a/src/devcenter/azext_devcenter/commands.py +++ b/src/devcenter/azext_devcenter/commands.py @@ -321,6 +321,9 @@ def load_command_table(self, _): g.custom_command("list", "devcenter_schedule_list_dp") g.custom_show_command("show", "devcenter_schedule_show_dp") + with self.command_group("devcenter dev image-build-logs", dev_boxes_dp) as g: + g.custom_show_command("show", "devcenter_image_build_logs_show") \ + with self.command_group("devcenter dev dev-box") as g: g.custom_command("list", "devcenter_dev_box_list") g.custom_show_command("show", "devcenter_dev_box_show") @@ -345,6 +348,10 @@ def load_command_table(self, _): g.custom_command("delay-all-actions", "devcenter_dev_box_delay_all_actions") g.custom_command("list-operation", "devcenter_dev_box_list_operation") g.custom_command("show-operation", "devcenter_dev_box_show_operation") + g.custom_command("list-snapshot", "devcenter_dev_box_list_snapshot") + g.custom_command("show-snapshot", "devcenter_dev_box_show_snapshot") + g.custom_command("capture-snapshot", "devcenter_dev_box_capture_snapshot") + g.custom_command("restore-snapshot", "devcenter_dev_box_restore_snapshot") with self.command_group("devcenter dev environment") as g: g.custom_command("list", "devcenter_environment_list") diff --git a/src/devcenter/azext_devcenter/custom.py b/src/devcenter/azext_devcenter/custom.py index ab1b38ed1f4..fdaf997ec4b 100644 --- a/src/devcenter/azext_devcenter/custom.py +++ b/src/devcenter/azext_devcenter/custom.py @@ -803,6 +803,17 @@ def devcenter_pool_show_dp( project_name=project_name, pool_name=pool_name ) +def devcenter_image_build_logs_show_dp( + cmd, project_name, image_build_log_id, dev_center=None, endpoint=None +): + cf_dataplane = cf_devcenter_dataplane( + cmd.cli_ctx, endpoint, dev_center, project_name + ) + + return cf_dataplane.dev_boxes.get_image_build_logs( + project_name=project_name, image_build_log_id=image_build_log_id + ) + def devcenter_schedule_list_dp( cmd, project_name, pool_name=None, dev_center=None, endpoint=None @@ -1114,6 +1125,67 @@ def devcenter_dev_box_delay_all_actions( until=delayed_time, ) +def devcenter_dev_box_list_snapshot( + cmd, project_name, dev_box_name, user_id="me", dev_center=None, endpoint=None +): + cf_dataplane = cf_devcenter_dataplane( + cmd.cli_ctx, endpoint, dev_center, project_name + ) + return cf_dataplane.dev_boxes.list_snapshots( + project_name=project_name, user_id=user_id, dev_box_name=dev_box_name + ) + + +def devcenter_dev_box_show_snapshot( + cmd, + project_name, + dev_box_name, + snapshot_id, + user_id="me", + dev_center=None, + endpoint=None, +): + cf_dataplane = cf_devcenter_dataplane( + cmd.cli_ctx, endpoint, dev_center, project_name + ) + + return cf_dataplane.dev_boxes.get_snapshot( + project_name=project_name, + user_id=user_id, + dev_box_name=dev_box_name, + snapshot_id=snapshot_id, + ) + +def devcenter_dev_box_capture_snapshot( + cmd, project_name, dev_box_name, user_id="me", dev_center=None, endpoint=None +): + cf_dataplane = cf_devcenter_dataplane( + cmd.cli_ctx, endpoint, dev_center, project_name + ) + return cf_dataplane.dev_boxes.capture_snapshot( + project_name=project_name, user_id=user_id, dev_box_name=dev_box_name + ) + + +def devcenter_dev_box_restore_snapshot( + cmd, + project_name, + dev_box_name, + snapshot_id, + user_id="me", + dev_center=None, + endpoint=None, +): + cf_dataplane = cf_devcenter_dataplane( + cmd.cli_ctx, endpoint, dev_center, project_name + ) + + return cf_dataplane.dev_boxes.restore_snapshot( + project_name=project_name, + user_id=user_id, + dev_box_name=dev_box_name, + snapshot_id=snapshot_id, + ) def devcenter_dev_box_list_operation( cmd, project_name, dev_box_name, user_id="me", dev_center=None, endpoint=None @@ -1256,6 +1328,7 @@ def devcenter_environment_delete( project_name, no_wait=False, user_id="me", + force=None, dev_center=None, endpoint=None, ): @@ -1268,6 +1341,7 @@ def devcenter_environment_delete( project_name=project_name, user_id=user_id, environment_name=environment_name, + force=force, ) diff --git a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/_configuration.py b/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/_configuration.py index 8cc9e7bd6a8..e0ba5345f59 100644 --- a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/_configuration.py +++ b/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/_configuration.py @@ -28,14 +28,14 @@ class DevCenterClientConfiguration(Configuration): # pylint: disable=too-many-i :type endpoint: str :param credential: Credential needed for the client to connect to Azure. Required. :type credential: ~azure.core.credentials.TokenCredential - :keyword api_version: Api Version. Default value is "2024-05-01-preview". Note that overriding + :keyword api_version: Api Version. Default value is "2024-10-01-preview". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: super(DevCenterClientConfiguration, self).__init__(**kwargs) - api_version: str = kwargs.pop("api_version", "2024-05-01-preview") + api_version: str = kwargs.pop("api_version", "2024-10-01-preview") if endpoint is None: raise ValueError("Parameter 'endpoint' must not be None.") diff --git a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_operations.py b/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_operations.py index 45d863c4f8f..b3aef83bb74 100644 --- a/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_operations.py +++ b/src/devcenter/azext_devcenter/vendored_sdks/devcenter_dataplane/operations/_operations.py @@ -48,7 +48,7 @@ def build_dev_center_list_projects_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -71,7 +71,7 @@ def build_dev_center_get_project_request(project_name: str, **kwargs: Any) -> Ht _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -99,7 +99,7 @@ def build_dev_center_get_project_abilities_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -135,7 +135,7 @@ def build_dev_boxes_list_pools_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -170,7 +170,7 @@ def build_dev_boxes_get_pool_request(project_name: str, pool_name: str, **kwargs _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -199,6 +199,39 @@ def build_dev_boxes_get_pool_request(project_name: str, pool_name: str, **kwargs return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) +def build_dev_boxes_get_image_build_logs_request(project_name: str, image_build_log_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/projects/{projectName}/imageBuildLogs/{imageBuildLogId}" + path_format_arguments = { + "projectName": _SERIALIZER.url( + "project_name", + project_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + "imageBuildLogId": _SERIALIZER.url( + "image_build_log_id", image_build_log_id, "str", max_length=63, min_length=3, pattern=r"^[a-zA-Z0-9]{8}-([a-zA-Z0-9]{4}-){3}[a-zA-Z0-9]{12}$" + ), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + def build_dev_boxes_list_schedules_by_project_request( project_name: str, *, top: Optional[int] = None, filter: Optional[str] = None, **kwargs: Any @@ -206,7 +239,7 @@ def build_dev_boxes_list_schedules_by_project_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -243,7 +276,7 @@ def build_dev_boxes_list_schedules_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -283,7 +316,7 @@ def build_dev_boxes_get_schedule_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -320,7 +353,7 @@ def build_dev_boxes_list_all_dev_boxes_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -345,7 +378,7 @@ def build_dev_boxes_list_all_dev_boxes_by_user_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -382,7 +415,7 @@ def build_dev_boxes_list_dev_boxes_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -427,7 +460,7 @@ def build_dev_boxes_get_dev_box_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -477,7 +510,7 @@ def build_dev_boxes_create_dev_box_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -528,7 +561,7 @@ def build_dev_boxes_delete_dev_box_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -577,7 +610,7 @@ def build_dev_boxes_start_dev_box_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -626,7 +659,7 @@ def build_dev_boxes_stop_dev_box_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -677,7 +710,7 @@ def build_dev_boxes_restart_dev_box_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -726,7 +759,7 @@ def build_dev_boxes_repair_dev_box_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -775,7 +808,7 @@ def build_dev_boxes_list_customization_groups_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -826,7 +859,7 @@ def build_dev_boxes_get_customization_group_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -884,7 +917,7 @@ def build_dev_boxes_create_customization_group_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -948,7 +981,7 @@ def build_dev_boxes_get_customization_task_log_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "text/plain") # Construct URL @@ -1013,7 +1046,7 @@ def build_dev_boxes_get_remote_connection_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1062,7 +1095,7 @@ def build_dev_boxes_list_actions_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1111,7 +1144,7 @@ def build_dev_boxes_get_action_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1163,7 +1196,7 @@ def build_dev_boxes_skip_action_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1221,7 +1254,7 @@ def build_dev_boxes_delay_action_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1274,7 +1307,7 @@ def build_dev_boxes_delay_all_actions_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1317,6 +1350,209 @@ def build_dev_boxes_delay_all_actions_request( return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) +def build_dev_boxes_list_snapshots_request( + project_name: str, dev_box_name: str, user_id: str = "me", **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/projects/{projectName}/users/{userId}/devboxes/{devBoxName}/snapshots" + path_format_arguments = { + "projectName": _SERIALIZER.url( + "project_name", + project_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + "userId": _SERIALIZER.url( + "user_id", + user_id, + "str", + max_length=36, + min_length=2, + pattern=r"^[a-zA-Z0-9]{8}-([a-zA-Z0-9]{4}-){3}[a-zA-Z0-9]{12}$|^me$", + ), + "devBoxName": _SERIALIZER.url( + "dev_box_name", + dev_box_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_dev_boxes_get_snapshot_request( + project_name: str, dev_box_name: str, snapshot_id: str, user_id: str = "me", **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/projects/{projectName}/users/{userId}/devboxes/{devBoxName}/snapshots/{snapshotId}" + path_format_arguments = { + "projectName": _SERIALIZER.url( + "project_name", + project_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + "userId": _SERIALIZER.url( + "user_id", + user_id, + "str", + max_length=36, + min_length=2, + pattern=r"^[a-zA-Z0-9]{8}-([a-zA-Z0-9]{4}-){3}[a-zA-Z0-9]{12}$|^me$", + ), + "devBoxName": _SERIALIZER.url( + "dev_box_name", + dev_box_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + "snapshotId": _SERIALIZER.url( + "snapshot_id", snapshot_id, "str", max_length=63, min_length=3 + ), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_dev_boxes_capture_snapshot_request( + project_name: str, dev_box_name: str, user_id: str = "me", **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/projects/{projectName}/users/{userId}/devboxes/{devBoxName}:captureSnapshot" + path_format_arguments = { + "projectName": _SERIALIZER.url( + "project_name", + project_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + "userId": _SERIALIZER.url( + "user_id", + user_id, + "str", + max_length=36, + min_length=2, + pattern=r"^[a-zA-Z0-9]{8}-([a-zA-Z0-9]{4}-){3}[a-zA-Z0-9]{12}$|^me$", + ), + "devBoxName": _SERIALIZER.url( + "dev_box_name", + dev_box_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_dev_boxes_restore_snapshot_request( + project_name: str, + dev_box_name: str, + user_id: str = "me", + *, + snapshot_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/projects/{projectName}/users/{userId}/devboxes/{devBoxName}:restoreSnapshot" + path_format_arguments = { + "projectName": _SERIALIZER.url( + "project_name", + project_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + "userId": _SERIALIZER.url( + "user_id", + user_id, + "str", + max_length=36, + min_length=2, + pattern=r"^[a-zA-Z0-9]{8}-([a-zA-Z0-9]{4}-){3}[a-zA-Z0-9]{12}$|^me$", + ), + "devBoxName": _SERIALIZER.url( + "dev_box_name", + dev_box_name, + "str", + max_length=63, + min_length=3, + pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-_.]{2,62}$", + ), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + _params["snapshotId"] = _SERIALIZER.query("snapshot_id", snapshot_id, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) def build_dev_boxes_list_operations_request( project_name: str, @@ -1330,7 +1566,7 @@ def build_dev_boxes_list_operations_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1383,7 +1619,7 @@ def build_dev_boxes_get_operation_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1440,7 +1676,7 @@ def build_projects_list_customization_task_definitions_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1481,7 +1717,7 @@ def build_projects_get_customization_task_definition_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1528,7 +1764,7 @@ def build_projects_validate_customization_tasks_request(project_name: str, **kwa _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1563,7 +1799,7 @@ def build_deployment_environments_list_all_environments_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1598,7 +1834,7 @@ def build_deployment_environments_list_environments_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1641,7 +1877,7 @@ def build_deployment_environments_get_environment_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1691,7 +1927,7 @@ def build_deployment_environments_create_or_update_environment_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1737,12 +1973,12 @@ def build_deployment_environments_create_or_update_environment_request( def build_deployment_environments_delete_environment_request( - project_name: str, environment_name: str, user_id: str = "me", **kwargs: Any + project_name: str, environment_name: str, user_id: str = "me", force: Optional[bool] = None, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1778,6 +2014,8 @@ def build_deployment_environments_delete_environment_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if force is not None: + _params["force"] = _SERIALIZER.query("force", force, "bool") # Construct headers _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") @@ -1791,7 +2029,7 @@ def build_deployment_environments_list_catalogs_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1826,7 +2064,7 @@ def build_deployment_environments_get_catalog_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1867,7 +2105,7 @@ def build_deployment_environments_list_environment_definitions_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1902,7 +2140,7 @@ def build_deployment_environments_list_environment_definitions_by_catalog_reques _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1945,7 +2183,7 @@ def build_deployment_environments_get_environment_definition_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1994,7 +2232,7 @@ def build_deployment_environments_list_environment_types_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2030,7 +2268,7 @@ def build_environments_patch_environment_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2081,7 +2319,7 @@ def build_environments_get_outputs_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2136,7 +2374,7 @@ def build_environments_list_operations_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2189,7 +2427,7 @@ def build_environments_get_operation_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2246,7 +2484,7 @@ def build_environments_get_logs_by_operation_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "text/plain") # Construct URL @@ -2303,7 +2541,7 @@ def build_environments_list_actions_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2352,7 +2590,7 @@ def build_environments_get_action_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2404,7 +2642,7 @@ def build_environments_skip_action_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2462,7 +2700,7 @@ def build_environments_delay_action_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2515,7 +2753,7 @@ def build_environments_get_environment_type_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -2558,7 +2796,7 @@ def build_environments_get_environment_type_abilities_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-05-01-preview")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-10-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -3151,50 +3389,19 @@ def get_pool(self, project_name: str, pool_name: str, **kwargs: Any) -> JSON: return cls(pipeline_response, cast(JSON, deserialized), {}) return cast(JSON, deserialized) - + @distributed_trace - def list_schedules_by_project( - self, project_name: str, *, top: Optional[int] = None, filter: Optional[str] = None, **kwargs: Any - ) -> Iterable[JSON]: - """Lists all schedules within a project that are configured by your project administrator. + def get_image_build_logs(self, project_name: str, image_build_log_id: str, **kwargs: Any) -> JSON: + """Gets the log for an imaging build task. :param project_name: The DevCenter Project upon which to execute operations. Required. :type project_name: str - :keyword top: The maximum number of resources to return from the operation. Example: 'top=10'. - Default value is None. - :paramtype top: int - :keyword filter: An OData filter clause to apply to the operation. Default value is None. - :paramtype filter: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.paging.ItemPaged[JSON] + :param image_build_log_id: An imaging build log id. Required. + :type image_build_log_id: str + :return: JSON object + :rtype: JSON :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "frequency": "str", # The frequency of this scheduled task. Required. - "Daily" - "name": "str", # Display name for the Schedule. Required. - "sourceType": "str", # The type of the resource that this schedule belongs - to. Required. "Pool" - "sourceUri": "str", # The URI of the resource that this schedule belongs to. - Required. - "time": "str", # The target time to trigger the action. The format is HH:MM. - Required. - "timeZone": "str", # The IANA timezone id at which the schedule should - execute. Required. - "type": "str", # Supported type this scheduled task represents. Required. - "StopDevBox" - "uri": "str" # The unique URI of the schedule. Required. - } """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -3203,7 +3410,98 @@ def list_schedules_by_project( } error_map.update(kwargs.pop("error_map", {}) or {}) - def prepare_request(next_link=None): + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[JSON] = kwargs.pop("cls", None) + + request = build_dev_boxes_get_image_build_logs_request( + project_name=project_name, + image_build_log_id=image_build_log_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + request.url = self._client.format_url(request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if response.content: + deserialized = response.json() + else: + deserialized = None + + if cls: + return cls(pipeline_response, cast(JSON, deserialized), {}) + + return cast(JSON, deserialized) + + @distributed_trace + def list_schedules_by_project( + self, project_name: str, *, top: Optional[int] = None, filter: Optional[str] = None, **kwargs: Any + ) -> Iterable[JSON]: + """Lists all schedules within a project that are configured by your project administrator. + + :param project_name: The DevCenter Project upon which to execute operations. Required. + :type project_name: str + :keyword top: The maximum number of resources to return from the operation. Example: 'top=10'. + Default value is None. + :paramtype top: int + :keyword filter: An OData filter clause to apply to the operation. Default value is None. + :paramtype filter: str + :return: An iterator like instance of JSON object + :rtype: ~azure.core.paging.ItemPaged[JSON] + :raises ~azure.core.exceptions.HttpResponseError: + + Example: + .. code-block:: python + + # response body for status code(s): 200 + response == { + "frequency": "str", # The frequency of this scheduled task. Required. + "Daily" + "name": "str", # Display name for the Schedule. Required. + "sourceType": "str", # The type of the resource that this schedule belongs + to. Required. "Pool" + "sourceUri": "str", # The URI of the resource that this schedule belongs to. + Required. + "time": "str", # The target time to trigger the action. The format is HH:MM. + Required. + "timeZone": "str", # The IANA timezone id at which the schedule should + execute. Required. + "type": "str", # Supported type this scheduled task represents. Required. + "StopDevBox" + "uri": "str" # The unique URI of the schedule. Required. + } + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[JSON] = kwargs.pop("cls", None) + + error_map = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): if not next_link: request = build_dev_boxes_list_schedules_by_project_request( @@ -6479,7 +6777,7 @@ def get_action( return cls(pipeline_response, cast(JSON, deserialized), {}) return cast(JSON, deserialized) - + @distributed_trace def skip_action( # pylint: disable=inconsistent-return-statements self, project_name: str, dev_box_name: str, action_name: str, user_id: str = "me", **kwargs: Any @@ -6782,6 +7080,318 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) + @distributed_trace + def list_snapshots(self, project_name: str, dev_box_name: str, user_id: str = "me", **kwargs: Any) -> Iterable[JSON]: + """Lists snapshots for a Dev Box. + + :param project_name: The DevCenter Project upon which to execute operations. Required. + :type project_name: str + :param dev_box_name: The name of a Dev Box. Required. + :type dev_box_name: str + :param user_id: The AAD object id of the user. If value is 'me', the identity is taken from the + authentication context. Default value is "me". + :type user_id: str + :return: An iterator like instance of JSON object + :rtype: ~azure.core.paging.ItemPaged[JSON] + :raises ~azure.core.exceptions.HttpResponseError: + + Example: + .. code-block:: python + + # response body for status code(s): 200 + response == { + "snapshotId": "str", # The id of the snapshot. Should be treated as opaque string. Required. + "snapshotType": "str", # The type of the snapshot indicates whether it is manual or automatic. + Required. Known values are: "Manual" and "Automatic". + "createdTime": "2020-02-20 00:00:00" # The datetime that the snapshot was created, in RFC3339 format. + Required. + "expirationTime": "2020-02-20 00:00:00" # Optional. The datetime when the snapshot expires, will only + be shown for a manual snapshot, in RFC3339 format. + } + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[JSON] = kwargs.pop("cls", None) + + error_map = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + request = build_dev_boxes_list_snapshots_request( + project_name=project_name, + dev_box_name=dev_box_name, + user_id=user_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.endpoint", self._config.endpoint, "str", skip_quote=True + ), + } + request.url = self._client.format_url(request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.endpoint", self._config.endpoint, "str", skip_quote=True + ), + } + request.url = self._client.format_url(request.url, **path_format_arguments) + + return request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = deserialized["value"] + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def get_snapshot( + self, project_name: str, dev_box_name: str, snapshot_id: str, user_id: str = "me", **kwargs: Any + ) -> JSON: + """Gets a snapshot by snapshot id. + + :param project_name: The DevCenter Project upon which to execute operations. Required. + :type project_name: str + :param dev_box_name: The name of a Dev Box. Required. + :type dev_box_name: str + :param snapshot_id: The id of the snapshot. Should be treated as opaque string. Required. + :type snapshot_id: str + :param user_id: The AAD object id of the user. If value is 'me', the identity is taken from the + authentication context. Default value is "me". + :type user_id: str + :return: JSON object + :rtype: JSON + :raises ~azure.core.exceptions.HttpResponseError: + + Example: + .. code-block:: python + + # response body for status code(s): 200 + response == { + "snapshotId": "str", # The id of the snapshot. Should be treated as opaque string. Required. + "snapshotType": "str", # The type of the snapshot indicates whether it is manual or automatic. + Required. Known values are: "Manual" and "Automatic". + "createdTime": "2020-02-20 00:00:00" # The datetime that the snapshot was created, in RFC3339 format. + Required. + "expirationTime": "2020-02-20 00:00:00" # Optional. The datetime when the snapshot expires, will only + be shown for a manual snapshot, in RFC3339 format. + } + """ + error_map = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[JSON] = kwargs.pop("cls", None) + + request = build_dev_boxes_get_snapshot_request( + project_name=project_name, + dev_box_name=dev_box_name, + snapshot_id=snapshot_id, + user_id=user_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + request.url = self._client.format_url(request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if response.content: + deserialized = response.json() + else: + deserialized = None + + if cls: + return cls(pipeline_response, cast(JSON, deserialized), {}) + + return cast(JSON, deserialized) + + @distributed_trace + def capture_snapshot( # pylint: disable=inconsistent-return-statements + self, project_name: str, dev_box_name: str, user_id: str = "me", **kwargs: Any + ) -> None: + """Captures a manual snapshot of the Dev Box. + + :param project_name: The DevCenter Project upon which to execute operations. Required. + :type project_name: str + :param dev_box_name: The name of a Dev Box. Required. + :type dev_box_name: str + :param user_id: The AAD object id of the user. If value is 'me', the identity is taken from the + authentication context. Default value is "me". + :type user_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + request = build_dev_boxes_capture_snapshot_request( + project_name=project_name, + dev_box_name=dev_box_name, + user_id=user_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + request.url = self._client.format_url(request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + if _stream: + response.read() # Load the body in memory and close the socket + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) + + @distributed_trace + def restore_snapshot( # pylint: disable=inconsistent-return-statements + self, project_name: str, dev_box_name: str, snapshot_id: str, user_id: str = "me", **kwargs: Any + ) -> None: + """Restores a Dev Box to a specified snapshot.. + + :param project_name: The DevCenter Project upon which to execute operations. Required. + :type project_name: str + :param dev_box_name: The name of a Dev Box. Required. + :type dev_box_name: str + :param snapshot_id: The snapshot id to use for the restore operation. Required. + :type snapshot_id: str + :param user_id: The AAD object id of the user. If value is 'me', the identity is taken from the + authentication context. Default value is "me". + :type user_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + request = build_dev_boxes_restore_snapshot_request( + project_name=project_name, + dev_box_name=dev_box_name, + snapshot_id=snapshot_id, + user_id=user_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + request.url = self._client.format_url(request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + if _stream: + response.read() # Load the body in memory and close the socket + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) + @distributed_trace def list_operations( self, @@ -8701,7 +9311,7 @@ def get_long_running_output(pipeline_response): return LROPoller(self._client, raw_result, get_long_running_output, polling_method) # type: ignore def _delete_environment_initial( - self, project_name: str, environment_name: str, user_id: str = "me", **kwargs: Any + self, project_name: str, environment_name: str, user_id: str = "me", force: Optional[bool] = None, **kwargs: Any ) -> Optional[JSON]: error_map = { 401: ClientAuthenticationError, @@ -8720,6 +9330,7 @@ def _delete_environment_initial( project_name=project_name, environment_name=environment_name, user_id=user_id, + force=force, api_version=self._config.api_version, headers=_headers, params=_params, @@ -8761,7 +9372,7 @@ def _delete_environment_initial( @distributed_trace def begin_delete_environment( - self, project_name: str, environment_name: str, user_id: str = "me", **kwargs: Any + self, project_name: str, environment_name: str, user_id: str = "me", force: Optional[bool] = None, **kwargs: Any ) -> LROPoller[JSON]: """Deletes an environment and all its associated resources. @@ -8772,6 +9383,10 @@ def begin_delete_environment( :param user_id: The AAD object id of the user. If value is 'me', the identity is taken from the authentication context. Default value is "me". :type user_id: str + :keyword force: Optional parameter to force environment deletion even if the environment definition + does not exist. This is a best-effort delete, and anything custom that forces resource creation beyond + the associated resource group may not be deleted. Default value is None. + :paramtype force: bool :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be LROBasePolling. Pass in False for this operation to not poll, or pass in your own initialized polling object for a personal @@ -8817,6 +9432,7 @@ def begin_delete_environment( project_name=project_name, environment_name=environment_name, user_id=user_id, + force=force, cls=lambda x, y, z: x, headers=_headers, params=_params,