def list_wl_recovery_points(cmd, client, resource_group_name, vault_name, item, start_date=None, end_date=None, extended_info=None): # Get container and item URIs container_uri = cust_help.get_protection_container_uri_from_id(item.id) item_uri = cust_help.get_protected_item_uri_from_id(item.id) query_end_date, query_start_date = cust_help.get_query_dates(end_date, start_date) if query_end_date and query_start_date: cust_help.is_range_valid(query_start_date, query_end_date) filter_string = cust_help.get_filter_string({ 'startDate': query_start_date, 'endDate': query_end_date}) if cmd.name.split()[2] == 'show-log-chain' or extended_info is not None: filter_string = cust_help.get_filter_string({ 'restorePointQueryType': 'Log', 'startDate': query_start_date, 'endDate': query_end_date, 'extendedInfo': extended_info}) # Get recovery points recovery_points = client.list(vault_name, resource_group_name, fabric_name, container_uri, item_uri, filter_string) paged_recovery_points = cust_help.get_list_from_paged_response(recovery_points) return paged_recovery_points
def list_protectable_containers(cli_ctx, resource_group_name, vault_name): filter_string = helper.get_filter_string({ 'backupManagementType': "AzureStorage"}) client = protectable_containers_cf(cli_ctx) paged_containers = client.list(vault_name, resource_group_name, fabric_name, filter_string) return helper.get_list_from_paged_response(paged_containers)
def list_recovery_points(client, resource_group_name, vault_name, item, start_date=None, end_date=None): # Get container and item URIs container_uri = helper.get_protection_container_uri_from_id(item.id) item_uri = helper.get_protected_item_uri_from_id(item.id) query_end_date, query_start_date = helper.get_query_dates( end_date, start_date) filter_string = helper.get_filter_string({ 'startDate': query_start_date, 'endDate': query_end_date }) # Get recovery points recovery_points = client.list(vault_name, resource_group_name, fabric_name, container_uri, item_uri, filter_string) paged_recovery_points = helper.get_list_from_paged_response( recovery_points) return paged_recovery_points
def _get_containers(client, backup_management_type, status, resource_group_name, vault_name, container_name=None, use_secondary_region=None): filter_dict = { 'backupManagementType': backup_management_type, 'status': status } if container_name and not custom_help.is_native_name(container_name): filter_dict['friendlyName'] = container_name filter_string = custom_help.get_filter_string(filter_dict) if use_secondary_region: if backup_management_type.lower() in crr_not_supported_bmt: raise InvalidArgumentValueError(""" --use-secondary-region flag is not supported for the --backup-management-type provided. Please either remove the flag or query for any other backup-management-type. """) paged_containers = client.list(vault_name, resource_group_name, filter_string) containers = custom_help.get_list_from_paged_response(paged_containers) if container_name and custom_help.is_native_name(container_name): return [ container for container in containers if container.name.lower() == container_name.lower() ] return containers
def _try_get_protectable_item_for_afs(cli_ctx, vault_name, resource_group_name, afs_name, storage_account_name): backup_protectable_items_client = backup_protectable_items_cf(cli_ctx) filter_string = helper.get_filter_string({ 'backupManagementType': backup_management_type, 'workloadType': workload_type}) protectable_items_paged = backup_protectable_items_client.list(vault_name, resource_group_name, filter_string) protectable_items = helper.get_list_from_paged_response(protectable_items_paged) result = protectable_items if helper.is_native_name(storage_account_name): result = [protectable_item for protectable_item in result if protectable_item.id.split('/')[12] == storage_account_name.lower()] else: result = [protectable_item for protectable_item in result if protectable_item.properties.parent_container_friendly_name.lower() == storage_account_name.lower()] if helper.is_native_name(afs_name): result = [protectable_item for protectable_item in result if protectable_item.name.lower() == afs_name.lower()] else: result = [protectable_item for protectable_item in result if protectable_item.properties.friendly_name.lower() == afs_name.lower()] if len(result) > 1: raise CLIError("Could not find a unique resource, Please pass native names instead") if len(result) == 1: return result[0] return None
def disable_auto_for_azure_wl(cmd, client, resource_group_name, vault_name, protectable_item): protectable_item_object = protectable_item item_id = protectable_item_object.id protectable_item_type = protectable_item_object.properties.protectable_item_type protectable_item_name = protectable_item_object.properties.friendly_name container_name = cust_help.get_protection_container_uri_from_id(item_id) if protectable_item_type.lower() not in ['sqlinstance', 'sqlavailabilitygroupcontainer']: raise CLIError( """ Protectable Item can only be of type SQLInstance or SQLAG. """) filter_string = cust_help.get_filter_string({ 'backupManagementType': "AzureWorkload", 'itemType': protectable_item_type, 'itemName': protectable_item_name, 'parentName': container_name}) protection_intents = backup_protection_intent_cf(cmd.cli_ctx).list(vault_name, resource_group_name, filter_string) paged_protection_intents = cust_help.get_list_from_paged_response(protection_intents) if len(paged_protection_intents) != 1: raise InvalidArgumentValueError("A unique intent not found. Please check if the values provided are correct.") try: client.delete(vault_name, resource_group_name, fabric_name, paged_protection_intents[0].name) return {'status': True} except Exception: return {'status': False}
def _fetch_nodes_list_and_auto_protection_policy(cmd, paged_items, resource_group_name, vault_name): protection_intent_client = backup_protection_intent_cf(cmd.cli_ctx) protection_containers_client = protection_containers_cf(cmd.cli_ctx) for item in paged_items: item_id = item.id protectable_item_type = item.properties.protectable_item_type protectable_item_name = item.properties.friendly_name container_name = cust_help.get_protection_container_uri_from_id(item_id) # fetch AutoProtectionPolicy for SQLInstance and SQLAG if protectable_item_type and protectable_item_type.lower() in ['sqlinstance', 'sqlavailabilitygroupcontainer']: setattr(item.properties, "auto_protection_policy", None) filter_string = cust_help.get_filter_string({ 'backupManagementType': "AzureWorkload", 'itemType': protectable_item_type, 'itemName': protectable_item_name, 'parentName': container_name}) protection_intents = protection_intent_client.list(vault_name, resource_group_name, filter_string) paged_protection_intents = cust_help.get_list_from_paged_response(protection_intents) if paged_protection_intents: item.properties.auto_protection_policy = paged_protection_intents[0].properties.policy_id # fetch NodesList for SQLAG if protectable_item_type and protectable_item_type.lower() == 'sqlavailabilitygroupcontainer': setattr(item.properties, "nodes_list", None) container = protection_containers_client.get(vault_name, resource_group_name, fabric_name, container_name) if container.properties.extended_info: item.properties.nodes_list = container.properties.extended_info.nodes_list
def list_recovery_points(client, resource_group_name, vault_name, item, start_date=None, end_date=None, use_secondary_region=None): if use_secondary_region: raise InvalidArgumentValueError(""" --use-secondary-region flag is not supported for --backup-management-type AzureStorage. Please either remove the flag or query for any other backup-management-type. """) # Get container and item URIs container_uri = helper.get_protection_container_uri_from_id(item.id) item_uri = helper.get_protected_item_uri_from_id(item.id) query_end_date, query_start_date = helper.get_query_dates( end_date, start_date) filter_string = helper.get_filter_string({ 'startDate': query_start_date, 'endDate': query_end_date }) # Get recovery points recovery_points = client.list(vault_name, resource_group_name, fabric_name, container_uri, item_uri, filter_string) paged_recovery_points = helper.get_list_from_paged_response( recovery_points) return paged_recovery_points
def list_protectable_items(cmd, client, resource_group_name, vault_name, workload_type, backup_management_type="AzureWorkload", container_uri=None, protectable_item_type=None, server_name=None): workload_type = _check_map(workload_type, workload_type_map) if protectable_item_type is not None: protectable_item_type = _check_map(protectable_item_type, protectable_item_type_map) filter_string = cust_help.get_filter_string({ 'backupManagementType': backup_management_type, 'workloadType': workload_type}) # Items list items = client.list(vault_name, resource_group_name, filter_string) paged_items = cust_help.get_list_from_paged_response(items) if protectable_item_type is not None: # Protectable Item Type filter paged_items = [item for item in paged_items if item.properties.protectable_item_type is not None and item.properties.protectable_item_type.lower() == protectable_item_type.lower()] if server_name is not None: # Server Name filter paged_items = [item for item in paged_items if hasattr(item.properties, 'server_name') and item.properties.server_name.lower() == server_name.lower()] if container_uri: # Container URI filter paged_items = [item for item in paged_items if cust_help.get_protection_container_uri_from_id(item.id).lower() == container_uri.lower()] _fetch_nodes_list_and_auto_protection_policy(cmd, paged_items, resource_group_name, vault_name) return paged_items
def list_items(cmd, client, resource_group_name, vault_name, workload_type=None, container_name=None, container_type=None): filter_string = custom_help.get_filter_string({ 'backupManagementType': container_type, 'itemType': workload_type }) items = client.list(vault_name, resource_group_name, filter_string) paged_items = custom_help.get_list_from_paged_response(items) if container_name: if custom_help.is_native_name(container_name): return [ item for item in paged_items if _is_container_name_match(item, container_name) ] return [ item for item in paged_items if item.properties.container_name.lower().split(';')[-1] == container_name.lower() ] return paged_items
def list_policies(client, resource_group_name, vault_name, workload_type=None, backup_management_type=None, policy_sub_type=None): workload_type = _check_map(workload_type, workload_type_map) filter_string = custom_help.get_filter_string({ 'backupManagementType': backup_management_type, 'workloadType': workload_type }) policies = client.list(vault_name, resource_group_name, filter_string) paged_policies = custom_help.get_list_from_paged_response(policies) if policy_sub_type: if policy_sub_type == 'Enhanced': paged_policies = [ policy for policy in paged_policies if (hasattr(policy.properties, 'policy_type') and policy.properties.policy_type == 'V2') ] else: paged_policies = [ policy for policy in paged_policies if (not hasattr(policy.properties, 'policy_type') or policy.properties.policy_type is None or policy.properties.policy_type == 'V1') ] return paged_policies
def _get_containers(client, backup_management_type, status, resource_group_name, vault_name, container_name=None): filter_dict = { 'backupManagementType': backup_management_type, 'status': status } if container_name and not custom_help.is_native_name(container_name): filter_dict['friendlyName'] = container_name filter_string = custom_help.get_filter_string(filter_dict) paged_containers = client.list(vault_name, resource_group_name, filter_string) containers = custom_help.get_list_from_paged_response(paged_containers) if container_name and custom_help.is_native_name(container_name): return [ container for container in containers if container.name == container_name ] return containers
def list_protectable_items(client, resource_group_name, vault_name, workload_type, container_uri=None, protectable_item_type=None): workload_type = _check_map(workload_type, workload_type_map) if protectable_item_type is not None: protectable_item_type = _check_map(protectable_item_type, protectable_item_type_map) filter_string = cust_help.get_filter_string({ 'backupManagementType': "AzureWorkload", 'workloadType': workload_type }) # Items list items = client.list(vault_name, resource_group_name, filter_string) paged_items = cust_help.get_list_from_paged_response(items) if protectable_item_type is not None: # Protectable Item Type filter paged_items = [ item for item in paged_items if item.properties.protectable_item_type.lower() == protectable_item_type.lower() ] if container_uri: return [ item for item in paged_items if cust_help.get_protection_container_uri_from_id(item.id).lower() == container_uri.lower() ] return paged_items
def list_workload_items(cmd, vault_name, resource_group_name, container_name, container_type="AzureWorkload", workload_type="SQLInstance"): filter_string = cust_help.get_filter_string({ 'backupManagementType': container_type, 'workloadItemType': workload_type}) items = backup_workload_items_cf(cmd.cli_ctx).list(vault_name, resource_group_name, fabric_name, container_name, filter_string) return cust_help.get_list_from_paged_response(items)
def show_recovery_point(cmd, client, resource_group_name, vault_name, container_name, item_name, name, workload_type=None, backup_management_type=None, use_secondary_region=None): items_client = backup_protected_items_cf(cmd.cli_ctx) item = show_item(cmd, items_client, resource_group_name, vault_name, container_name, item_name, backup_management_type, workload_type, use_secondary_region) custom_help.validate_item(item) if isinstance(item, list): raise CLIError( "Multiple items found. Please give native names instead.") # Get container and item URIs container_uri = custom_help.get_protection_container_uri_from_id(item.id) item_uri = custom_help.get_protected_item_uri_from_id(item.id) container_type = custom_help.validate_and_extract_container_type( container_name, backup_management_type) if use_secondary_region: if container_type and container_type.lower() == "azurestorage": raise InvalidArgumentValueError(""" --use-secondary-region flag is not supported for --backup-management-type AzureStorage. Please either remove the flag or query for any other backup-management-type. """) client = recovery_points_crr_cf(cmd.cli_ctx) recovery_points = client.list(vault_name, resource_group_name, fabric_name, container_uri, item_uri, None) paged_rps = custom_help.get_list_from_paged_response(recovery_points) filtered_rps = [ rp for rp in paged_rps if rp.name.lower() == name.lower() ] recovery_point = custom_help.get_none_one_or_many(filtered_rps) if recovery_point is None: raise InvalidArgumentValueError( "The recovery point provided does not exist. Please provide valid RP." ) return recovery_point try: response = client.get(vault_name, resource_group_name, fabric_name, container_uri, item_uri, name) except Exception as ex: errorMessage = str(ex) raise InvalidArgumentValueError( "Specified recovery point can not be fetched - \n" + errorMessage) return response
def list_protectable_containers(cmd, resource_group_name, vault_name, container_type="AzureWorkload"): filter_string = cust_help.get_filter_string( {'backupManagementType': container_type}) client = protectable_containers_cf(cmd.cli_ctx) paged_containers = client.list(vault_name, resource_group_name, fabric_name, filter_string) return cust_help.get_list_from_paged_response(paged_containers)
def list_associated_items_for_policy(client, resource_group_name, vault_name, name, backup_management_type): filter_string = custom_help.get_filter_string({ 'policyName': name, 'backupManagementType': backup_management_type }) items = client.list(vault_name, resource_group_name, filter_string) return custom_help.get_list_from_paged_response(items)
def list_policies(client, resource_group_name, vault_name, workload_type=None, backup_management_type=None): filter_string = custom_help.get_filter_string({ 'backupManagementType': backup_management_type, 'workloadType': workload_type }) policies = client.list(vault_name, resource_group_name, filter_string) return custom_help.get_list_from_paged_response(policies)
def list_recovery_points(cmd, client, resource_group_name, vault_name, item, start_date=None, end_date=None, use_secondary_region=None, is_ready_for_move=None, target_tier=None, tier=None, recommended_for_archive=None): if use_secondary_region: raise ArgumentUsageError(""" --use-secondary-region flag is not supported for --backup-management-type AzureStorage. Please either remove the flag or query for any other backup-management-type. """) if is_ready_for_move is not None or target_tier is not None or tier is not None: raise ArgumentUsageError( """Invalid argument has been passed. --is-ready-for-move true, --target-tier and --tier flags are not supported for --backup-management-type AzureStorage.""" ) if recommended_for_archive is not None: raise ArgumentUsageError( """--recommended-for-archive is supported by AzureIaasVM backup management type only.""") if cmd.name.split()[2] == 'show-log-chain': raise ArgumentUsageError( "show-log-chain is supported by AzureWorkload backup management type only." ) # Get container and item URIs container_uri = helper.get_protection_container_uri_from_id(item.id) item_uri = helper.get_protected_item_uri_from_id(item.id) query_end_date, query_start_date = helper.get_query_dates( end_date, start_date) filter_string = helper.get_filter_string({ 'startDate': query_start_date, 'endDate': query_end_date }) # Get recovery points recovery_points = client.list(vault_name, resource_group_name, fabric_name, container_uri, item_uri, filter_string) paged_recovery_points = helper.get_list_from_paged_response( recovery_points) return paged_recovery_points
def list_protectable_items(client, resource_group_name, vault_name, workload_type, container_uri=None): workload_type = workload_type_map[workload_type] filter_string = cust_help.get_filter_string({ 'backupManagementType': "AzureWorkload", 'workloadType': workload_type}) # Items list items = client.list(vault_name, resource_group_name, filter_string) paged_items = cust_help.get_list_from_paged_response(items) if container_uri: return [item for item in paged_items if cust_help.get_protection_container_uri_from_id(item.id).lower() == container_uri.lower()] return paged_items
def _get_log_time_range(cmd, resource_group_name, vault_name, item, use_secondary_region): container_uri = cust_help.get_protection_container_uri_from_id(item.id) item_uri = cust_help.get_protected_item_uri_from_id(item.id) filter_string = cust_help.get_filter_string({ 'restorePointQueryType': 'Log'}) client = recovery_points_cf(cmd.cli_ctx) if use_secondary_region: client = recovery_points_crr_cf(cmd.cli_ctx) # Get recovery points recovery_points = client.list(vault_name, resource_group_name, fabric_name, container_uri, item_uri, filter_string) paged_recovery_points = cust_help.get_none_one_or_many(cust_help.get_list_from_paged_response(recovery_points)) _check_none_and_many(paged_recovery_points, "Log time range") return paged_recovery_points.properties.time_ranges
def list_wl_recovery_points(cmd, client, resource_group_name, vault_name, item, start_date=None, end_date=None, extended_info=None, is_ready_for_move=None, target_tier=None, use_secondary_region=None, tier=None, recommended_for_archive=None): if recommended_for_archive is not None: raise ArgumentUsageError("""--recommended-for-archive is supported by AzureIaasVM backup management type only.""") # Get container and item URIs container_uri = cust_help.get_protection_container_uri_from_id(item.id) item_uri = cust_help.get_protected_item_uri_from_id(item.id) query_end_date, query_start_date = cust_help.get_query_dates(end_date, start_date) if query_end_date and query_start_date: cust_help.is_range_valid(query_start_date, query_end_date) filter_string = cust_help.get_filter_string({ 'startDate': query_start_date, 'endDate': query_end_date}) if cmd.name.split()[2] == 'show-log-chain' or extended_info is not None: filter_string = cust_help.get_filter_string({ 'restorePointQueryType': 'Log', 'startDate': query_start_date, 'endDate': query_end_date, 'extendedInfo': extended_info}) if use_secondary_region: client = recovery_points_crr_cf(cmd.cli_ctx) # Get recovery points recovery_points = client.list(vault_name, resource_group_name, fabric_name, container_uri, item_uri, filter_string) paged_recovery_points = cust_help.get_list_from_paged_response(recovery_points) common.fetch_tier(paged_recovery_points) if use_secondary_region: paged_recovery_points = [item for item in paged_recovery_points if item.properties.recovery_point_tier_details is None or (item.properties.recovery_point_tier_details is not None and item.tier_type != 'VaultArchive')] recovery_point_list = common.check_rp_move_readiness(paged_recovery_points, target_tier, is_ready_for_move) recovery_point_list = common.filter_rp_based_on_tier(recovery_point_list, tier) return recovery_point_list
def list_items(cmd, client, resource_group_name, vault_name, workload_type=None, container_name=None, container_type=None, use_secondary_region=None): workload_type = _check_map(workload_type, workload_type_map) filter_string = custom_help.get_filter_string({ 'backupManagementType': container_type, 'itemType': workload_type }) if use_secondary_region: if container_type is None: raise RequiredArgumentMissingError(""" Provide --backup-management-type to list protected items in secondary region """) if container_type and container_type.lower() in crr_not_supported_bmt: raise InvalidArgumentValueError(""" --use-secondary-region flag is not supported for the --backup-management-type provided. Please either remove the flag or query for any other backup-management-type. """) client = backup_protected_items_crr_cf(cmd.cli_ctx) items = client.list(vault_name, resource_group_name, filter_string) paged_items = custom_help.get_list_from_paged_response(items) if container_name: if custom_help.is_native_name(container_name): return [ item for item in paged_items if _is_container_name_match(item, container_name) ] return [ item for item in paged_items if item.properties.container_name.lower().split(';')[-1] == container_name.lower() ] return paged_items
def list_wl_policies(client, resource_group_name, vault_name, workload_type, backup_management_type): if workload_type is None: raise RequiredArgumentMissingError(""" Workload type is required for Azure Workload. Use --workload-type. """) if backup_management_type is None: raise CLIError(""" Backup Management Type needs to be specified for Azure Workload. """) workload_type = _check_map(workload_type, workload_type_map) filter_string = cust_help.get_filter_string({ 'backupManagementType': backup_management_type, 'workloadType': workload_type }) policies = client.list(vault_name, resource_group_name, filter_string) return cust_help.get_list_from_paged_response(policies)