Skip to content

Commit

Permalink
[dataprotection] dataprotection migrated to AAZ. (#6385)
Browse files Browse the repository at this point in the history
* recovery-point and job migrated

* Cleaned up client factory for job, recovery-point

* Also cleaned up client factory for backup-vault

* AKS Test Success

* Version changes to 0.8.1

* Added license header in recovery_point.py

* Removed unused import in recovery_point.py

* Removed unused import in recovery_point.py

* Updated dataprotection short summary

* Deleted manual version.py

* Removed manual VERSION from setup.py

* Minor aaz generation change job, recovery-point

* Migrated restorable-time-range

* Migrated resource-guard

* Migrated backup-policy

* Edit to pass flaker

* Recorded live tests, added sleep in aks workload test

* Fixed 'Bad Request' error (absent HTTP response)

* Completed backup-instance migration

* Fixed adhoc-backup, scenario test recorded

* Updated backup-instance create, validate-for-restore, restore trigger to class override

* Removed generated dir and made required updates.

* Changed for loop range and len to enumerate.

* Tests recorded

* Removed timestamp prints from scenario test.

* Updated version and changelog

* recovery-point and job migrated

* Cleaned up client factory for job, recovery-point

* Also cleaned up client factory for backup-vault

* AKS Test Success

* Version changes to 0.8.1

* Added license header in recovery_point.py

* Removed unused import in recovery_point.py

* Updated dataprotection short summary

* Deleted manual version.py

* Removed manual VERSION from setup.py

* Minor aaz generation change job, recovery-point

* Migrated restorable-time-range

* Migrated resource-guard

* Migrated backup-policy

* Edit to pass flaker

* Recorded live tests, added sleep in aks workload test

* Fixed 'Bad Request' error (absent HTTP response)

* Completed backup-instance migration

* Fixed adhoc-backup, scenario test recorded

* Updated backup-instance create, validate-for-restore, restore trigger to class override

* Removed generated dir and made required updates.

* Changed for loop range and len to enumerate.

* Tests recorded

* Removed timestamp prints from scenario test.

* Updated version and changelog

* Updated scenario test recording

* Validate for backup help text fixed.

* Fix resource-guard update bug

* Fixed AAZ error handling for backup-vault update

* Updated to verison 0.9.1

* Recorded tests

* Static analysis fix

* Removed unused import.

* Added warning for invalid input for recovery-point list

* Fixed cleanup for oss test

* Fixed cleanup for oss test

* Custom function bug fixes

* Fixed backup-vault create BadRequest

* Minor update in naming convention

* Updated release history

* static analysis fixes

* Revert "static analysis fixes"

This reverts commit 3a9b4a7.

* Import sequence fixed.

* Import sequence fixed.

* Removed error handling workaround

* Removed error handling workaround and command regs

* Fixed import bug

* Removed dataprotection vendored SDK

* Removed error handling workaround

* Removed use of CLIError

* Static analysis fixes.

* Resource guard override update

* Swagger generated fixes, code cleanup

* Recorded tests

* Undoed resource-guard edit

* Post final swagger changes, enum removed.

* resource-guard update used assign_aaz_list_arg()
  • Loading branch information
vishesh155 authored Jul 7, 2023
1 parent c66191a commit 17d75d0
Show file tree
Hide file tree
Showing 99 changed files with 16,544 additions and 39,994 deletions.
10 changes: 10 additions & 0 deletions src/dataprotection/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@
Release History
===============
0.9.1
+++++
* `az dataprotection update-msi-permissions`: Fixed bug in fetching AKS workload resource group
* `az dataprotection backup-policy create-generic-criteria`: Bug-fix in day-of-month argument validation
* `az dataprotection recovery-point`: Added user warning when start-time is after end-time
* `az dataprotection backup-instance`: Migrated to AAZ-dev-tools
* `az dataprotection backup-policy`: Migrated to AAZ-dev-tools
* `az dataprotection resource-guard`: Migrated to AAZ-dev-tools
* `az dataprotection restorable-time-range`: Migrated to AAZ-dev-tools

0.9.0
+++++
* Add support for cross-subscription-restore for Dataprotection.
Expand Down
15 changes: 2 additions & 13 deletions src/dataprotection/azext_dataprotection/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@
# 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 azure.cli.core import AzCommandsLoader
from azext_dataprotection.generated._help import helps # pylint: disable=unused-import
try:
from azext_dataprotection.manual._help import helps # pylint: disable=reimported
from azext_dataprotection.manual._help import helps # pylint: disable=unused-import
except ImportError as e:
if e.name.endswith('manual._help'):
pass
Expand All @@ -23,15 +18,12 @@ class DataProtectionClientCommandsLoader(AzCommandsLoader):

def __init__(self, cli_ctx=None):
from azure.cli.core.commands import CliCommandType
from azext_dataprotection.generated._client_factory import cf_dataprotection_cl
dataprotection_custom = CliCommandType(
operations_tmpl='azext_dataprotection.custom#{}',
client_factory=cf_dataprotection_cl)
operations_tmpl='azext_dataprotection.custom#{}')
parent = super()
parent.__init__(cli_ctx=cli_ctx, custom_command_type=dataprotection_custom)

