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)
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
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 _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
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 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)