diff --git a/src/azure-cli/azure/cli/command_modules/sql/_help.py b/src/azure-cli/azure/cli/command_modules/sql/_help.py index eb401a59c59..43a5fb69c71 100644 --- a/src/azure-cli/azure/cli/command_modules/sql/_help.py +++ b/src/azure-cli/azure/cli/command_modules/sql/_help.py @@ -631,7 +631,7 @@ helps['sql midb short-term-retention-policy'] = """ type: group -short-summary: Manage SQL managed instance database backup short term retention policy. +short-summary: Manage SQL Managed Instance database backup short term retention policy. """ helps['sql midb short-term-retention-policy set'] = """ @@ -654,6 +654,84 @@ text: az sql midb short-term-retention-policy show -g mygroup --mi myinstance -n mymanageddb --deleted-time "2018-05-20T05:34:22" """ +helps['sql midb ltr-policy'] = """ +type: group +short-summary: Manage SQL Managed Instance database long term retention policy. +""" + +helps['sql midb ltr-policy set'] = """ +type: command +short-summary: Update long term retention settings for a managed database. +examples: + - name: Set long term retention for a managed database. + text: az sql midb ltr-policy set -g mygroup --mi myinstance -n mymanageddb --weekly-retention "P1W" --monthly-retention "P6M" --yearly-retention "P1Y" --week-of-year 26 +""" + +helps['sql midb ltr-policy show'] = """ +type: command +short-summary: Show the long term retention policy for a managed database. +examples: + - name: Show long term retention policy for a managed database. + text: az sql midb ltr-policy show -g mygroup --mi myinstance -n mymanageddb +""" + +helps['sql midb ltr-backup'] = """ +type: group +short-summary: Manage SQL Managed Instance database long term retention backups. +""" + +helps['sql midb ltr-backup show'] = """ +type: command +short-summary: Get a long term retention backup for a managed database. +examples: + - name: Show long term retention backup for a managed database. + text: az sql midb ltr-backup show -l southeastasia --mi myinstance -d mymanageddb -n "3214b3fb-fba9-43e7-96a3-09e35ffcb336;132292152080000000" + name: Show long term retention backup for a managed database. + text: az sql midb ltr-backup show --backup-id '/subscriptions/6caa113c-794c-42f8-ab9d-878d8aa104dc/resourceGroups/mygroup/providers/Microsoft.Sql/locations/southeastasia/longTermRetentionManagedInstances/myinstance/longTermRetentionDatabases/mymanageddb/longTermRetentionManagedInstanceBackups/3214b3fb-fba9-43e7-96a3-09e35ffcb336;132292152080000000' +""" + +helps['sql midb ltr-backup list'] = """ +type: command +short-summary: List the long term retention backups for a location, instance or database. +examples: + - name: List long term retention backups for a managed database. + text: az sql midb ltr-backup list -l southeastasia --mi myinstance -d mymanageddb + - name: List long term retention backups for a managed instance (list only the latest LTR backups, which belong to live databases). + text: az sql midb ltr-backup list -l southeastasia --mi myinstance --database-state Live --only-latest-per-database + - name: List long term retention backups for a managed instance (with resource group argument). + text: az sql midb ltr-backup list -l southeastasia -g mygroup --mi myinstance + - name: List long term retention backups for a location (list only the latest LTR backups, which belong to live databases). + text: az sql midb ltr-backup list -l southeastasia --database-state Live --only-latest-per-database + - name: List long term retention backups for a location (with resource group argument). + text: az sql midb ltr-backup list -l southeastasia -g mygroup +""" + +helps['sql midb ltr-backup delete'] = """ +type: command +short-summary: Delete a long term retention backup. +examples: + - name: Delete long term retention backup for a managed database. + text: az sql midb ltr-backup delete -l southeastasia --mi myinstance -d mymanageddb --name "3214b3fb-fba9-43e7-96a3-09e35ffcb336;132292152080000000" + - name: Delete long term retention backup for a managed database. + text: az sql midb ltr-backup delete --backup-id '/subscriptions/6caa113c-794c-42f8-ab9d-878d8aa104dc/resourceGroups/mygroup/providers/Microsoft.Sql/locations/southeastasia/longTermRetentionManagedInstances/myinstance/longTermRetentionDatabases/mymanageddb/longTermRetentionManagedInstanceBackups/3214b3fb-fba9-43e7-96a3-09e35ffcb336;132292152080000000' +""" + +helps['sql midb ltr-backup restore'] = """ +type: command +short-summary: Restore a long term retention backup to a new database. +examples: + - name: Restore a managed database using LTR backup. + text: | + az sql midb ltr-backup restore \\ + --dest-database targetmidb --dest-mi myinstance --dest-resource-group mygroup \\ + --backup-id "/subscriptions/6caa113c-794c-42f8-ab9d-878d8aa104dc/resourceGroups/mygroup/providers/Microsoft.Sql/locations/southeastasia/longTermRetentionManagedInstances/myinstance/longTermRetentionDatabases/sourcemidb/longTermRetentionManagedInstanceBackups/3214b3fb-fba9-43e7-96a3-09e35ffcb336;132292152080000000" +""" + +helps['sql midb ltr-backup wait'] = """ +type: command +short-summary: Place the CLI in a waiting state until a condition of the managed database is met. +""" + helps['sql server'] = """ type: group short-summary: Manage SQL servers. diff --git a/src/azure-cli/azure/cli/command_modules/sql/_params.py b/src/azure-cli/azure/cli/command_modules/sql/_params.py index 453e8645f8d..d3c6b22ba25 100644 --- a/src/azure-cli/azure/cli/command_modules/sql/_params.py +++ b/src/azure-cli/azure/cli/command_modules/sql/_params.py @@ -1483,22 +1483,124 @@ def _configure_security_policy_storage_params(arg_ctx): 'retention_days' ]) - c.argument('deleted_time', - options_list=['--deleted-time'], - help='If specified, updates retention days for a deleted database, instead of an existing database.' - 'Must match the deleted time of a deleted database on the source Managed Instance.') + c.argument( + 'deleted_time', + options_list=['--deleted-time'], + help='If specified, updates retention days for a deleted database, instead of an existing database.' + 'Must match the deleted time of a deleted database on the source Managed Instance.') + + c.argument( + 'retention_days', + options_list=['--retention-days'], + required=True, + help='New backup short term retention policy in days.' + 'Valid policy for live database is 7-35 days, valid policy for dropped databases is 0-35 days.') - c.argument('retention_days', - options_list=['--retention-days'], + with self.argument_context('sql midb short-term-retention-policy show') as c: + c.argument( + 'deleted_time', + options_list=['--deleted-time'], + help='If specified, shows retention days for a deleted database, instead of an existing database.' + 'Must match the deleted time of a deleted database on the source Managed Instance.') + + with self.argument_context('sql midb ltr-policy set') as c: + create_args_for_complex_type( + c, 'parameters', ManagedDatabase, [ + 'weekly_retention', + 'monthly_retention', + 'yearly_retention', + 'week_of_year' + ]) + + c.argument('weekly_retention', + help='Retention for the weekly backup. ' + 'If just a number is passed instead of an ISO 8601 string, days will be assumed as the units.' + 'There is a minimum of 7 days and a maximum of 10 years.') + + c.argument('monthly_retention', + help='Retention for the monthly backup. ' + 'If just a number is passed instead of an ISO 8601 string, days will be assumed as the units.' + 'There is a minimum of 7 days and a maximum of 10 years.') + + c.argument('yearly_retention', + help='Retention for the yearly backup. ' + 'If just a number is passed instead of an ISO 8601 string, days will be assumed as the units.' + 'There is a minimum of 7 days and a maximum of 10 years.') + + c.argument('week_of_year', + help='The Week of Year, 1 to 52, in which to take the yearly LTR backup.') + + with self.argument_context('sql midb ltr-backup') as c: + c.argument('location_name', + arg_type=get_location_type(self.cli_ctx), + help='The location of the desired backup(s).', + id_part=None) + + c.argument('database_name', + options_list=['--database', '-d'], + id_part=None) + + c.argument('managed_instance_name', + options_list=['--managed-instance', '--mi'], + id_part=None) + + c.argument('backup_name', + options_list=['--name', '-n'], + help='The name of the LTR backup. ' + 'Use \'az sql midb ltr-backup show\' or \'az sql midb ltr-backup list\' for backup name.', + id_part=None) + + c.argument('backup_id', + options_list=['--backup-id', '--id'], + help='The resource id of the backups. ' + 'Use \'az sql midb ltr-backup show\' or \'az sql midb ltr-backup list\' for backup id. ' + 'If provided, other arguments are not required. ') + + with self.argument_context('sql midb ltr-backup list') as c: + c.argument('database_name', + options_list=['--database', '-d'], + help='The name of the Azure SQL Managed Database. ' + 'If specified (along with instance name), retrieves all requested backups under this database.') + + c.argument('managed_instance_name', + options_list=['--managed-instance', '--mi'], + help='Name of the Azure SQL managed instance. ' + 'If specified, retrieves all requested backups under this managed instance.') + + c.argument('database_state', + required=False, + options_list=['--database-state', '--state'], + help='\'All\', \'Live\', or \'Deleted\'. ' + 'Will fetch backups only from databases of specified state. ' + 'If no state provied, defaults to \'All\'.') + + c.argument('only_latest_per_database', + action='store_true', + options_list=['--only-latest-per-database', '--latest'], + required=False, + help='If true, will only return the latest backup for each database') + + with self.argument_context('sql midb ltr-backup restore') as c: + c.argument('target_managed_database_name', + options_list=['--dest-database'], required=True, - help='New backup short term retention policy in days.' - 'Valid policy for live database is 7-35 days, valid policy for dropped databases is 0-35 days.') + help='Name of the managed database that will be created as the restore destination.') - with self.argument_context('sql midb short-term-retention-policy show') as c: - c.argument('deleted_time', - options_list=['--deleted-time'], - help='If specified, shows retention days for a deleted database, instead of an existing database.' - 'Must match the deleted time of a deleted database on the source Managed Instance.') + c.argument('target_managed_instance_name', + options_list=['--dest-mi'], + required=True, + help='Name of the managed instance to restore managed database to.') + + c.argument('target_resource_group_name', + options_list=['--dest-resource-group'], + required=True, + help='Name of the resource group of the managed instance to restore managed database to.') + + c.argument('long_term_retention_backup_resource_id', + options_list=['--backup-id', '--id'], + required=True, + help='The resource id of the long term retention backup to be restored. ' + 'Use \'az sql midb ltr-backup show\' or \'az sql midb ltr-backup list\' for backup id.') ############################################### # sql virtual cluster # diff --git a/src/azure-cli/azure/cli/command_modules/sql/_util.py b/src/azure-cli/azure/cli/command_modules/sql/_util.py index acd177a3c2c..da25b9dafe1 100644 --- a/src/azure-cli/azure/cli/command_modules/sql/_util.py +++ b/src/azure-cli/azure/cli/command_modules/sql/_util.py @@ -162,3 +162,11 @@ def get_sql_virtual_clusters_operations(cli_ctx, _): def get_sql_instance_failover_groups_operations(cli_ctx, _): return get_sql_management_client(cli_ctx).instance_failover_groups + + +def get_sql_managed_database_long_term_retention_policies_operations(cli_ctx, _): + return get_sql_management_client(cli_ctx).managed_instance_long_term_retention_policies + + +def get_sql_managed_database_long_term_retention_backups_operations(cli_ctx, _): + return get_sql_management_client(cli_ctx).long_term_retention_managed_instance_backups diff --git a/src/azure-cli/azure/cli/command_modules/sql/commands.py b/src/azure-cli/azure/cli/command_modules/sql/commands.py index 35eb947a699..8cdfcdcd0e4 100644 --- a/src/azure-cli/azure/cli/command_modules/sql/commands.py +++ b/src/azure-cli/azure/cli/command_modules/sql/commands.py @@ -38,6 +38,8 @@ get_sql_firewall_rules_operations, get_sql_managed_databases_operations, get_sql_managed_backup_short_term_retention_policies_operations, + get_sql_managed_database_long_term_retention_policies_operations, + get_sql_managed_database_long_term_retention_backups_operations, get_sql_managed_instance_azure_ad_administrators_operations, get_sql_managed_instance_encryption_protectors_operations, get_sql_managed_instance_keys_operations, @@ -567,8 +569,46 @@ def load_command_table(self, _): managed_backup_short_term_retention_policies_operations, client_factory=get_sql_managed_backup_short_term_retention_policies_operations) as g: - g.custom_command('set', 'update_short_term_retention_mi', supports_no_wait=True) - g.custom_command('show', 'get_short_term_retention_mi') + g.custom_command( + 'set', + 'update_short_term_retention_mi', + supports_no_wait=True, + is_preview=True) + g.custom_command('show', 'get_short_term_retention_mi', is_preview=True) + + managed_database_long_term_retention_policies_operations = CliCommandType( + operations_tmpl='azure.mgmt.sql.operations#ManagedInstanceLongTermRetentionPoliciesOperations.{}', + client_factory=get_sql_managed_database_long_term_retention_policies_operations) + + with self.command_group('sql midb ltr-policy', + managed_database_long_term_retention_policies_operations, + client_factory=get_sql_managed_database_long_term_retention_policies_operations) as g: + + g.custom_command('set', 'update_long_term_retention_mi', is_preview=True) + g.show_command('show', 'get', is_preview=True) + + managed_database_long_term_retention_backups_operations = CliCommandType( + operations_tmpl='azure.mgmt.sql.operations#LongTermRetentionManagedInstanceBackupsOperations.{}', + client_factory=get_sql_managed_database_long_term_retention_backups_operations) + + with self.command_group('sql midb ltr-backup', + managed_database_long_term_retention_backups_operations, + client_factory=get_sql_managed_database_long_term_retention_backups_operations) as g: + g.custom_command('show', 'get_long_term_retention_mi_backup', is_preview=True) + g.custom_command( + 'list', + 'list_long_term_retention_mi_backups', is_preview=True) + g.custom_command('delete', 'delete_long_term_retention_mi_backup', confirmation=True, is_preview=True) + + with self.command_group('sql midb ltr-backup', + managed_databases_operations, + client_factory=get_sql_managed_databases_operations) as g: + g.custom_command( + 'restore', + 'restore_long_term_retention_mi_backup', + supports_no_wait=True, + is_preview=True) + g.wait_command('wait') ############################################### # sql virtual cluster # diff --git a/src/azure-cli/azure/cli/command_modules/sql/custom.py b/src/azure-cli/azure/cli/command_modules/sql/custom.py index eb38873d363..6e6d092b580 100644 --- a/src/azure-cli/azure/cli/command_modules/sql/custom.py +++ b/src/azure-cli/azure/cli/command_modules/sql/custom.py @@ -2699,10 +2699,305 @@ def get_short_term_retention_mi( return policy +def _is_int(retention): + try: + int(retention) + return True + except ValueError: + return False + + +def update_long_term_retention_mi( + client, + database_name, + managed_instance_name, + resource_group_name, + weekly_retention=None, + monthly_retention=None, + yearly_retention=None, + week_of_year=None, + **kwargs): + ''' + Updates long term retention for managed database + ''' + + if not (weekly_retention or monthly_retention or yearly_retention): + raise CLIError('Please specify retention setting(s). See \'--help\' for more details.') + + if yearly_retention and not week_of_year: + raise CLIError('Please specify week of year for yearly retention.') + + # if an int is provided for retention, convert to ISO 8601 using days + if (weekly_retention and _is_int(weekly_retention)): + weekly_retention = 'P%sD' % weekly_retention + print(weekly_retention) + + if (monthly_retention and _is_int(monthly_retention)): + monthly_retention = 'P%sD' % monthly_retention + + if (yearly_retention and _is_int(yearly_retention)): + yearly_retention = 'P%sD' % yearly_retention + + kwargs['weekly_retention'] = weekly_retention + + kwargs['monthly_retention'] = monthly_retention + + kwargs['yearly_retention'] = yearly_retention + + kwargs['week_of_year'] = week_of_year + + policy = client.create_or_update( + database_name=database_name, + managed_instance_name=managed_instance_name, + resource_group_name=resource_group_name, + parameters=kwargs) + + return policy + + +def _get_backup_id_resource_values(backup_id): + ''' + Extract resource values from the backup id + ''' + + backup_id = backup_id.replace('\'', '') + backup_id = backup_id.replace('"', '') + + if backup_id[0] == '/': + # remove leading / + backup_id = backup_id[1:] + + resources_list = backup_id.split('/') + resources_dict = {resources_list[i]: resources_list[i + 1] for i in range(0, len(resources_list), 2)} + + if not ('locations'.casefold() in resources_dict and + 'longTermRetentionManagedInstances'.casefold() not in resources_dict and + 'longTermRetentionDatabases'.casefold() not in resources_dict and + 'longTermRetentionManagedInstanceBackups'.casefold() not in resources_dict): + + # backup ID should contain all these + raise CLIError('Please provide a valid resource URI. See --help for example.') + + return resources_dict + + +def get_long_term_retention_mi_backup( + client, + location_name=None, + managed_instance_name=None, + database_name=None, + backup_name=None, + backup_id=None): + ''' + Gets the requested long term retention backup. + ''' + + if backup_id: + resources_dict = _get_backup_id_resource_values(backup_id) + + location_name = resources_dict['locations'] + managed_instance_name = resources_dict['longTermRetentionManagedInstances'] + database_name = resources_dict['longTermRetentionDatabases'] + backup_name = resources_dict['longTermRetentionManagedInstanceBackups'] + + return client.get( + location_name=location_name, + managed_instance_name=managed_instance_name, + database_name=database_name, + backup_name=backup_name) + + +def _list_by_database_long_term_retention_mi_backups( + client, + location_name, + managed_instance_name, + database_name, + resource_group_name=None, + only_latest_per_database=None, + database_state=None): + ''' + Gets the long term retention backups for a Managed Database + ''' + + if resource_group_name: + backups = client.list_by_resource_group_database( + resource_group_name=resource_group_name, + location_name=location_name, + managed_instance_name=managed_instance_name, + database_name=database_name, + only_latest_per_database=only_latest_per_database, + database_state=database_state) + else: + backups = client.list_by_database( + location_name=location_name, + managed_instance_name=managed_instance_name, + database_name=database_name, + only_latest_per_database=only_latest_per_database, + database_state=database_state) + + return backups + + +def _list_by_instance_long_term_retention_mi_backups( + client, + location_name, + managed_instance_name, + resource_group_name=None, + only_latest_per_database=None, + database_state=None): + ''' + Gets the long term retention backups within a Managed Instance + ''' + + if resource_group_name: + backups = client.list_by_resource_group_instance( + resource_group_name=resource_group_name, + location_name=location_name, + managed_instance_name=managed_instance_name, + only_latest_per_database=only_latest_per_database, + database_state=database_state) + else: + backups = client.list_by_instance( + location_name=location_name, + managed_instance_name=managed_instance_name, + only_latest_per_database=only_latest_per_database, + database_state=database_state) + + return backups + + +def _list_by_location_long_term_retention_mi_backups( + client, + location_name, + resource_group_name=None, + only_latest_per_database=None, + database_state=None): + ''' + Gets the long term retention backups within a specified region. + ''' + + if resource_group_name: + backups = client.list_by_resource_group_location( + resource_group_name=resource_group_name, + location_name=location_name, + only_latest_per_database=only_latest_per_database, + database_state=database_state) + else: + backups = client.list_by_location( + location_name=location_name, + only_latest_per_database=only_latest_per_database, + database_state=database_state) + + return backups + + +def list_long_term_retention_mi_backups( + client, + location_name, + managed_instance_name=None, + database_name=None, + resource_group_name=None, + only_latest_per_database=None, + database_state=None): + ''' + Lists the long term retention backups for a specified location, instance, or database. + ''' + + if managed_instance_name: + if database_name: + backups = _list_by_database_long_term_retention_mi_backups( + client, + location_name, + managed_instance_name, + database_name, + resource_group_name, + only_latest_per_database, + database_state) + + else: + backups = _list_by_instance_long_term_retention_mi_backups( + client, + location_name, + managed_instance_name, + resource_group_name, + only_latest_per_database, + database_state) + else: + backups = _list_by_location_long_term_retention_mi_backups( + client, + location_name, + resource_group_name, + only_latest_per_database, + database_state) + + return backups + + +def delete_long_term_retention_mi_backup( + client, + location_name=None, + managed_instance_name=None, + database_name=None, + backup_name=None, + backup_id=None): + ''' + Deletes the requested long term retention backup. + ''' + + if backup_id: + resources_dict = _get_backup_id_resource_values(backup_id) + + location_name = resources_dict['locations'] + managed_instance_name = resources_dict['longTermRetentionManagedInstances'] + database_name = resources_dict['longTermRetentionDatabases'] + backup_name = resources_dict['longTermRetentionManagedInstanceBackups'] + + return client.delete( + location_name=location_name, + managed_instance_name=managed_instance_name, + database_name=database_name, + backup_name=backup_name) + + +def restore_long_term_retention_mi_backup( + cmd, + client, + long_term_retention_backup_resource_id, + target_managed_database_name, + target_managed_instance_name, + target_resource_group_name, + **kwargs): + ''' + Restores an existing managed DB (i.e. create with 'RestoreLongTermRetentionBackup' create mode.) + ''' + + if not target_resource_group_name or not target_managed_instance_name or not target_managed_database_name: + raise CLIError('Please specify target resource(s). ' + 'Target resource group, target instance, and target database ' + 'are all required for restore LTR backup.') + + if not long_term_retention_backup_resource_id: + raise CLIError('Please specify a long term retention backup.') + + kwargs['location'] = _get_managed_instance_location( + cmd.cli_ctx, + managed_instance_name=target_managed_instance_name, + resource_group_name=target_resource_group_name) + + kwargs['create_mode'] = CreateMode.restore_long_term_retention_backup.value + kwargs['long_term_retention_backup_resource_id'] = long_term_retention_backup_resource_id + + return client.create_or_update( + database_name=target_managed_database_name, + managed_instance_name=target_managed_instance_name, + resource_group_name=target_resource_group_name, + parameters=kwargs) + ############################################### # sql failover-group # ############################################### + def failover_group_create( cmd, client, diff --git a/src/azure-cli/azure/cli/command_modules/sql/tests/latest/recordings/test_sql_managed_db_long_term_retention.yaml b/src/azure-cli/azure/cli/command_modules/sql/tests/latest/recordings/test_sql_managed_db_long_term_retention.yaml new file mode 100644 index 00000000000..8d856abfff1 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/sql/tests/latest/recordings/test_sql_managed_db_long_term_retention.yaml @@ -0,0 +1,1129 @@ +interactions: +- request: + body: '{"properties": {"weeklyRetention": "P1W", "monthlyRetention": "P1M", "yearlyRetention": + "P2M", "weekOfYear": 12}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-policy set + Connection: + - keep-alive + Content-Length: + - '113' + Content-Type: + - application/json; charset=utf-8 + ParameterSetName: + - -g --mi -n --weekly-retention --monthly-retention --yearly-retention --week-of-year + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/test-4/backupLongTermRetentionPolicies/default?api-version=2018-06-01-preview + response: + body: + string: '{"operation":"UpsertDatabaseBackupArchivalPolicyV2","startTime":"2020-04-16T19:37:34.39Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/managedInstanceLongTermRetentionPolicyAzureAsyncOperation/13677f68-cfe1-4f98-a653-04b2e197636f?api-version=2018-06-01-preview + cache-control: + - no-cache + content-length: + - '90' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:34 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/managedInstanceLongTermRetentionPolicyOperationResults/13677f68-cfe1-4f98-a653-04b2e197636f?api-version=2018-06-01-preview + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-policy set + Connection: + - keep-alive + ParameterSetName: + - -g --mi -n --weekly-retention --monthly-retention --yearly-retention --week-of-year + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/managedInstanceLongTermRetentionPolicyAzureAsyncOperation/13677f68-cfe1-4f98-a653-04b2e197636f?api-version=2018-06-01-preview + response: + body: + string: '{"name":"13677f68-cfe1-4f98-a653-04b2e197636f","status":"Succeeded","startTime":"2020-04-16T19:37:34.39Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:49 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-policy set + Connection: + - keep-alive + ParameterSetName: + - -g --mi -n --weekly-retention --monthly-retention --yearly-retention --week-of-year + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/test-4/backupLongTermRetentionPolicies/default?api-version=2018-06-01-preview + response: + body: + string: '{"properties":{"weeklyRetention":"P1W","monthlyRetention":"P1M","yearlyRetention":"P2M","weekOfYear":12},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/test-4/backupLongTermRetentionPolicies/default","name":"default","type":"Microsoft.Sql/managedInstances/databases/backupLongTermRetentionPolicy"}' + headers: + cache-control: + - no-cache + content-length: + - '405' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:49 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-policy show + Connection: + - keep-alive + ParameterSetName: + - -g --mi -n + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/test-4/backupLongTermRetentionPolicies/default?api-version=2018-06-01-preview + response: + body: + string: '{"properties":{"weeklyRetention":"P1W","monthlyRetention":"P1M","yearlyRetention":"P2M","weekOfYear":12},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/test-4/backupLongTermRetentionPolicies/default","name":"default","type":"Microsoft.Sql/managedInstances/databases/backupLongTermRetentionPolicy"}' + headers: + cache-control: + - no-cache + content-length: + - '405' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:51 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup list + Connection: + - keep-alive + ParameterSetName: + - -l -g + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstanceBackups?api-version=2018-06-01-preview + response: + body: + string: '{"value":[{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-6","backupTime":"2020-04-14T22:11:46Z","backupExpirationTime":"2020-04-21T22:11:46Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-6/longTermRetentionManagedInstanceBackups/63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","name":"63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-5","backupTime":"2020-04-14T22:09:42Z","backupExpirationTime":"2020-04-21T22:09:42Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-5/longTermRetentionManagedInstanceBackups/538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","name":"538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}]}' + headers: + cache-control: + - no-cache + content-length: + - '2183' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:50 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup list + Connection: + - keep-alive + ParameterSetName: + - -l + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstanceBackups?api-version=2018-06-01-preview + response: + body: + string: '{"value":[{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-6","backupTime":"2020-04-14T22:11:46Z","backupExpirationTime":"2020-04-21T22:11:46Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-6/longTermRetentionManagedInstanceBackups/63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","name":"63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-5","backupTime":"2020-04-14T22:09:42Z","backupExpirationTime":"2020-04-21T22:09:42Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-5/longTermRetentionManagedInstanceBackups/538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","name":"538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}]}' + headers: + cache-control: + - no-cache + content-length: + - '2183' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:51 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup list + Connection: + - keep-alive + ParameterSetName: + - -l --mi -g + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionManagedInstanceBackups?api-version=2018-06-01-preview + response: + body: + string: '{"value":[{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-6","backupTime":"2020-04-14T22:11:46Z","backupExpirationTime":"2020-04-21T22:11:46Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-6/longTermRetentionManagedInstanceBackups/63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","name":"63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-5","backupTime":"2020-04-14T22:09:42Z","backupExpirationTime":"2020-04-21T22:09:42Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-5/longTermRetentionManagedInstanceBackups/538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","name":"538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}]}' + headers: + cache-control: + - no-cache + content-length: + - '2183' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:51 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup list + Connection: + - keep-alive + ParameterSetName: + - -l --mi + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionManagedInstanceBackups?api-version=2018-06-01-preview + response: + body: + string: '{"value":[{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-6","backupTime":"2020-04-14T22:11:46Z","backupExpirationTime":"2020-04-21T22:11:46Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-6/longTermRetentionManagedInstanceBackups/63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","name":"63937397-37b8-4efe-82f0-51f39955f9b4;132313759060000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"},{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-5","backupTime":"2020-04-14T22:09:42Z","backupExpirationTime":"2020-04-21T22:09:42Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-5/longTermRetentionManagedInstanceBackups/538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","name":"538e3c19-ffeb-4fa0-ad1e-efa36c393ce2;132313757820000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}]}' + headers: + cache-control: + - no-cache + content-length: + - '2183' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:53 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup list + Connection: + - keep-alive + ParameterSetName: + - -l --mi -d -g + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups?api-version=2018-06-01-preview + response: + body: + string: '{"value":[{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}]}' + headers: + cache-control: + - no-cache + content-length: + - '735' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:53 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup list + Connection: + - keep-alive + ParameterSetName: + - -l --mi -d + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups?api-version=2018-06-01-preview + response: + body: + string: '{"value":[{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}]}' + headers: + cache-control: + - no-cache + content-length: + - '735' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:53 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup list + Connection: + - keep-alive + ParameterSetName: + - -l --mi -d --latest + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups?onlyLatestPerDatabase=true&api-version=2018-06-01-preview + response: + body: + string: '{"value":[{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}]}' + headers: + cache-control: + - no-cache + content-length: + - '735' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:54 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup show + Connection: + - keep-alive + ParameterSetName: + - -l --mi -d -n + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034%3B132313757810000000?api-version=2018-06-01-preview + response: + body: + string: '{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}' + headers: + cache-control: + - no-cache + content-length: + - '723' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:55 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup show + Connection: + - keep-alive + ParameterSetName: + - --id + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034%3B132313757810000000?api-version=2018-06-01-preview + response: + body: + string: '{"properties":{"managedInstanceName":"ayang-ltr-mi","managedInstanceCreateTime":"2020-04-06T09:13:39.977Z","databaseName":"test-4","backupTime":"2020-04-14T22:09:41Z","backupExpirationTime":"2020-04-21T22:09:41Z"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","name":"ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000","type":"Microsoft.Sql/locations/longTermRetentionManagedInstances/longTermRetentionDatabases/longTermRetentionManagedInstanceBackups"}' + headers: + cache-control: + - no-cache + content-length: + - '723' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:54 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi?api-version=2018-06-01-preview + response: + body: + string: '{"identity":{"principalId":"66add4ab-8fc1-4f17-a3c4-17f0bf047c39","type":"SystemAssigned","tenantId":"0c1edf5d-e5c5-4aca-ab69-ef194134f44b"},"sku":{"name":"GP_Gen5","tier":"GeneralPurpose","family":"Gen5","capacity":4},"properties":{"fullyQualifiedDomainName":"ayang-ltr-mi.fbeedfe5d4a7.database.windows.net","administratorLogin":"cloudSA","subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Network/virtualNetworks/vnet-ayang-ltr-mi/subnets/ManagedInstance","state":"Ready","licenseType":"LicenseIncluded","vCores":4,"storageSizeInGB":32,"collation":"SQL_Latin1_General_CP1_CI_AS","dnsZone":"fbeedfe5d4a7","publicDataEndpointEnabled":false,"proxyOverride":"Proxy","timezoneId":"UTC"},"location":"westus","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi","name":"ayang-ltr-mi","type":"Microsoft.Sql/managedInstances"}' + headers: + cache-control: + - no-cache + content-length: + - '978' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:55 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "properties": {"createMode": "RestoreLongTermRetentionBackup", + "longTermRetentionBackupResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034;132313757810000000"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + Content-Length: + - '429' + Content-Type: + - application/json; charset=utf-8 + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/cli-restore-dest?api-version=2019-06-01-preview + response: + body: + string: '{"operation":"CreateManagedRestoreFromLtrBackupRequest","startTime":"2020-04-16T19:37:56.74Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/managedDatabaseAzureAsyncOperation/a9366cae-ca7e-4cda-9091-0da781642889?api-version=2019-06-01-preview + cache-control: + - no-cache + content-length: + - '94' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:37:56 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/managedDatabaseOperationResults/a9366cae-ca7e-4cda-9091-0da781642889?api-version=2019-06-01-preview + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/managedDatabaseAzureAsyncOperation/a9366cae-ca7e-4cda-9091-0da781642889?api-version=2019-06-01-preview + response: + body: + string: '{"name":"a9366cae-ca7e-4cda-9091-0da781642889","status":"InProgress","startTime":"2020-04-16T19:37:56.74Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:38:11 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/managedDatabaseAzureAsyncOperation/a9366cae-ca7e-4cda-9091-0da781642889?api-version=2019-06-01-preview + response: + body: + string: '{"name":"a9366cae-ca7e-4cda-9091-0da781642889","status":"InProgress","startTime":"2020-04-16T19:37:56.74Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:38:26 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/managedDatabaseAzureAsyncOperation/a9366cae-ca7e-4cda-9091-0da781642889?api-version=2019-06-01-preview + response: + body: + string: '{"name":"a9366cae-ca7e-4cda-9091-0da781642889","status":"InProgress","startTime":"2020-04-16T19:37:56.74Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:38:41 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/managedDatabaseAzureAsyncOperation/a9366cae-ca7e-4cda-9091-0da781642889?api-version=2019-06-01-preview + response: + body: + string: '{"name":"a9366cae-ca7e-4cda-9091-0da781642889","status":"InProgress","startTime":"2020-04-16T19:37:56.74Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:38:56 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/managedDatabaseAzureAsyncOperation/a9366cae-ca7e-4cda-9091-0da781642889?api-version=2019-06-01-preview + response: + body: + string: '{"name":"a9366cae-ca7e-4cda-9091-0da781642889","status":"Succeeded","startTime":"2020-04-16T19:37:56.74Z"}' + headers: + cache-control: + - no-cache + content-length: + - '106' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:39:12 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup restore + Connection: + - keep-alive + ParameterSetName: + - --backup-id --dest-database --dest-mi --dest-resource-group + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/cli-restore-dest?api-version=2019-06-01-preview + response: + body: + string: '{"properties":{"collation":"SQL_Latin1_General_CP1_CI_AS","status":"Online","creationDate":"2020-04-16T19:37:57.02Z","defaultSecondaryLocation":"eastus"},"location":"westus","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitestxj6awmetud/providers/Microsoft.Sql/managedInstances/ayang-ltr-mi/databases/cli-restore-dest","name":"cli-restore-dest","type":"Microsoft.Sql/managedInstances/databases"}' + headers: + cache-control: + - no-cache + content-length: + - '423' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:39:12 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -l --mi -d -n --yes + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + accept-language: + - en-US + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstances/ayang-ltr-mi/longTermRetentionDatabases/test-4/longTermRetentionManagedInstanceBackups/ab281953-f91d-40cc-8a1b-d8b227573034%3B132313757810000000?api-version=2018-06-01-preview + response: + body: + string: '{"operation":"DeleteLTRBackup","startTime":"2020-04-16T19:39:13.447Z"}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstanceBackupAzureAsyncOperation/674078e7-894c-42de-be63-6ade59743bb1?api-version=2018-06-01-preview + cache-control: + - no-cache + content-length: + - '70' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:39:13 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstanceBackupOperationResults/674078e7-894c-42de-be63-6ade59743bb1?api-version=2018-06-01-preview + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - sql midb ltr-backup delete + Connection: + - keep-alive + ParameterSetName: + - -l --mi -d -n --yes + User-Agent: + - python/3.8.2 (Windows-10-10.0.14393-SP0) msrest/0.6.11 msrest_azure/0.6.3 + azure-mgmt-sql/0.17.0 Azure-SDK-For-Python AZURECLI/2.2.0 + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Sql/locations/westus/longTermRetentionManagedInstanceBackupAzureAsyncOperation/674078e7-894c-42de-be63-6ade59743bb1?api-version=2018-06-01-preview + response: + body: + string: '{"name":"674078e7-894c-42de-be63-6ade59743bb1","status":"Succeeded","startTime":"2020-04-16T19:39:13.447Z"}' + headers: + cache-control: + - no-cache + content-length: + - '107' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 16 Apr 2020 19:39:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py b/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py index e37df7ea035..de0c3da59f4 100644 --- a/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py +++ b/src/azure-cli/azure/cli/command_modules/sql/tests/latest/test_sql_commands.py @@ -3194,8 +3194,122 @@ def test_sql_managed_db_short_retention(self, resource_group, resource_group_loc self.check('retentionDays', '{retention_days_dec}')]) -class SqlManagedInstanceRestoreDeletedDbScenarioTest(ScenarioTest): +class SqlManagedInstanceDbLongTermRetentionScenarioTest(ScenarioTest): + @record_only() + def test_sql_managed_db_long_term_retention( + self): + + self.kwargs.update({ + 'rg': 'clitestxj6awmetud', + 'loc': 'westus', + 'managed_instance_name': 'ayang-ltr-mi', + 'database_name': 'test-4', + 'weekly_retention': 'P1W', + 'monthly_retention': 'P1M', + 'yearly_retention': 'P2M', + 'week_of_year': 12 + }) + + # test update long term retention on live database + self.cmd( + 'sql midb ltr-policy set -g {rg} --mi {managed_instance_name} -n {database_name} --weekly-retention {weekly_retention} --monthly-retention {monthly_retention} --yearly-retention {yearly_retention} --week-of-year {week_of_year}', + checks=[ + self.check('resourceGroup', '{rg}'), + self.check('weeklyRetention', '{weekly_retention}'), + self.check('monthlyRetention', '{monthly_retention}'), + self.check('yearlyRetention', '{yearly_retention}')]) + + # test get long term retention policy on live database + self.cmd( + 'sql midb ltr-policy show -g {rg} --mi {managed_instance_name} -n {database_name}', + checks=[ + self.check('resourceGroup', '{rg}'), + self.check('weeklyRetention', '{weekly_retention}'), + self.check('monthlyRetention', '{monthly_retention}'), + self.check('yearlyRetention', '{yearly_retention}')]) + + # test list long term retention backups for location + # with resource group + self.cmd( + 'sql midb ltr-backup list -l {loc} -g {rg}', + checks=[ + self.check('length(@)', 3)]) + + # without resource group + self.cmd( + 'sql midb ltr-backup list -l {loc}', + checks=[ + self.check('length(@)', 3)]) + + # test list long term retention backups for instance + # with resource group + self.cmd( + 'sql midb ltr-backup list -l {loc} --mi {managed_instance_name} -g {rg}', + checks=[ + self.check('length(@)', 3)]) + + # without resource group + self.cmd( + 'sql midb ltr-backup list -l {loc} --mi {managed_instance_name}', + checks=[ + self.check('length(@)', 3)]) + + # test list long term retention backups for database + # with resource group + self.cmd( + 'sql midb ltr-backup list -l {loc} --mi {managed_instance_name} -d {database_name} -g {rg}', + checks=[ + self.check('length(@)', 1)]) + + # without resource group + self.cmd( + 'sql midb ltr-backup list -l {loc} --mi {managed_instance_name} -d {database_name}', + checks=[ + self.check('length(@)', 1)]) + + # setup for test show long term retention backup + backup = self.cmd( + 'sql midb ltr-backup list -l {loc} --mi {managed_instance_name} -d {database_name} --latest').get_output_in_json() + + self.kwargs.update({ + 'backup_name': backup[0]['name'], + 'backup_id': backup[0]['id'] + }) + + # test show long term retention backup + self.cmd( + 'sql midb ltr-backup show -l {loc} --mi {managed_instance_name} -d {database_name} -n {backup_name}', + checks=[ + self.check('resourceGroup', '{rg}'), + self.check('managedInstanceName', '{managed_instance_name}'), + self.check('databaseName', '{database_name}'), + self.check('name', '{backup_name}')]) + + self.cmd( + 'sql midb ltr-backup show --id {backup_id}', + checks=[ + self.check('resourceGroup', '{rg}'), + self.check('managedInstanceName', '{managed_instance_name}'), + self.check('databaseName', '{database_name}'), + self.check('name', '{backup_name}')]) + + # test restore managed database from LTR backup + self.kwargs.update({ + 'dest_database_name': 'cli-restore-dest' + }) + self.cmd( + 'sql midb ltr-backup restore --backup-id \'{backup_id}\' --dest-database {dest_database_name} --dest-mi {managed_instance_name} --dest-resource-group {rg}', + checks=[ + self.check('name', '{dest_database_name}')]) + + # test delete long term retention backup + self.cmd( + 'sql midb ltr-backup delete -l {loc} --mi {managed_instance_name} -d {database_name} -n \'{backup_name}\' --yes', + checks=[NoneCheck()]) + + +class SqlManagedInstanceRestoreDeletedDbScenarioTest(ScenarioTest): @ResourceGroupPreparer(random_name_length=17, name_prefix='clitest') def test_sql_managed_deleted_db_restore(self, resource_group, resource_group_location):