Ejemplo n.º 1
0
def enable_for_AzureFileShare(cmd, client, resource_group_name, vault_name, afs_name,
                              storage_account_name, policy_name):

    # get registered storage accounts
    storage_account = None
    containers_client = backup_protection_containers_cf(cmd.cli_ctx)
    registered_containers = common.list_containers(containers_client, resource_group_name, vault_name, "AzureStorage")
    storage_account = _get_storage_account_from_list(registered_containers, storage_account_name)

    # get unregistered storage accounts
    if storage_account is None:
        unregistered_containers = list_protectable_containers(cmd.cli_ctx, resource_group_name, vault_name)
        storage_account = _get_storage_account_from_list(unregistered_containers, storage_account_name)

        if storage_account is None:
            # refresh containers in the vault
            protection_containers_client = protection_containers_cf(cmd.cli_ctx)
            filter_string = helper.get_filter_string({'backupManagementType': "AzureStorage"})

            refresh_result = protection_containers_client.refresh(vault_name, resource_group_name, fabric_name,
                                                                  filter=filter_string, raw=True)
            helper.track_refresh_operation(cmd.cli_ctx, refresh_result, vault_name, resource_group_name)

            # refetch the protectable containers after refresh
            unregistered_containers = list_protectable_containers(cmd.cli_ctx, resource_group_name, vault_name)
            storage_account = _get_storage_account_from_list(unregistered_containers, storage_account_name)

            if storage_account is None:
                raise CLIError("Storage account not found or not supported.")

        # register storage account
        protection_containers_client = protection_containers_cf(cmd.cli_ctx)
        properties = AzureStorageContainer(backup_management_type="AzureStorage",
                                           source_resource_id=storage_account.properties.container_id,
                                           workload_type="AzureFileShare")
        param = ProtectionContainerResource(properties=properties)
        result = protection_containers_client.register(vault_name, resource_group_name, fabric_name,
                                                       storage_account.name, param, raw=True)
        helper.track_register_operation(cmd.cli_ctx, result, vault_name, resource_group_name, storage_account.name)

    policy = common.show_policy(protection_policies_cf(cmd.cli_ctx), resource_group_name, vault_name, policy_name)
    helper.validate_policy(policy)

    protectable_item = _get_protectable_item_for_afs(cmd.cli_ctx, vault_name, resource_group_name, afs_name,
                                                     storage_account)
    helper.validate_azurefileshare_item(protectable_item)

    container_uri = helper.get_protection_container_uri_from_id(protectable_item.id)
    item_uri = helper.get_protectable_item_uri_from_id(protectable_item.id)
    item_properties = AzureFileshareProtectedItem()

    item_properties.policy_id = policy.id
    item_properties.source_resource_id = protectable_item.properties.parent_container_fabric_id
    item = ProtectedItemResource(properties=item_properties)

    result = client.create_or_update(vault_name, resource_group_name, fabric_name,
                                     container_uri, item_uri, item, raw=True)
    return helper.track_backup_job(cmd.cli_ctx, result, vault_name, resource_group_name)
Ejemplo n.º 2
0
def _get_protectable_item_for_afs(cli_ctx, vault_name, resource_group_name,
                                  afs_name, storage_account):
    storage_account_name = storage_account.name
    protection_containers_client = protection_containers_cf(cli_ctx)

    protectable_item = _try_get_protectable_item_for_afs(
        cli_ctx, vault_name, resource_group_name, afs_name,
        storage_account_name)

    if protectable_item is None:

        filter_string = helper.get_filter_string(
            {'workloadType': "AzureFileShare"})
        result = protection_containers_client.inquire(vault_name,
                                                      resource_group_name,
                                                      fabric_name,
                                                      storage_account.name,
                                                      filter=filter_string,
                                                      raw=True)

        helper.track_inquiry_operation(cli_ctx, result, vault_name,
                                       resource_group_name,
                                       storage_account.name)

        protectable_item = _try_get_protectable_item_for_afs(
            cli_ctx, vault_name, resource_group_name, afs_name,
            storage_account_name)
    return protectable_item
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
def _get_protectable_item_for_vm(cli_ctx, vault_name, vault_rg, vm_name, vm_rg):
    protection_containers_client = protection_containers_cf(cli_ctx)

    protectable_item = _try_get_protectable_item_for_vm(cli_ctx, vault_name, vault_rg, vm_name, vm_rg)
    if protectable_item is None:
        # Protectable item not found. Trigger discovery.
        refresh_result = protection_containers_client.refresh(vault_name, vault_rg, fabric_name, raw=True)
        _track_refresh_operation(cli_ctx, refresh_result, vault_name, vault_rg)
    protectable_item = _try_get_protectable_item_for_vm(cli_ctx, vault_name, vault_rg, vm_name, vm_rg)
    return protectable_item
Ejemplo n.º 5
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)
Ejemplo n.º 6
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)