def load_command_table(self, args):
from azext_dataprotection.generated.commands import load_command_table
from azure.cli.core.aaz import load_aaz_command_table
try:
from . import aaz
Expand All @@ -43,7 +35,6 @@ def load_command_table(self, args):
aaz_pkg_name=aaz.__name__,
args=args
)
load_command_table(self, args)
try:
from azext_dataprotection.manual.commands import load_command_table as load_command_table_manual
load_command_table_manual(self, args)
Expand All @@ -55,8 +46,6 @@ def load_command_table(self, args):
return self.command_table

def load_arguments(self, command):
from azext_dataprotection.generated._params import load_arguments
load_arguments(self, command)
try:
from azext_dataprotection.manual._params import load_arguments as load_arguments_manual
load_arguments_manual(self, command)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@
# flake8: noqa

from .__cmd_group import *
from ._adhoc_backup import *
from ._create import *
from ._delete import *
from ._list import *
from ._resume_protection import *
from ._show import *
from ._stop_protection import *
from ._suspend_backup import *
from ._update import *
from ._validate_for_backup import *
from ._validate_for_restore import *
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
# --------------------------------------------------------------------------------------------
# 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(
"dataprotection backup-instance adhoc-backup",
is_experimental=True,
)
class AdhocBackup(AAZCommand):
"""Trigger adhoc backup.
:example: Trigger Adhoc Backup
az dataprotection backup-instance adhoc-backup --name "testInstance1" --rule-name "BackupWeekly" --retention-tag-override "yearly" --resource-group "000pikumar" --vault-name "PratikPrivatePreviewVault1"
"""

_aaz_info = {
"version": "2023-01-01",
"resources": [
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.dataprotection/backupvaults/{}/backupinstances/{}/backup", "2023-01-01"],
]
}

AZ_SUPPORT_NO_WAIT = True

def _handler(self, command_args):
super()._handler(command_args)
return self.build_lro_poller(self._execute_operations, self._output)

_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.backup_instance_name = AAZStrArg(
options=["-n", "--name", "--backup-instance-name"],
help="The name of the backup instance.",
required=True,
id_part="child_name_1",
)
_args_schema.resource_group = AAZResourceGroupNameArg(
required=True,
)
_args_schema.vault_name = AAZStrArg(
options=["--vault-name"],
help="The name of the backup vault.",
required=True,
id_part="name",
)

# define Arg Group "Backup Rule Options"

_args_schema = cls._args_schema
_args_schema.rule_name = AAZStrArg(
options=["--rule-name"],
arg_group="Backup Rule Options",
help="Specify backup policy rule name.",
required=True,
)

# define Arg Group "Backup Rule Options Trigger Option"

_args_schema = cls._args_schema
_args_schema.retention_tag_override = AAZStrArg(
options=["--retention-tag-override"],
arg_group="Backup Rule Options Trigger Option",
help="Specify retention override tag.",
)
return cls._args_schema

def _execute_operations(self):
self.pre_operations()
yield self.BackupInstancesAdhocBackup(ctx=self.ctx)()
self.post_operations()

@register_callback
def pre_operations(self):
pass

@register_callback
def post_operations(self):
pass

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

class BackupInstancesAdhocBackup(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": "location"},
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": "location"},
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.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/backup",
**self.url_parameters
)

@property
def method(self):
return "POST"

@property
def error_format(self):
return "MgmtErrorFormat"

@property
def url_parameters(self):
parameters = {
**self.serialize_url_param(
"backupInstanceName", self.ctx.args.backup_instance_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,
),
**self.serialize_url_param(
"vaultName", self.ctx.args.vault_name,
required=True,
),
}
return parameters

@property
def query_parameters(self):
parameters = {
**self.serialize_query_param(
"api-version", "2023-01-01",
required=True,
),
}
return parameters

@property
def header_parameters(self):
parameters = {
**self.serialize_header_param(
"Content-Type", "application/json",
),
**self.serialize_header_param(
"Accept", "application/json",
),
}
return parameters

@property
def content(self):
_content_value, _builder = self.new_content_builder(
self.ctx.args,
typ=AAZObjectType,
typ_kwargs={"flags": {"required": True, "client_flatten": True}}
)
_builder.set_prop("backupRuleOptions", AAZObjectType, ".", typ_kwargs={"flags": {"required": True}})

backup_rule_options = _builder.get(".backupRuleOptions")
if backup_rule_options is not None:
backup_rule_options.set_prop("ruleName", AAZStrType, ".rule_name", typ_kwargs={"flags": {"required": True}})
backup_rule_options.set_prop("triggerOption", AAZObjectType, ".", typ_kwargs={"flags": {"required": True}})

trigger_option = _builder.get(".backupRuleOptions.triggerOption")
if trigger_option is not None:
trigger_option.set_prop("retentionTagOverride", AAZStrType, ".retention_tag_override")

return self.serialize_content(_content_value)

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

_schema_on_200 = None

@classmethod
def _build_schema_on_200(cls):
if cls._schema_on_200 is not None:
return cls._schema_on_200

cls._schema_on_200 = AAZObjectType()

_schema_on_200 = cls._schema_on_200
_schema_on_200.job_id = AAZStrType(
serialized_name="jobId",
)
_schema_on_200.object_type = AAZStrType(
serialized_name="objectType",
flags={"required": True},
)

return cls._schema_on_200


class _AdhocBackupHelper:
"""Helper class for AdhocBackup"""


__all__ = ["AdhocBackup"]
Loading

0 comments on commit 17d75d0

Please sign in to comment.