From 015780bf21546bd2be69e9160939fb8fb296512b Mon Sep 17 00:00:00 2001 From: Jake Fullerton Date: Tue, 7 Jan 2025 16:37:14 -0800 Subject: [PATCH] Start hibernate changes --- .../lab/aaz/latest/lab/vm/__init__.py | 1 + .../lab/aaz/latest/lab/vm/_hibernate.py | 158 ++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/_hibernate.py diff --git a/src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/__init__.py b/src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/__init__.py index 6e656f6ba74..8c351a78181 100644 --- a/src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/__init__.py +++ b/src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/__init__.py @@ -16,4 +16,5 @@ from ._show import * from ._start import * from ._stop import * +from ._hibernate import * from ._wait import * diff --git a/src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/_hibernate.py b/src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/_hibernate.py new file mode 100644 index 00000000000..28a697871e2 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/lab/aaz/latest/lab/vm/_hibernate.py @@ -0,0 +1,158 @@ +# -------------------------------------------------------------------------------------------- +# 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 aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "lab vm hibernate", + is_preview=True, +) +class Hibernate(AAZCommand): + """Hibernate a virtual machine This operation can take a while to complete. + """ + + _aaz_info = { + "version": "2018-09-15", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.devtestlab/labs/{}/virtualmachines/{}/hibernate", "2018-10-15-preview"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, None) + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.lab_name = AAZStrArg( + options=["--lab-name"], + help="The name of the lab.", + required=True, + id_part="name", + ) + _args_schema.name = AAZStrArg( + options=["--name"], + help="The name of the virtual machine.", + required=True, + id_part="child_name_1", + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.VirtualMachinesHibernate(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + class VirtualMachinesHibernate(AAZHttpOperation): + CLIENT_TYPE = "MgmtClient" + + def __call__(self, *args, **kwargs): + request = self.make_request() + session = self.client.send_request(request=request, stream=False, **kwargs) + if session.http_response.status_code in [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "azure-async-operation"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "azure-async-operation"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualmachines/{name}/hibernate", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "labName", self.ctx.args.lab_name, + required=True, + ), + **self.serialize_url_param( + "name", self.ctx.args.name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + required=True, + ), + **self.serialize_url_param( + "subscriptionId", self.ctx.subscription_id, + required=True, + ), + } + return parameters + + @property + def query_parameters(self): + parameters = { + **self.serialize_query_param( + "api-version", "2018-10-15-preview", + required=True, + ), + } + return parameters + + def on_200(self, session): + pass + + +class _HibernateHelper: + """Helper class for Hibernate""" + + +__all__ = ["Hibernate"]