Exemple #1
0
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)
Exemple #3
0
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
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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)
Exemple #8
0
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
Exemple #9
0
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)
Exemple #10
0
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
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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
Exemple #18
0
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}
Exemple #19
0
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
Exemple #20
0
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)
Exemple #21
0
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)