def backupstore_delete_random_backup_block(client, core_api, volume_name): backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): minio_delete_random_backup_block(client, core_api, volume_name) elif is_backupTarget_nfs(backupstore): nfs_delete_random_backup_block(client, volume_name)
def backupstore_count_backup_block_files(client, core_api, volume_name): backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): return minio_count_backup_block_files(client, core_api, volume_name) elif is_backupTarget_nfs(backupstore): return nfs_count_backup_block_files(client, volume_name)
def backupstore_get_backup_blocks_dir(client, volume_name): backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): return minio_get_backup_blocks_dir(volume_name) elif is_backupTarget_nfs(backupstore): return nfs_get_backup_blocks_dir(client, volume_name)
def backupstore_get_volume_cfg_file_path(client, volume_name): backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): return minio_get_volume_cfg_file_path(volume_name) elif is_backupTarget_nfs(backupstore): return nfs_get_volume_cfg_file_path(client, volume_name)
def set_backupstore_nfs(client): backupstores = get_backupstore_url() poll_interval = get_backupstore_poll_interval() for backupstore in backupstores: if is_backupTarget_nfs(backupstore): set_backupstore_url(client, backupstore) set_backupstore_credential_secret(client, "") set_backupstore_poll_interval(client, poll_interval) break
def backupstore_delete_volume_cfg_file(client, core_api, volume_name): # NOQA backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): minio_delete_volume_cfg_file(client, core_api, volume_name) elif is_backupTarget_nfs(backupstore): nfs_delete_volume_cfg_file(client, volume_name)
def backupstore_get_backup_cfg_file_path(client, volume_name, backup_name): backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): return minio_get_backup_cfg_file_path(volume_name, backup_name) elif is_backupTarget_nfs(backupstore): return nfs_get_backup_cfg_file_path(client, volume_name, backup_name) else: raise NotImplementedError
def backupstore_delete_file(client, core_api, file_path): backup_target_setting = client.by_id_setting(SETTING_BACKUP_TARGET) backupstore = backup_target_setting.value if is_backupTarget_s3(backupstore): return mino_delete_file_in_backupstore(client, core_api, file_path) elif is_backupTarget_nfs(backupstore): return nfs_delete_file_in_backupstore(file_path) else: raise NotImplementedError
def backupstore_delete_backup_cfg_file(client, core_api, volume_name, backup_name): # NOQA backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): minio_delete_backup_cfg_file(client, core_api, volume_name, backup_name) elif is_backupTarget_nfs(backupstore): nfs_delete_backup_cfg_file(client, volume_name, backup_name) else: raise NotImplementedError
def set_backupstore_nfs(client): backup_target_setting = client.by_id_setting(SETTING_BACKUP_TARGET) backupstores = get_backupstore_url() for backupstore in backupstores: if is_backupTarget_nfs(backupstore): backup_target_setting = client.update(backup_target_setting, value=backupstore) assert backup_target_setting.value == backupstore backup_target_credential_setting = client.by_id_setting( SETTING_BACKUP_TARGET_CREDENTIAL_SECRET) backup_target_credential_setting = \ client.update(backup_target_credential_setting, value="") assert backup_target_credential_setting.value == "" break
def backupstore_write_backup_cfg_file(client, core_api, volume_name, backup_name, data): # NOQA backupstore = backupstore_get_backup_target(client) if is_backupTarget_s3(backupstore): minio_write_backup_cfg_file(client, core_api, volume_name, backup_name, data) elif is_backupTarget_nfs(backupstore): nfs_write_backup_cfg_file(client, volume_name, backup_name, data)
def test_listing_backup_volume(clients, base_image=""): # NOQA for host_id, client in clients.iteritems(): break lht_hostId = get_self_host_id() # create 3 volumes. volume1_name = generate_volume_name() volume2_name = generate_volume_name() volume3_name = generate_volume_name() volume1 = create_and_check_volume(client, volume1_name) volume2 = create_and_check_volume(client, volume2_name) volume3 = create_and_check_volume(client, volume3_name) volume1.attach(hostId=lht_hostId) volume1 = common.wait_for_volume_healthy(client, volume1_name) volume2.attach(hostId=lht_hostId) volume2 = common.wait_for_volume_healthy(client, volume2_name) volume3.attach(hostId=lht_hostId) volume3 = common.wait_for_volume_healthy(client, volume3_name) # we only test NFS here. # Since it is difficult to directly remove volume.cfg from s3 buckets setting = client.by_id_setting(common.SETTING_BACKUP_TARGET) backupstores = common.get_backupstore_url() for backupstore in backupstores: if common.is_backupTarget_nfs(backupstore): updated = False for i in range(RETRY_COMMAND_COUNT): nfs_url = backupstore.strip("nfs://") setting = client.update(setting, value=backupstore) assert setting["value"] == backupstore setting = client.by_id_setting(common.SETTING_BACKUP_TARGET) if "nfs" in setting["value"]: updated = True break assert updated _, _, snap1, _ = create_backup(client, volume1_name) _, _, snap2, _ = create_backup(client, volume2_name) _, _, snap3, _ = create_backup(client, volume3_name) # invalidate backup volume 1 by renaming volume.cfg to volume.cfg.tmp cmd = ["mkdir", "-p", "/mnt/nfs"] subprocess.check_output(cmd) cmd = ["mount", "-t", "nfs4", nfs_url, "/mnt/nfs"] subprocess.check_output(cmd) cmd = ["find", "/mnt/nfs", "-type", "d", "-name", volume1_name] volume1_backup_volume_path = subprocess.check_output(cmd).strip() cmd = ["find", volume1_backup_volume_path, "-name", "volume.cfg"] volume1_backup_volume_cfg_path = subprocess.check_output(cmd).strip() cmd = [ "mv", volume1_backup_volume_cfg_path, volume1_backup_volume_cfg_path + ".tmp" ] subprocess.check_output(cmd) subprocess.check_output(["sync"]) found1 = found2 = found3 = False for i in range(RETRY_COUNTS): bvs = client.list_backupVolume() for bv in bvs: if bv["name"] == volume1_name: if "error" in bv.messages: assert "volume.cfg" in bv.messages["error"].lower() found1 = True elif bv["name"] == volume2_name: assert not bv.messages found2 = True elif bv["name"] == volume3_name: assert not bv.messages found3 = True if found1 & found2 & found3: break time.sleep(RETRY_INTERVAL) assert found1 & found2 & found3 cmd = [ "mv", volume1_backup_volume_cfg_path + ".tmp", volume1_backup_volume_cfg_path ] subprocess.check_output(cmd) subprocess.check_output(["sync"]) found = False for i in range(RETRY_COMMAND_COUNT): try: bv1, b1 = common.find_backup(client, volume1_name, snap1["name"]) found = True break except Exception: time.sleep(1) assert found bv1.backupDelete(name=b1["name"]) for i in range(RETRY_COMMAND_COUNT): found = False backups1 = bv1.backupList() for b in backups1: if b["snapshotName"] == snap1["name"]: found = True break assert not found bv2, b2 = common.find_backup(client, volume2_name, snap2["name"]) bv2.backupDelete(name=b2["name"]) for i in range(RETRY_COMMAND_COUNT): found = False backups2 = bv2.backupList() for b in backups2: if b["snapshotName"] == snap2["name"]: found = True break assert not found bv3, b3 = common.find_backup(client, volume3_name, snap3["name"]) bv3.backupDelete(name=b3["name"]) for i in range(RETRY_COMMAND_COUNT): found = False backups3 = bv3.backupList() for b in backups3: if b["snapshotName"] == snap3["name"]: found = True break assert not found volume1.detach() volume1 = common.wait_for_volume_detached(client, volume1_name) client.delete(volume1) wait_for_volume_delete(client, volume1_name) volume2.detach() volume2 = common.wait_for_volume_detached(client, volume2_name) client.delete(volume2) wait_for_volume_delete(client, volume2_name) volume3.detach() volume3 = common.wait_for_volume_detached(client, volume3_name) client.delete(volume3) wait_for_volume_delete(client, volume3_name) volumes = client.list_volume() assert len(volumes) == 0