def enable_protection_for_azure_wl(cmd, client, resource_group_name, vault_name, policy_object, protectable_item): # Get protectable item. protectable_item_object = protectable_item protectable_item_type = protectable_item_object.properties.protectable_item_type if protectable_item_type.lower() not in [ "sqldatabase", "sqlinstance", "saphanadatabase", "saphanasystem" ]: raise CLIError(""" Protectable Item must be either of type SQLDataBase, HANADatabase, HANAInstance or SQLInstance. """) item_name = protectable_item_object.name container_name = protectable_item_object.id.split('/')[12] cust_help.validate_policy(policy_object) policy_id = policy_object.id properties = _get_protected_item_instance(protectable_item_type) properties.backup_management_type = 'AzureWorkload' properties.policy_id = policy_id properties.workload_type = protectable_item_type param = ProtectionContainerResource(properties=properties) # Trigger enable protection and wait for completion result = client.create_or_update(vault_name, resource_group_name, fabric_name, container_name, item_name, param, raw=True) return cust_help.track_backup_job(cmd.cli_ctx, result, vault_name, resource_group_name)
def resume_protection(cmd, client, resource_group_name, vault_name, container_name, item_name, policy_name, workload_type=None, backup_management_type=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) custom_help.validate_item(item) if isinstance(item, list): raise ValidationError( "Multiple items found. Please give native names instead.") policy = show_policy(protection_policies_cf(cmd.cli_ctx), resource_group_name, vault_name, policy_name) custom_help.validate_policy(policy) if item.properties.backup_management_type.lower() == "azureiaasvm": return custom.resume_protection(cmd, client, resource_group_name, vault_name, item, policy) if item.properties.backup_management_type.lower() == "azurestorage": return custom_afs.resume_protection(cmd, client, resource_group_name, vault_name, item, policy) if item.properties.backup_management_type.lower() == "azureworkload": return custom_wl.resume_protection(cmd, client, resource_group_name, vault_name, item, policy) return None
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 update_policy_for_item(cmd, client, resource_group_name, vault_name, container_name, item_name, policy_name, workload_type=None, backup_management_type=None, tenant_id=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) custom_help.validate_item(item) if isinstance(item, list): raise ValidationError( "Multiple items found. Please give native names instead.") policy = show_policy(protection_policies_cf(cmd.cli_ctx), resource_group_name, vault_name, policy_name) custom_help.validate_policy(policy) is_critical_operation = custom_help.has_resource_guard_mapping( cmd.cli_ctx, resource_group_name, vault_name, "updateProtection") if item.properties.backup_management_type.lower() == "azureiaasvm": return custom.update_policy_for_item(cmd, client, resource_group_name, vault_name, item, policy, tenant_id, is_critical_operation) if item.properties.backup_management_type.lower() == "azurestorage": return custom_afs.update_policy_for_item(cmd, client, resource_group_name, vault_name, item, policy, tenant_id, is_critical_operation) if item.properties.backup_management_type.lower() == "azureworkload": return custom_wl.update_policy_for_item(cmd, client, resource_group_name, vault_name, item, policy, tenant_id, is_critical_operation) return None
def auto_enable_for_azure_wl(cmd, client, resource_group_name, vault_name, policy_name, protectable_item_name, protectable_item_type, server_name, workload_type): policy_object = show_policy(protection_policies_cf(cmd.cli_ctx), resource_group_name, vault_name, policy_name) custom_help.validate_policy(policy_object) protectable_items_client = backup_protectable_items_cf(cmd.cli_ctx) protectable_item = show_protectable_item(cmd, protectable_items_client, resource_group_name, vault_name, protectable_item_name, server_name, protectable_item_type, workload_type) custom_help.validate_protectable_item(protectable_item) return custom_wl.auto_enable_for_azure_wl(client, resource_group_name, vault_name, policy_object, protectable_item)