def domain(request): if current_version < "5.3": return None domain = Domain(name=fauxfactory.gen_alphanumeric(), enabled=True) domain.create() request.addfinalizer(lambda: domain.delete() if domain.exists() else None) return domain
def qe_ae_data(ssh_client, rake): ssh_client.put_file(cli_path.join("QECliTesting.yaml").strpath, "/root/QECliTesting.yaml") rc, stdout = rake( "evm:automate:import DOMAIN=QECliTesting YAML_FILE=/root/QECliTesting.yaml PREVIEW=false " "ENABLED=true") assert rc == 0, stdout # Now we have to enable the domain to make it work. qe_cli_testing = Domain(name="QECliTesting") if not qe_cli_testing.is_enabled: with update(qe_cli_testing): qe_cli_testing.enabled = True
def copy_instance(request, copy_domain): miq_domain = Domain(name="ManageIQ (Locked)", enabled=True) instance = Instance(name="InspectMe", cls=Class(name="Request", namespace=Namespace(name="System", parent=miq_domain))) instance.copy_to(copy_domain)
def original_class(request, original_domain): # take the Request class and copy it for own purposes. cls = Class( name="Request", namespace=Namespace(name="System", parent=Domain(name="ManageIQ (Locked)"))) cls = cls.copy_to(original_domain) request.addfinalizer(lambda: cls.delete() if cls.exists() else None) return cls
def domain(request): if version.current_version() < "5.3": return None domain = Domain(name=fauxfactory.gen_alphanumeric(), enabled=True) domain.create() request.addfinalizer(lambda: domain.delete() if domain.exists() else None) return domain
def test_create_snapshot_via_ae(request, domain, test_vm): """This test checks whether the vm.create_snapshot works in AE. Prerequisities: * A VMware provider * A VM that has been discovered by CFME Steps: * Clone the Request class inside the System namespace into a new domain * Add a method named ``snapshot`` and insert the provided code there. * Add an instance named ``snapshot`` and set the methd from previous step as ``meth5`` * Run the simulation of the method against the VM, preferably setting ``snap_name`` to something that can be checked * Wait until snapshot with such name appears. """ # PREPARE file = data_path.join("ui").join("automate").join( "test_create_snapshot_via_ae.rb") with file.open("r") as f: method_contents = f.read() miq_domain = Domain("ManageIQ (Locked)") miq_class = Class("Request", namespace=Namespace("System", domain=miq_domain)) request_cls = miq_class.copy_to(domain) request.addfinalizer(request_cls.delete) method = Method("snapshot", data=method_contents, cls=request_cls) method.create() request.addfinalizer(method.delete) instance = Instance("snapshot", values={"meth5": "snapshot"}, cls=request_cls) instance.create() request.addfinalizer(instance.delete) # SIMULATE snap_name = fauxfactory.gen_alpha() snapshot = Vm.Snapshot(name=snap_name, parent_vm=test_vm) simulate(instance="Request", request="snapshot", attribute=["VM and Instance", test_vm.name], execute_methods=True, avp={"snap_name": snap_name}) wait_for(snapshot.does_snapshot_exist, timeout="2m", delay=10) # Clean up if it appeared snapshot.delete()
def test_domain_present(domain_name, soft_assert): """This test verifies presence of domains that are included in the appliance. Prerequisities: * Clean appliance. Steps: * Open the Automate Explorer. * Verify that all of the required domains are present. """ domain = Domain(domain_name) soft_assert(domain.exists, "Domain {} does not exist!".format(domain_name)) soft_assert(domain.is_locked, "Domain {} is not locked!".format(domain_name)) soft_assert(dbq.check_domain_enabled(domain_name), "Domain {} is not enabled!".format(domain_name))
def domain(request): dom = Domain(fauxfactory.gen_alpha(), enabled=True) dom.create() request.addfinalizer(dom.delete) return dom
def copy_domain(request): domain = Domain(name=fauxfactory.gen_alphanumeric(), enabled=True) domain.create() request.addfinalizer(lambda: domain.delete() if domain.exists() else None) return domain
def copy_domain(request): domain = Domain(name="new_domain", enabled=True) domain.create() request.addfinalizer(lambda: domain.delete() if domain.exists() else None) return domain
def setup_for_event_testing(ssh_client, db, listener_info, providers): domain_name = "EventTesting" domain = Domain(name=domain_name, enabled=True) if not domain.exists(): domain.create() # FIX THE ENV ERROR IF PRESENT if ssh_client.run_command("ruby -v")[0] != 0: logger.info("Pathing env to correctly source EVM environment") success = ssh_client.run_command("echo 'source /etc/default/evm' >> .bashrc")[0] == 0 assert success, "Issuing the patch command was unsuccessful" # Verify it works assert ssh_client.run_command("ruby -v")[0] == 0, "Patch failed" # INSTALL REST-CLIENT - REQUIRED FOR THE EVENT DISPATCHER SCRIPT if ssh_client.run_rails_command("\"require 'rest-client'\"")[0] != 0: # We have to install the gem logger.info("Installing rest-client ruby gem that is required by the event dispatcher.") success = ssh_client.run_command("gem install rest-client")[0] == 0 assert success, "Could not install 'rest-client' gem" # Verify it works assert ssh_client.run_rails_command("\"require 'rest-client'\"")[0] == 0 # IMPORT AUTOMATE NAMESPACE qe_automate_namespace_xml = "qe_event_handler.xml" qe_automate_namespace_script = "qe_event_handler.rb" local_automate_script = local(__file__)\ .new(basename="../data/{}".format(qe_automate_namespace_script))\ .strpath local_automate_file = local(__file__)\ .new(basename="../data/{}".format(qe_automate_namespace_xml))\ .strpath tmp_automate_file = "/tmp/{}".format(qe_automate_namespace_xml) # Change the information with open(local_automate_file, "r") as input_xml, \ open(tmp_automate_file, "w") as output_xml: tree = etree.parse(input_xml) root = tree.getroot() def set_text(xpath, text): field = root.xpath(xpath) assert len(field) == 1 field[0].text = text set_text("//MiqAeSchema/MiqAeField[@name='url']", re.sub(r"^http://([^/]+)/?$", "\\1", listener_info.host)) set_text("//MiqAeSchema/MiqAeField[@name='port']", str(listener_info.port)) # Put the custom script from an external file with open(local_automate_script, "r") as script: set_text("//MiqAeMethod[@name='relay_events']", etree.CDATA(script.read())) et = etree.ElementTree(root) et.write(output_xml) # copy xml file to appliance # but before that, let's check whether it's there because we may have already applied this file if ssh_client.run_command("ls /root/{}".format(qe_automate_namespace_xml))[0] != 0: ssh_client.put_file(tmp_automate_file, '/root/') # We have to convert it first for new version convert_cmd = version.pick({ version.LOWEST: None, "5.3.0.0": "evm:automate:convert DOMAIN={} FILE=/root/{} ZIP_FILE=/root/{}.zip".format( domain_name, qe_automate_namespace_xml, qe_automate_namespace_xml), }) if convert_cmd is not None: logger.info("Converting namespace for use on newer appliance...") return_code, stdout = ssh_client.run_rake_command(convert_cmd) if return_code != 0: logger.error("Namespace conversion was unsuccessful") logger.error(stdout) # We didn't successfully do that so remove the file to know # that it's needed to do it again when run again ssh_client.run_command("rm -f /root/{}*".format(qe_automate_namespace_xml)) raise AutomateImportError(stdout) # run rake cmd on appliance to import automate namespace rake_cmd = version.pick({ version.LOWEST: "evm:automate:import FILE=/root/{}".format(qe_automate_namespace_xml), "5.3.0.0": "evm:automate:import ZIP_FILE=/root/{}.zip DOMAIN={} OVERWRITE=true " "PREVIEW=false".format(qe_automate_namespace_xml, domain_name), }) logger.info("Importing the QE Automation namespace ...") return_code, stdout = ssh_client.run_rake_command(rake_cmd) if return_code != 0: logger.error("Namespace import was unsuccessful") logger.error(stdout) # We didn't successfully do that so remove the file to know # that it's needed to do it again when run again ssh_client.run_command("rm -f /root/{}*".format(qe_automate_namespace_xml)) raise AutomateImportError(stdout) # CREATE AUTOMATE INSTANCE HOOK if db is None or db.session.query(db['miq_ae_instances'].name)\ .filter(db['miq_ae_instances'].name == "RelayEvents").count() == 0: original_class = Class( name=version.pick({ version.LOWEST: "Automation Requests (Request)", "5.3": "Request" }), namespace=Namespace("System", domain=Domain("ManageIQ (Locked)"))) copied_class = original_class.copy_to(domain) instance = Instance( name="RelayEvents", display_name="RelayEvents", description="relationship hook to link to custom QE events relay namespace", values={ "rel2": { "value": "/QE/Automation/APIMethods/relay_events?event=$evm.object['event']" } }, cls=copied_class, ) instance.create() # IMPORT POLICIES policy_yaml = "profile_relay_events.yaml" policy_path = local(__file__).new(basename="../data/{}".format(policy_yaml)) if not is_imported("Automate event policies"): import_file(policy_path.strpath) # ASSIGN POLICY PROFILES for provider in providers: prov_obj = get_crud(provider) if not prov_obj.exists: prov_obj.create() prov_obj.assign_policy_profiles("Automate event policies") flash.assert_no_errors()
def setup_for_event_testing(ssh_client, db, listener_info, providers): domain_name = "EventTesting" domain = Domain(name=domain_name, enabled=True) if not domain.exists(): domain.create() # FIX THE ENV ERROR IF PRESENT if ssh_client.run_command("ruby -v")[0] != 0: logger.info("Pathing env to correctly source EVM environment") success = ssh_client.run_command( "echo 'source /etc/default/evm' >> .bashrc")[0] == 0 assert success, "Issuing the patch command was unsuccessful" # Verify it works assert ssh_client.run_command("ruby -v")[0] == 0, "Patch failed" # INSTALL REST-CLIENT - REQUIRED FOR THE EVENT DISPATCHER SCRIPT if ssh_client.run_rails_command("\"require 'rest-client'\"")[0] != 0: # We have to install the gem logger.info( "Installing rest-client ruby gem that is required by the event dispatcher." ) success = ssh_client.run_command("gem install rest-client")[0] == 0 assert success, "Could not install 'rest-client' gem" # Verify it works assert ssh_client.run_rails_command( "\"require 'rest-client'\"")[0] == 0 # IMPORT AUTOMATE NAMESPACE qe_automate_namespace_xml = "qe_event_handler.xml" qe_automate_namespace_script = "qe_event_handler.rb" local_automate_script = local(__file__)\ .new(basename="../data/{}".format(qe_automate_namespace_script))\ .strpath local_automate_file = local(__file__)\ .new(basename="../data/{}".format(qe_automate_namespace_xml))\ .strpath tmp_automate_file = "/tmp/{}".format(qe_automate_namespace_xml) # Change the information with open(local_automate_file, "r") as input_xml, \ open(tmp_automate_file, "w") as output_xml: tree = etree.parse(input_xml) root = tree.getroot() def set_text(xpath, text): field = root.xpath(xpath) assert len(field) == 1 field[0].text = text set_text("//MiqAeSchema/MiqAeField[@name='url']", re.sub(r"^http://([^/]+)/?$", "\\1", listener_info.host)) set_text("//MiqAeSchema/MiqAeField[@name='port']", str(listener_info.port)) # Put the custom script from an external file with open(local_automate_script, "r") as script: set_text("//MiqAeMethod[@name='relay_events']", etree.CDATA(script.read())) et = etree.ElementTree(root) et.write(output_xml) # copy xml file to appliance # but before that, let's check whether it's there because we may have already applied this file if ssh_client.run_command( "ls /root/{}".format(qe_automate_namespace_xml))[0] != 0: ssh_client.put_file(tmp_automate_file, '/root/') # We have to convert it first for new version convert_cmd = version.pick({ version.LOWEST: None, "5.3.0.0": "evm:automate:convert DOMAIN={} FILE=/root/{} ZIP_FILE=/root/{}.zip" .format(domain_name, qe_automate_namespace_xml, qe_automate_namespace_xml), }) if convert_cmd is not None: logger.info("Converting namespace for use on newer appliance...") return_code, stdout = ssh_client.run_rake_command(convert_cmd) if return_code != 0: logger.error("Namespace conversion was unsuccessful") logger.error(stdout) # We didn't successfully do that so remove the file to know # that it's needed to do it again when run again ssh_client.run_command( "rm -f /root/{}*".format(qe_automate_namespace_xml)) raise AutomateImportError(stdout) # run rake cmd on appliance to import automate namespace rake_cmd = version.pick({ version.LOWEST: "evm:automate:import FILE=/root/{}".format( qe_automate_namespace_xml), "5.3.0.0": "evm:automate:import ZIP_FILE=/root/{}.zip DOMAIN={} OVERWRITE=true " "PREVIEW=false".format(qe_automate_namespace_xml, domain_name), }) logger.info("Importing the QE Automation namespace ...") return_code, stdout = ssh_client.run_rake_command(rake_cmd) if return_code != 0: logger.error("Namespace import was unsuccessful") logger.error(stdout) # We didn't successfully do that so remove the file to know # that it's needed to do it again when run again ssh_client.run_command( "rm -f /root/{}*".format(qe_automate_namespace_xml)) raise AutomateImportError(stdout) # CREATE AUTOMATE INSTANCE HOOK if db is None or db.session.query(db['miq_ae_instances'].name)\ .filter(db['miq_ae_instances'].name == "RelayEvents").count() == 0: original_class = Class(name=version.pick({ version.LOWEST: "Automation Requests (Request)", "5.3": "Request" }), namespace=Namespace( "System", domain=Domain("ManageIQ (Locked)"))) copied_class = original_class.copy_to(domain) instance = Instance( name="RelayEvents", display_name="RelayEvents", description= "relationship hook to link to custom QE events relay namespace", values={ "rel2": { "value": "/QE/Automation/APIMethods/relay_events?event=$evm.object['event']" } }, cls=copied_class, ) instance.create() # IMPORT POLICIES policy_yaml = "profile_relay_events.yaml" policy_path = local(__file__).new( basename="../data/{}".format(policy_yaml)) if not is_imported("Automate event policies"): import_file(policy_path.strpath) # ASSIGN POLICY PROFILES for provider in providers: prov_obj = get_crud(provider) if not prov_obj.exists: prov_obj.create() prov_obj.assign_policy_profiles("Automate event policies") flash.assert_no_errors()
def copy_domain(request): domain = Domain(name=generate_random_string(), enabled=True) domain.create() request.addfinalizer(lambda: domain.delete() if domain.exists() else None) return domain
def a_domain_53(): return Domain(name=fauxfactory.gen_alphanumeric(8), description=fauxfactory.gen_alphanumeric(32), enabled=True)
def domain(request): domain = Domain(name=fauxfactory.gen_alphanumeric(), enabled=True) domain.create() request.addfinalizer(lambda: domain.delete() if domain.exists() else None) return domain
def domain(request): domain = Domain(name=fauxfactory.gen_alphanumeric(), enabled=True) domain.create() yield domain if domain.exists(): domain.delete()
def cls(request, domain): original_class = Class(name='Request', namespace=Namespace( name='System', domain=Domain(name='ManageIQ (Locked)'))) return original_class.copy_to(domain)