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 show_item(cmd, client, resource_group_name, vault_name, container_name, name, backup_management_type=None, workload_type=None): if custom_help.is_native_name(name) and custom_help.is_native_name( container_name): client = protected_items_cf(cmd.cli_ctx) return client.get(vault_name, resource_group_name, fabric_name, container_name, name) container_type = custom_help.validate_and_extract_container_type( container_name, backup_management_type) items = list_items(cmd, client, resource_group_name, vault_name, workload_type, container_name, container_type) if custom_help.is_native_name(name): filtered_items = [ item for item in items if item.name.lower() == name.lower() ] else: filtered_items = [ item for item in items if item.properties.friendly_name.lower() == name.lower() ] return custom_help.get_none_one_or_many(filtered_items)
def register_wl_container(cmd, client, vault_name, resource_group_name, workload_type, resource_id, container_type): if not cust_help.is_id(resource_id): raise CLIError( """ Resource ID is not a valid one. """) workload_type = _check_map(workload_type, workload_type_map) container_name = _get_protectable_container_name(cmd, resource_group_name, vault_name, resource_id) if container_name is None or not cust_help.is_native_name(container_name): filter_string = cust_help.get_filter_string({'backupManagementType': "AzureWorkload"}) # refresh containers and try to get the protectable container object again refresh_result = client.refresh(vault_name, resource_group_name, fabric_name, filter=filter_string, cls=cust_help.get_pipeline_response) cust_help.track_refresh_operation(cmd.cli_ctx, refresh_result, vault_name, resource_group_name) container_name = _get_protectable_container_name(cmd, resource_group_name, vault_name, resource_id) if container_name is None or not cust_help.is_native_name(container_name): raise ResourceNotFoundError( """ Container unavailable or already registered. """) properties = AzureVMAppContainerProtectionContainer(backup_management_type=container_type, source_resource_id=resource_id, workload_type=workload_type) param = ProtectionContainerResource(properties=properties) # Trigger register and wait for completion result = client.register(vault_name, resource_group_name, fabric_name, container_name, param, cls=cust_help.get_pipeline_response) return cust_help.track_register_operation(cmd.cli_ctx, result, vault_name, resource_group_name, container_name)
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 _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 _get_storage_account_from_list(container_list, storage_account_name): storage_account = None for container in container_list: if helper.is_native_name(storage_account_name) and container.name == storage_account_name: return container friendly_name = container.properties.friendly_name if not helper.is_native_name(storage_account_name) and friendly_name == storage_account_name: if storage_account is not None: raise CLIError("multiple storage accounts found. Please provide native names instead") storage_account = container return storage_account
def register_wl_container(cmd, client, vault_name, resource_group_name, workload_type, resource_id, container_type): if not cust_help.is_id(resource_id): raise CLIError( """ Resource ID is not a valid one. """) workload_type = workload_type_map[workload_type] container_name = resource_id.split('/')[-1] containers = list_protectable_containers(cmd, resource_group_name, vault_name) for container in containers: if cust_help.get_resource_id(container.properties.container_id) == cust_help.get_resource_id(resource_id): container_name = container.name break if not cust_help.is_native_name(container_name): raise CLIError( """ Container unavailable or already registered. """) properties = AzureVMAppContainerProtectionContainer(backup_management_type=container_type, source_resource_id=resource_id, workload_type=workload_type) param = ProtectionContainerResource(properties=properties) # Trigger register and wait for completion result = sdk_no_wait(True, client.register, vault_name, resource_group_name, fabric_name, container_name, param) return cust_help.track_register_operation(cmd.cli_ctx, result, vault_name, resource_group_name, container_name)
def unregister_container(cmd, client, vault_name, resource_group_name, container_name, backup_management_type=None): container = None container_type = custom_help.validate_and_extract_container_type( container_name, backup_management_type) if not custom_help.is_native_name(container_name): containrs_client = backup_protection_containers_cf(cmd.cli_ctx) container = show_container(cmd, containrs_client, container_name, resource_group_name, vault_name, backup_management_type) container_name = container.name if container_type.lower() == "azurestorage": return custom_afs.unregister_afs_container(cmd, client, vault_name, resource_group_name, container_name) if container_type.lower() == "azureworkload": return custom_wl.unregister_wl_container(cmd, client, vault_name, resource_group_name, container_name) return None
def re_register_wl_container(cmd, client, vault_name, resource_group_name, workload_type, container_name, container_type): workload_type = workload_type_map[workload_type] if not cust_help.is_native_name(container_name): raise CLIError( """ Container name passed cannot be a friendly name. Please pass a native container name. """) backup_cf = backup_protection_containers_cf(cmd.cli_ctx) containers = common.list_containers(backup_cf, resource_group_name, vault_name, container_type) source_resource_id = None for container in containers: if container.name == container_name: source_resource_id = container.properties.source_resource_id break if not source_resource_id: raise CLIError( """ No such registered container exists. """) properties = AzureVMAppContainerProtectionContainer(backup_management_type=container_type, workload_type=workload_type, operation_type='Reregister', source_resource_id=source_resource_id) param = ProtectionContainerResource(properties=properties) # Trigger register and wait for completion result = sdk_no_wait(True, client.register, vault_name, resource_group_name, fabric_name, container_name, param) return cust_help.track_register_operation(cmd.cli_ctx, result, vault_name, resource_group_name, container_name)
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_protectable_items(cmd, client, resource_group_name, vault_name, workload_type, backup_management_type="AzureWorkload", container_name=None, protectable_item_type=None, server_name=None): if backup_management_type != "AzureWorkload": raise ValidationError(""" Only supported value of backup-management-type is 'AzureWorkload' for this command. """) container_uri = None if container_name: if custom_help.is_native_name(container_name): container_uri = container_name else: container_client = backup_protection_containers_cf(cmd.cli_ctx) container = show_container(cmd, container_client, container_name, resource_group_name, vault_name, backup_management_type) custom_help.validate_container(container) if isinstance(container, list): raise ValidationError(""" Multiple containers with same Friendly Name found. Please give native names instead. """) container_uri = container.name return custom_wl.list_protectable_items(client, resource_group_name, vault_name, workload_type, backup_management_type, container_uri, protectable_item_type, server_name)
def show_protectable_item(items, name, server_name, protectable_item_type): protectable_item_type = _check_map(protectable_item_type, protectable_item_type_map) # Name filter if cust_help.is_native_name(name): filtered_items = [ item for item in items if item.name.lower() == name.lower() ] else: filtered_items = [ item for item in items if item.properties.friendly_name.lower() == name.lower() ] # Server Name filter filtered_items = [ item for item in filtered_items if item.properties.server_name.lower() == server_name.lower() ] # Protectable Item Type filter filtered_items = [ item for item in filtered_items if item.properties.protectable_item_type.lower() == protectable_item_type.lower() ] return cust_help.get_none_one_or_many(filtered_items)
def unregister_wl_container(cmd, client, vault_name, resource_group_name, container_name): if not cust_help.is_native_name(container_name): raise CLIError( """ Container name passed cannot be a friendly name. Please pass a native container name. """) # Trigger unregister and wait for completion result = client.unregister(vault_name, resource_group_name, fabric_name, container_name, raw=True) return cust_help.track_register_operation(cmd.cli_ctx, result, vault_name, resource_group_name, container_name)
def list_protectable_items(cmd, client, resource_group_name, vault_name, workload_type, container_name=None): container_uri = None if container_name: if custom_help.is_native_name(container_name): container_uri = container_name else: container_client = backup_protection_containers_cf(cmd.cli_ctx) container = show_container(cmd, container_client, container_name, resource_group_name, vault_name, "AzureWorkload") custom_help.validate_container(container) container_uri = container.name return custom_wl.list_protectable_items(client, resource_group_name, vault_name, workload_type, container_uri)
def show_item(cmd, client, resource_group_name, vault_name, container_name, name, backup_management_type=None, workload_type=None, use_secondary_region=None): 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() in crr_not_supported_bmt: raise InvalidArgumentValueError(""" --use-secondary-region flag is not supported for this backup management type. Please either remove the flag or query for any other container type. """) else: if custom_help.is_native_name(name) and custom_help.is_native_name( container_name): client = protected_items_cf(cmd.cli_ctx) return client.get(vault_name, resource_group_name, fabric_name, container_name, name) items = list_items(cmd, client, resource_group_name, vault_name, workload_type, container_name, container_type, use_secondary_region) if custom_help.is_native_name(name): filtered_items = [ item for item in items if item.name.lower() == name.lower() ] else: filtered_items = [ item for item in items if item.properties.friendly_name.lower() == name.lower() ] return custom_help.get_none_one_or_many(filtered_items)
def show_container(cmd, client, name, resource_group_name, vault_name, backup_management_type=None, status="Registered"): if custom_help.is_native_name(name): return protection_containers_cf(cmd.cli_ctx).get( vault_name, resource_group_name, fabric_name, name) container_type = custom_help.validate_and_extract_container_type( name, backup_management_type) containers = _get_containers(client, container_type, status, resource_group_name, vault_name, name) return custom_help.get_none_one_or_many(containers)
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 disable_auto_for_azure_wl(client, resource_group_name, vault_name, item_name): if not cust_help.is_native_name(item_name): raise CLIError(""" Protectable Item name must be native. """) protectable_item_type = item_name.split(';')[0] if protectable_item_type.lower() != 'sqlinstance': raise CLIError(""" Protectable Item can only be of type SQLInstance. """) intent_object_name = str(uuid4()) try: client.delete(vault_name, resource_group_name, fabric_name, intent_object_name) return {'status': True} except Exception: return {'status': False}
def unregister_container(cmd, client, vault_name, resource_group_name, container_name, backup_management_type=None): container = None # container_friendly_name = None container_type = custom_help.validate_and_extract_container_type( container_name, backup_management_type) if not custom_help.is_native_name(container_name): containrs_client = backup_protection_containers_cf(cmd.cli_ctx) container = show_container(cmd, containrs_client, container_name, resource_group_name, vault_name, backup_management_type) container_name = container.name # container_friendly_name = container.properties.friendly_name if container_type.lower() == "azurestorage": return custom_afs.unregister_afs_container(cmd, client, vault_name, resource_group_name, container_name) if container_type.lower() == "azureworkload": return custom_wl.unregister_wl_container(cmd, client, vault_name, resource_group_name, container_name) # if container_type.lower() == "mab": # if container_friendly_name is None: # containrs_client = backup_protection_containers_cf(cmd.cli_ctx) # container = show_container(cmd, containrs_client, container_name, resource_group_name, vault_name, # backup_management_type) # container_friendly_name = container.properties.friendly_name # mab_client = registered_identities_cf(cmd.cli_ctx) # result = mab_client.delete(resource_group_name, vault_name, container_friendly_name, # cls=custom_help.get_pipeline_response) # return custom_help.track_mab_unregister_operation(cmd.cli_ctx, result, vault_name, resource_group_name, # container_name) return None
def list_protectable_items(cmd, client, resource_group_name, vault_name, workload_type, container_name=None): container_uri = None if container_name: if custom_help.is_native_name(container_name): container_uri = container_name else: container_client = backup_protection_containers_cf(cmd.cli_ctx) container = show_container(cmd, container_client, container_name, resource_group_name, vault_name, "AzureWorkload") custom_help.validate_container(container) if isinstance(container, list): raise ValidationError(""" Multiple containers with same Friendly Name found. Please give native names instead. """) container_uri = container.name return custom_wl.list_protectable_items(client, resource_group_name, vault_name, workload_type, container_uri)
def show_container(cmd, client, name, resource_group_name, vault_name, backup_management_type=None, status="Registered", use_secondary_region=None): container_type = custom_help.validate_and_extract_container_type( 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 container of type AzureStorage. Please either remove the flag or query for any other container type. """) if custom_help.is_native_name(name): return protection_containers_cf(cmd.cli_ctx).get( vault_name, resource_group_name, fabric_name, name) containers = _get_containers(client, container_type, status, resource_group_name, vault_name, name, use_secondary_region) return custom_help.get_none_one_or_many(containers)