def get_appliances(): """Returns two database-owning appliances """ ver_to_prov = str(version.current_version()) appl1 = provision_appliance(ver_to_prov, 'test_back') appl2 = provision_appliance(ver_to_prov, 'test_rest') appl1.configure(region=0) appl1.ipapp.wait_for_web_ui() appl2.configure(region=0) appl2.ipapp.wait_for_web_ui() return (appl1, appl2)
def get_distributed_appliances(): """Returns one database-owning appliance, and a second appliance that connects to the database of the first. """ ver_to_prov = str(version.current_version()) appl1 = provision_appliance(ver_to_prov, "long-test_childDB_A") appl2 = provision_appliance(ver_to_prov, "long-test_childDB_B") appl1.configure(region=1, patch_ajax_wait=False) appl1.ipapp.wait_for_web_ui() appl2.configure(region=1, patch_ajax_wait=False, key_address=appl1.address, db_address=appl1.address) appl2.ipapp.wait_for_web_ui() return (appl1, appl2)
def get_replication_appliances(): """Returns two database-owning appliances configured with unique region numbers. """ ver_to_prov = str(version.current_version()) appl1 = provision_appliance(ver_to_prov, 'test_repl_A') appl2 = provision_appliance(ver_to_prov, 'test_repl_B') appl1.configure(region=1, patch_ajax_wait=False) appl1.ipapp.wait_for_web_ui() appl2.configure(region=2, patch_ajax_wait=False, key_address=appl1.address) appl2.ipapp.wait_for_web_ui() return (appl1, appl2)
def get_replication_appliances(): """Returns two database-owning appliances configured with unique region numbers. """ ver_to_prov = str(version.current_version()) appl1 = provision_appliance(ver_to_prov, 'long-test_repl_A') appl2 = provision_appliance(ver_to_prov, 'long-test_repl_B') appl1.configure(region=1) appl1.ipapp.wait_for_web_ui() update_appliance_uuid(appl2.address) appl2.configure(region=2, key_address=appl1.address) appl2.ipapp.wait_for_web_ui() return (appl1, appl2)
def get_distributed_appliances(): """Returns one database-owning appliance, and a second appliance that connects to the database of the first. """ ver_to_prov = str(version.current_version()) appl1 = provision_appliance(ver_to_prov, 'test_childDB_A') appl2 = provision_appliance(ver_to_prov, 'test_childDB_B') appl1.configure(region=1, patch_ajax_wait=False) appl1.ipapp.wait_for_web_ui() appl2.configure(region=1, patch_ajax_wait=False, key_address=appl1.address, db_address=appl1.address) appl2.ipapp.wait_for_web_ui() return (appl1, appl2)
def get_replication_appliances(): """Returns two database-owning appliances configured with unique region numbers. """ ver_to_prov = str(version.current_version()) appl1 = provision_appliance(ver_to_prov, "long-test_repl_A") appl2 = provision_appliance(ver_to_prov, "long-test_repl_B") appl1.configure(region=1) appl1.ipapp.wait_for_web_ui() update_appliance_uuid(appl2.address) appl2.configure(region=2, key_address=appl1.address) appl2.ipapp.wait_for_web_ui() return (appl1, appl2)
def fleecing_vm( request, compliance_vm, vm_analysis, provider_mgmt, provider_key, provider_crud, analysis_profile): logger.info("Provisioning an appliance for fleecing on {}".format(provider_key)) # TODO: When we get something smaller, use it! appliance = provision_appliance( vm_name_prefix=PREFIX + "for_fleece_", version=str(version.current_version()), provider_name=provider_key) request.addfinalizer(lambda: diaper(appliance.destroy)) logger.info("Appliance {} provisioned".format(appliance.vm_name)) vm = Vm(appliance.vm_name, provider_crud) provider_crud.refresh_provider_relationships() vm.wait_to_appear() # Assign the analysis profile action = Action( "Assign analysis profile {}".format(analysis_profile.name), "Assign Profile to Analysis Task", dict(analysis_profile=analysis_profile.name)) action.create() request.addfinalizer(action.delete) policy = VMControlPolicy("Analysis profile policy {}".format(generate_random_string())) policy.create() request.addfinalizer(policy.delete) policy.assign_actions_to_event("VM Analysis Start", action) analysis_pp = PolicyProfile( "Analysis profile PP {}".format(generate_random_string()), policies=[policy]) analysis_pp.create() request.addfinalizer(analysis_pp.delete) vm.assign_policy_profiles(analysis_pp.description) request.addfinalizer(lambda: vm.unassign_policy_profiles(analysis_pp.description)) return vm
def compliance_vm(request, provider_key, provider_crud): try: ip_addr = re.findall(r'[0-9]+(?:\.[0-9]+){3}', store.base_url)[0] appl_name = provider_crud.get_mgmt_system().get_vm_name_from_ip(ip_addr) appliance = Appliance(provider_key, appl_name) logger.info( "The tested appliance ({}) is already on this provider ({}) so reusing it.".format( appl_name, provider_key)) appliance.configure_fleecing() vm = Vm(appl_name, provider_crud) except VmNotFoundViaIP: logger.info("Provisioning a new appliance on provider {}.".format(provider_key)) appliance = provision_appliance( vm_name_prefix=PREFIX + "host_", version=str(version.current_version()), provider_name=provider_key) request.addfinalizer(lambda: diaper(appliance.destroy)) appliance.configure(setup_fleece=True) vm = Vm(appliance.vm_name, provider_crud) # Do the final touches with appliance.ipapp(browser_steal=True) as appl: appl.set_session_timeout(86400) provider_crud.refresh_provider_relationships() vm.wait_to_appear() vm.load_details() wait_for_ssa_enabled() yield vm
def fleecing_vm(request, compliance_vm, vm_analysis, provider_mgmt, provider_key, provider_crud, analysis_profile): logger.info("Provisioning an appliance for fleecing on {}".format(provider_key)) # TODO: When we get something smaller, use it! appliance = provision_appliance( vm_name_prefix=PREFIX + "for_fleece_", version=str(version.current_version()), provider_name=provider_key ) request.addfinalizer(lambda: diaper(appliance.destroy)) logger.info("Appliance {} provisioned".format(appliance.vm_name)) vm = Vm(appliance.vm_name, provider_crud) provider_crud.refresh_provider_relationships() vm.wait_to_appear() return vm
def fleecing_vm(request, compliance_vm, provider, analysis_profile): logger.info("Provisioning an appliance for fleecing on %s", provider.key) # TODO: When we get something smaller, use it! appliance = provision_appliance(vm_name_prefix=PREFIX + "for_fleece_", version=str(version.current_version()), provider_name=provider.key) request.addfinalizer(lambda: diaper(appliance.destroy)) logger.info("Appliance %s provisioned", appliance.vm_name) vm = VM.factory(appliance.vm_name, provider) provider.refresh_provider_relationships() vm.wait_to_appear() return vm
def fleecing_vm(request, compliance_vm, provider, analysis_profile): logger.info("Provisioning an appliance for fleecing on %s", provider.key) # TODO: When we get something smaller, use it! appliance = provision_appliance( vm_name_prefix=PREFIX + "for_fleece_", version=str(version.current_version()), provider_name=provider.key) request.addfinalizer(lambda: diaper(appliance.destroy)) logger.info("Appliance %s provisioned", appliance.vm_name) vm = VM.factory(appliance.vm_name, provider) provider.refresh_provider_relationships() vm.wait_to_appear() return vm
def compliance_vm(request, provider): try: ip_addr = urlparse(store.base_url).hostname appl_name = provider.mgmt.get_vm_name_from_ip(ip_addr) appliance = Appliance(provider.key, appl_name) logger.info( "The tested appliance ({}) is already on this provider ({}) so reusing it." .format(appl_name, provider.key)) try: appliance.configure_fleecing() except (EOFError, ApplianceException) as e: # If something was happening, restart and wait for the UI to reappear to prevent errors appliance.ipapp.reboot() pytest.skip( "Error during appliance configuration. Skipping:\n{}: {}". format(type(e).__name__, str(e))) vm = Vm(appl_name, provider) except VmNotFoundViaIP: logger.info("Provisioning a new appliance on provider {}.".format( provider.key)) appliance = provision_appliance(vm_name_prefix=PREFIX + "host_", version=str(version.current_version()), provider_name=provider.key) request.addfinalizer(lambda: diaper(appliance.destroy)) try: appliance.configure(setup_fleece=True) except (EOFError, ApplianceException) as e: # Add known exceptions as needed. pytest.skip( "Error during appliance configuration. Skipping:\n{}: {}". format(type(e).__name__, str(e))) vm = Vm(appliance.vm_name, provider) if provider.type in {"rhevm"}: request.addfinalizer(appliance.remove_rhev_direct_lun_disk) # Do the final touches with appliance.ipapp(browser_steal=True) as appl: appl.set_session_timeout(86400) provider.refresh_provider_relationships() vm.wait_to_appear() vm.load_details() wait_for_ssa_enabled() yield vm
def compliance_vm(request, provider): try: ip_addr = urlparse(store.base_url).hostname appl_name = provider.mgmt.get_vm_name_from_ip(ip_addr) appliance = Appliance(provider.key, appl_name) logger.info( "The tested appliance (%s) is already on this provider (%s) so reusing it.", appl_name, provider.key) try: appliance.configure_fleecing() except (EOFError, ApplianceException) as e: # If something was happening, restart and wait for the UI to reappear to prevent errors appliance.ipapp.reboot() pytest.skip( "Error during appliance configuration. Skipping:\n{}: {}".format( type(e).__name__, str(e))) vm = VM.factory(appl_name, provider) except exceptions.VMNotFoundViaIP: logger.info("Provisioning a new appliance on provider %s.", provider.key) appliance = provision_appliance( vm_name_prefix=PREFIX + "host_", version=str(version.current_version()), provider_name=provider.key) request.addfinalizer(lambda: diaper(appliance.destroy)) try: appliance.configure(setup_fleece=True) except (EOFError, ApplianceException) as e: # Add known exceptions as needed. pytest.skip( "Error during appliance configuration. Skipping:\n{}: {}".format( type(e).__name__, str(e))) vm = VM.factory(appliance.vm_name, provider) if provider.type in {"rhevm"}: request.addfinalizer(appliance.remove_rhev_direct_lun_disk) # Do the final touches with appliance.ipapp(browser_steal=True) as appl: appl.set_session_timeout(86400) provider.refresh_provider_relationships() vm.wait_to_appear() vm.load_details() wait_for_ssa_enabled() yield vm
def get_appliance(provider): '''Fixture to provision appliance to the provider being tested if necessary''' global appliance_list, main_provider appliance_vm_prefix = "long-test_ssa-appl_" if provider.key not in appliance_list: try: # see if the current appliance is on the needed provider ip_addr = urlparse(store.base_url).hostname appl_name = provider.mgmt.get_vm_name_from_ip(ip_addr) logger.info( "re-using already provisioned appliance on {}...".format( provider.key)) main_provider = provider.key appliance = Appliance(provider.key, appl_name) appliance.configure_fleecing() appliance_list[provider.key] = appliance except Exception as e: logger.exception(e) # provision appliance and configure ver_to_prov = str(version.current_version()) logger.info("provisioning {} appliance on {}...".format( ver_to_prov, provider.key)) appliance = None try: appliance = provision_appliance( vm_name_prefix=appliance_vm_prefix, version=ver_to_prov, provider_name=provider.key) logger.info("appliance IP address: " + str(appliance.address)) appliance.configure(setup_fleece=True) except Exception as e: logger.exception(e) if appliance is not None: appliance.destroy() raise CFMEException( 'Appliance encountered error during initial setup: {}'. format(str(e))) appliance_list[provider.key] = appliance return appliance_list[provider.key]
def get_appliance(provider_crud): '''Fixture to provision appliance to the provider being tested if necessary''' global appliance_list, main_provider appliance_vm_prefix = "test_vm_analysis" if provider_crud.key not in appliance_list: try: # see if the current appliance is on the needed provider ip_addr = re.findall(r'[0-9]+(?:\.[0-9]+){3}', conf.env['base_url'])[0] appl_name = provider_crud.get_mgmt_system().get_vm_name_from_ip(ip_addr) logger.info("re-using already provisioned appliance on {}...".format(provider_crud.key)) main_provider = provider_crud.key appliance = Appliance(provider_crud.key, appl_name) appliance.configure_fleecing() appliance_list[provider_crud.key] = appliance except Exception as e: logger.error("Exception: %s" % str(e)) # provision appliance and configure ver_to_prov = str(version.current_version()) logger.info("provisioning {} appliance on {}...".format(ver_to_prov, provider_crud.key)) appliance = None try: appliance = provision_appliance( vm_name_prefix=appliance_vm_prefix, version=ver_to_prov, provider_name=provider_crud.key) logger.info("appliance IP address: " + str(appliance.address)) appliance.configure(setup_fleece=True) except Exception as e: logger.error("Exception: %s" % str(e)) if appliance is not None: appliance.destroy() raise CFMEException( 'Appliance encountered error during initial setup: {}'.format(str(e))) appliance_list[provider_crud.key] = appliance return appliance_list[provider_crud.key]
def get_appliance(provider): '''Fixture to provision appliance to the provider being tested if necessary''' global appliance_list, main_provider appliance_vm_prefix = "long-test_ssa-appl_" if provider.key not in appliance_list: try: # see if the current appliance is on the needed provider ip_addr = urlparse(store.base_url).hostname appl_name = provider.mgmt.get_vm_name_from_ip(ip_addr) logger.info("re-using already provisioned appliance on {}...".format(provider.key)) main_provider = provider.key appliance = Appliance(provider.key, appl_name) appliance.configure_fleecing() appliance_list[provider.key] = appliance except Exception as e: logger.exception(e) # provision appliance and configure ver_to_prov = str(version.current_version()) logger.info("provisioning {} appliance on {}...".format(ver_to_prov, provider.key)) appliance = None try: appliance = provision_appliance( vm_name_prefix=appliance_vm_prefix, version=ver_to_prov, provider_name=provider.key) logger.info("appliance IP address: " + str(appliance.address)) appliance.configure(setup_fleece=True) except Exception as e: logger.exception(e) if appliance is not None: appliance.destroy() raise CFMEException( 'Appliance encountered error during initial setup: {}'.format(str(e))) appliance_list[provider.key] = appliance return appliance_list[provider.key]
def test_app_migration(self, backup_test, soft_assert): vm_name = "migtest_" + backup_test provider = cfme_data["basic_info"]["appliances_provider"] test_data = migration_tests["backup_tests"][backup_test] template = cfme_data['basic_info']['appliance_template_big_db_disk'] # provision appliance and configure appliance = provision_appliance( vm_name_prefix=vm_name, template=template, provider_name=provider) logger.info("appliance IP address: " + str(appliance.address)) appliance.enable_internal_db() appliance.wait_for_web_ui() # start restore and migration appliance_ssh = appliance.ssh_client() appliance_ssh.put_file("./scripts/restore.py", "/root") appliance_ssh.run_command("curl -o restore_scripts.gz " + cfme_data["basic_info"]["restore_scripts_url"]) if "restore_fixes_url" in cfme_data["basic_info"].keys(): appliance_ssh.run_command("curl -o fix_scripts.gz " + cfme_data["basic_info"]["restore_fixes_url"]) appliance_ssh.run_command("curl -o backup.gz " + test_data['url']) logger.info("Running db restore/migration...") rc, output = appliance_ssh.run_command("/root/restore.py --scripts " + "/root/restore_scripts.gz --backupfile /root/backup.gz") soft_assert(rc == 0) # re-init the connection, times out over long migrations appliance_ssh.close() appliance_ssh = appliance.ssh_client() appliance_ssh.get_file("/root/output.log", ".") # Log the restore/migration output process = sub.Popen("cat ./output.log; rm -rf ./output.log", shell=True, stdout=sub.PIPE, stderr=sub.PIPE) output, error = process.communicate() logger.info("Running cmd: cat ./output.log; rm -rf ./output.log") logger.info("Output: \n" + output) # get database table counts this_db = appliance.db session = this_db.session logger.info("Checking db table counts after migration...") db_counts = {} for table_name in sorted(test_data['counts'].keys()): db_counts[table_name] = session.query(this_db[table_name]).count() # start up evmserverd and poke ui appliance_ssh.run_command("service evmserverd start") appliance.wait_for_web_ui() with appliance.browser_session(): nav.home_page_logged_in() nav_to_roles().edit_current_role_list("ems_inventory ems_operations") setup_provider(provider) provider_details = nav.infra_providers_pg().load_provider_details( cfme_data["management_systems"][provider]["name"]) vm_details = provider_details.all_vms().find_vm_page( appliance.vm_name, None, False, True, 6) soft_assert(vm_details.on_vm_details(appliance.vm_name)) # check table counts vs what we are expecting for table_name in sorted(test_data['counts'].keys()): expected_count = test_data['counts'][table_name] actual_count = db_counts[table_name] soft_assert(actual_count == expected_count, 'Table ' + table_name + '(' + str(actual_count) + ') not matching expected(' + str(expected_count) + ')') # delete appliance logger.info("Delete provisioned appliance: " + appliance.address) appliance.destroy()