def test_policy_profiles_listed(policy_profile): """This test verifies that policy profiles are displayed in the selector for export. Prerequisities: * A Policy Profile Steps: * Go to the Control / Import/Export page * Select ``Policy Profiles`` from the ``Export:`` dropdown. * Assert that the policy profile is displayed in the selector. """ is_imported(policy_profile)
def test_policy_profiles_listed(appliance, policy_profile): """This test verifies that policy profiles are displayed in the selector for export. Prerequisities: * A Policy Profile Steps: * Go to the Control / Import/Export page * Select ``Policy Profiles`` from the ``Export:`` dropdown. * Assert that the policy profile is displayed in the selector. """ is_imported(appliance, policy_profile)
def test_policy_profiles_listed(appliance, policy_profile): """This test verifies that policy profiles are displayed in the selector for export. Prerequisities: * A Policy Profile Steps: * Go to the Control / Import/Export page * Select ``Policy Profiles`` from the ``Export:`` dropdown. * Assert that the policy profile is displayed in the selector. Polarion: assignee: mmojzis casecomponent: Control caseimportance: low initialEstimate: 1/12h """ is_imported(appliance, policy_profile)
def test_policy_profiles_listed(appliance, policy_profile): """This test verifies that policy profiles are displayed in the selector for export. Prerequisities: * A Policy Profile Steps: * Go to the Control / Import/Export page * Select ``Policy Profiles`` from the ``Export:`` dropdown. * Assert that the policy profile is displayed in the selector. Polarion: assignee: jdupuy casecomponent: Control caseimportance: low initialEstimate: 1/12h """ is_imported(appliance, policy_profile)
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): # FIX THE ENV ERROR IF PRESENT if ssh_client.run_command("ruby -v")[0] != 0: 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" # 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/%s" % qe_automate_namespace_script)\ .strpath local_automate_file = local(__file__)\ .new(basename="../data/%s" % qe_automate_namespace_xml)\ .strpath tmp_automate_file = "/tmp/%s" % 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/%s" % 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({ "default": None, "5.3.0.0": "evm:automate:convert DOMAIN=Default FILE=/root/{} ZIP_FILE=/root/{}.zip".format( 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/%s*" % qe_automate_namespace_xml) raise AutomateImportError(stdout) # run rake cmd on appliance to import automate namespace rake_cmd = version.pick({ "default": "evm:automate:import FILE=/root/{}".format(qe_automate_namespace_xml), "5.3.0.0": "evm:automate:import ZIP_FILE=/root/{}.zip DOMAIN=Default OVERWRITE=true " "PREVIEW=false".format(qe_automate_namespace_xml), }) 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/%s*" % 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: # Check presence 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=Class(name="Automation Requests (Request)", namespace=Namespace("System")) ) instance.create() # IMPORT POLICIES policy_yaml = "profile_relay_events.yaml" policy_path = local(__file__).new(basename="../data/%s" % policy_yaml) if not is_imported("Automate event policies"): import_file(policy_path.strpath) # ASSIGN POLICY PROFILES for provider in providers: prov_obj = get_from_config(provider) prov_obj.assign_policy_profiles("Automate event policies") flash.assert_no_errors()