Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/maintenance/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

Release History
===============
2.0.0b2
+++++
* Update command name for acknowledging list of scheduled events
* Update response handling for acknowledging scheduled events

2.0.0b1
++++++
* Added support for approving list of scheduled events
Expand Down
3 changes: 3 additions & 0 deletions src/maintenance/azext_maintenance/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ def load_command_table(self, args):
pass
else:
raise e
from azext_maintenance.manual.scheduledevents import Acknowledge, ListAcknowledge
self.command_table['maintenance scheduledevents acknowledge'] = Acknowledge(loader=self)
self.command_table['maintenance scheduledevents list-acknowledge'] = ListAcknowledge(loader=self)
return self.command_table

def load_arguments(self, command):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

@register_command_group(
"maintenance scheduledevents",
is_preview=True,
)
class __CMDGroup(AAZCommandGroup):
"""Manage Scheduled Events
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@

from .__cmd_group import *
from ._acknowledge import *
from ._list_acknowledge import *
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,22 @@

@register_command(
"maintenance scheduledevents acknowledge",
is_preview=True,
)
class Acknowledge(AAZCommand):
"""Acknowledge a single Scheduled Events
"""Acknowledge a single ScheduledEvents Id.

:example: Acknowledge a single Scheduled Events on a VirtualMachine
Approves the event on ScheduledEvents resource before timeout when it is safe to proceed. Supported resource types are VirtualMachines, VirtualMachineScaleSets, AvailabilitySets.

:example: Acknowledge a single Scheduled Events on a VirtualMachines
az maintenance scheduledevents acknowledge --resource-group {resourceGroupName} --resource-type "virtualMachines" --resource-name {VMname} --scheduled-events-id {scheduledEventsId} --subscription {subscriptionId}
az maintenance scheduledevents acknowledge --ids /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualMachines/{resourceName}/providers/microsoft.maintenance/scheduledevents/{scheduledEventsId}

:example: Acknowledge a single Scheduled Events on a VirtualMachineScaleSets
az maintenance scheduledevents acknowledge --resource-group {resourceGroup} --resource-type "virtualMachineScaleSets" --resource-name {VMSSname} --scheduled-events-id {scheduledEventsId} --subscription {subscriptionId}
az maintenance scheduledevents acknowledge --ids /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualMachineScaleSets/{resourceName}/providers/microsoft.maintenance/scheduledevents/{scheduledEventsId}

:example: Acknowledge a single Scheduled Events on a AvailabilitySet
:example: Acknowledge a single Scheduled Events on a AvailabilitySets
az maintenance scheduledevents acknowledge--resource-group {resourceGroupName} --resource-type "availabilitySets"--resource-name {AVSetname} --scheduled-events-id {scheduledEventsId} --subscription {subscriptionId}
az maintenance scheduledevents acknowledge --ids /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/AvalabilitySets/{resourceName}/providers/microsoft.maintenance/scheduledevents/{scheduledEventsId}
"""
Expand Down Expand Up @@ -54,31 +57,36 @@ def _build_arguments_schema(cls, *args, **kwargs):

_args_schema = cls._args_schema
_args_schema.resource_group = AAZResourceGroupNameArg(
help="ResourceGroupName",
required=True,
is_preview=True,
)
_args_schema.resource_name = AAZStrArg(
options=["--resource-name"],
options=["-n", "--name", "--resource-name"],
help="Resource Name",
required=True,
is_preview=True,
id_part="name",
)
_args_schema.resource_type = AAZStrArg(
options=["--resource-type"],
help="Resource type",
help="Resource Type",
required=True,
is_preview=True,
id_part="type",
)
_args_schema.scheduled_events_id = AAZStrArg(
options=["--scheduled-events-id"],
help="Scheduled Events Id. This is a GUID-formatted string (e.g. 00000000-0000-0000-0000-000000000000)",
help="ScheduledEvents Id. This is a GUID-formatted string (e.g. 00000000-0000-0000-0000-000000000000)",
required=True,
is_preview=True,
id_part="child_name_1",
)
return cls._args_schema

def _execute_operations(self):
self.pre_operations()
self.ScheduledEventsOperationGroupAcknowledge(ctx=self.ctx)()
self.ScheduledEventOperationGroupAcknowledge(ctx=self.ctx)()
self.post_operations()

@register_callback
Expand All @@ -93,7 +101,7 @@ def _output(self, *args, **kwargs):
result = self.deserialize_output(self.ctx.vars.instance, client_flatten=False)
return result

class ScheduledEventsOperationGroupAcknowledge(AAZHttpOperation):
class ScheduledEventOperationGroupAcknowledge(AAZHttpOperation):
CLIENT_TYPE = "MgmtClient"

def __call__(self, *args, **kwargs):
Expand All @@ -107,7 +115,7 @@ def __call__(self, *args, **kwargs):
@property
def url(self):
return self.client.format_url(
"/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Compute/{resourceType}/{resourceName}/providers/Microsoft.Maintenance/scheduledevents/{scheduledEventsId}/acknowledge",
"/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Compute/{resourceType}/{resourceName}/providers/Microsoft.Maintenance/scheduledevents/{scheduledEventId}/acknowledge",
**self.url_parameters
)

Expand Down Expand Up @@ -135,7 +143,7 @@ def url_parameters(self):
required=True,
),
**self.serialize_url_param(
"scheduledEventsId", self.ctx.args.scheduled_events_id,
"scheduledEventId", self.ctx.args.scheduled_events_id,
required=True,
),
**self.serialize_url_param(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,25 @@


@register_command(
"maintenance scheduledevents list acknowledge",
"maintenance scheduledevents list-acknowledge",
is_preview=True,
)
class Acknowledge(AAZCommand):
"""Post List of Scheduled Events Acknowledgement
class ListAcknowledge(AAZCommand):
"""Acknowledge a list of ScheduledEvents Id.

Approves list of events on ScheduledEvents resource before timeout when it is safe to procced. Supported resource types are VirtualMachines, VirtualMachineScaleSets, AvailabilitySets.

:example: Acknowledge list of Scheduled Events on VirtualMachineScaleSets
az maintenance scheduledevents list acknowledge --resource-group {resourceGroupName} --resource-type "virtualMachineScaleSets" --resource-name {VMSSName} --subscription {subscriptionId} --value []
az maintenance scheduledevents list acknowledge --ids /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualMachineScaleSets/{VMSSName}/providers/microsoft.maintenance/scheduledevents --body "{value:[]}"
az maintenance scheduledevents list-acknowledge --resource-group {resourceGroupName} --resource-type "virtualMachineScaleSets" --resource-name {VMSSName} --subscription {subscriptionId} --value scheduledEventsId1 scheduledEventsId2 .... scheduledEventsIdN
az maintenance scheduledevents list-acknowledge --resource-group {resourceGroupName} --resource-type "virtualMachineScaleSets" --resource-name {VMSSName} --subscription {subscriptionId} --value '["scheduledEventsId1","scheduledEventsId2",..,"scheduledEventsIdN"]'

:example: Acknowledge list of ScheduledEvents on AvailabilitySets
az maintenance scheduledevents list acknowledge --resource-group {resourceGroupName} --resource-type "availabilitySets" --resource-name {AvSetname} --value []
az maintenance scheduledevents list acknowledge --ids /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/availabilitySets/{AvSetName}/providers/microsoft.maintenance/scheduledevents --body "{value:[]}"
az maintenance scheduledvents list-acknowledge --resource-group {resourceGroupName} --resource-type "availabilitySets"--resource-name {AvSetname} --value scheduledEventsId1 scheduledEventsId2 .... scheduledEventsIdN
az maintenance scheduledvents list-acknowledge --resource-group {resourceGroupName} --resource-type "availabilitySets"--resource-name {AvSetname} --value '["scheduledEventsId1","scheduledEventsId2",..,"scheduledEventsIdN"]'

:example: Acknowledge a single Scheduled Events on VirtualMachine
az maintenance scheduledevents list acknowledge --resource-group {resourceGroupName} --resource-type "virtualMachines" --resource-name {VMname} --value []
az maintenance scheduledevents list acknowledge --ids /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualMachines/{virtualMachineName}/providers/microsoft.maintenance/scheduledevents --body "{value:[]}"
:example: Acknowledge a single Scheduled Events on VirtualMachines
az maintenance scheduledevents list-acknowledge --resource-group {resourceGroupName} --resource-type "virtualMachines" --resource-name {VMname} --value scheduledEventsId1 scheduledEventsId2 .... scheduledEventsIdN
az maintenance scheduledevents list-acknowledge --resource-group {resourceGroupName} --resource-type "virtualMachines" --resource-name {VMname} --value '["scheduledEventsId1","scheduledEventsId2",..,"scheduledEventsIdN"]'
"""

_aaz_info = {
Expand All @@ -54,18 +57,22 @@ def _build_arguments_schema(cls, *args, **kwargs):

_args_schema = cls._args_schema
_args_schema.resource_group = AAZResourceGroupNameArg(
help="ResourceGroupName",
required=True,
is_preview=True,
)
_args_schema.resource_name = AAZStrArg(
options=["--resource-name"],
help="Resource name",
options=["-n", "--name", "--resource-name"],
help="Resource Name",
required=True,
is_preview=True,
id_part="name",
)
_args_schema.resource_type = AAZStrArg(
options=["--resource-type"],
help="Resource type",
help="Resource Type",
required=True,
is_preview=True,
id_part="type",
)

Expand All @@ -75,8 +82,9 @@ def _build_arguments_schema(cls, *args, **kwargs):
_args_schema.value = AAZListArg(
options=["--value"],
arg_group="ScheduledEventsIdList",
help="The list of Scheduled Events Id.",
help="The list of Scheduled Events Id",
required=True,
is_preview=True,
)

value = cls._args_schema.value
Expand All @@ -85,7 +93,7 @@ def _build_arguments_schema(cls, *args, **kwargs):

def _execute_operations(self):
self.pre_operations()
self.ScheduledEventsOperationGroupAcknowledgeList(ctx=self.ctx)()
self.ScheduledEventOperationGroupAcknowledgeList(ctx=self.ctx)()
self.post_operations()

@register_callback
Expand All @@ -97,10 +105,10 @@ def post_operations(self):
pass

def _output(self, *args, **kwargs):
result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True)
result = self.deserialize_output(self.ctx.vars.instance, client_flatten=False)
return result

class ScheduledEventsOperationGroupAcknowledgeList(AAZHttpOperation):
class ScheduledEventOperationGroupAcknowledgeList(AAZHttpOperation):
CLIENT_TYPE = "MgmtClient"

def __call__(self, *args, **kwargs):
Expand Down Expand Up @@ -208,8 +216,8 @@ def _build_schema_on_200(cls):
return cls._schema_on_200


class _AcknowledgeHelper:
"""Helper class for Acknowledge"""
class _ListAcknowledgeHelper:
"""Helper class for ListAcknowledge"""


__all__ = ["Acknowledge"]
__all__ = ["ListAcknowledge"]

This file was deleted.

This file was deleted.

80 changes: 80 additions & 0 deletions src/maintenance/azext_maintenance/manual/scheduledevents.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

import json
from http import HTTPStatus

from azure.cli.core.aaz import AAZFreeFormDictType
from azure.cli.core.util import get_error_type_by_status_code

from azext_maintenance.aaz.latest.maintenance.scheduledevents import (
Acknowledge as _Acknowledge,
ListAcknowledge as _ListAcknowledge,
)


class _ResponseContentOperation:
_schema_on_response = None

def __call__(self, *args, **kwargs):
request = self.make_request()
session = self.client.send_request(request=request, stream=False, **kwargs)
status_code = session.http_response.status_code
if status_code == 200:
return self.on_200(session)
body = session.http_response.body()
if 200 <= status_code < 300:
if body:
return self.on_response(session)
return None
if body:
try:
data = json.loads(body)
except (ValueError, TypeError):
return self.on_error(session.http_response)
error_type = get_error_type_by_status_code(str(status_code))
try:
status_name = HTTPStatus(status_code).name.title().replace('_', '')
except ValueError:
status_name = f'HTTP{status_code}'
raise error_type(f'{status_name}\n{json.dumps(data, indent=2)}')
return self.on_error(session.http_response)

def on_response(self, session):
data = self.deserialize_http_content(session)
self.ctx.set_var(
"instance",
data,
schema_builder=self._build_schema_on_response,
)

@classmethod
def _build_schema_on_response(cls):
if cls._schema_on_response is None:
cls._schema_on_response = AAZFreeFormDictType()
return cls._schema_on_response


class _AcknowledgeOperation(
_ResponseContentOperation,
_Acknowledge.ScheduledEventOperationGroupAcknowledge):
"""Return successful acknowledgements and raise failures with their JSON body."""


class _ListAcknowledgeOperation(
_ResponseContentOperation,
_ListAcknowledge.ScheduledEventOperationGroupAcknowledgeList):
"""Return multi-status results as output and raise failures with their JSON body."""


class Acknowledge(_Acknowledge):
ScheduledEventOperationGroupAcknowledge = _AcknowledgeOperation


class ListAcknowledge(_ListAcknowledge):
ScheduledEventOperationGroupAcknowledgeList = _ListAcknowledgeOperation


__all__ = ["Acknowledge", "ListAcknowledge"]
Loading
Loading