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 a_namespace_with_path(domain=None, request=None): name = fauxfactory.gen_alphanumeric(8) if not domain: domain = make_domain(request=request) n = Namespace.make_path('Factory', 'StateMachines', name, domain=domain) n.description = fauxfactory.gen_alphanumeric(32) return n
def create_method(request, copy_domain): method = Method(name="InspectMe", data=METHOD_TORSO, cls=Class(name="Request", namespace=Namespace(name="System", parent=copy_domain))) method.create() return method
def a_namespace_with_path(domain=None): name = generate_random_string(8) if not domain: domain = make_domain() n = Namespace.make_path('Factory', 'StateMachines', name, domain=domain) n.description = generate_random_string(32) return n
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 original_method(request, original_method_write_data, original_domain): method = Method(name=fauxfactory.gen_alphanumeric(), data=METHOD_TORSO.format(original_method_write_data), cls=Class(name="Request", namespace=Namespace(name="System", parent=original_domain), setup_schema=[ Class.SchemaField(name="meth5", type_="Method") ])) method.create() request.addfinalizer(lambda: method.delete() if method.exists() else None) return method
def test_add_vm_to_service(myservice, request, copy_domain): """Tests adding vm to service Metadata: test_flag: provision """ method_torso = """ def add_to_service vm = $evm.root['vm'] service = $evm.vmdb('service').find_by_name('%s') user = $evm.root['user'] if service && vm $evm.log('info', "XXXXXXXX Attaching Service to VM: [#{service.name}][#{vm.name}]") vm.add_to_service(service) vm.owner = user if user vm.group = user.miq_group if user end end $evm.log("info", "Listing Root Object Attributes:") $evm.log("info", "===========================================") add_to_service """ % myservice.service_name method = Method( name="InspectMe", data=method_torso, cls=Class( name="Request", namespace=Namespace( name="System", parent=copy_domain ) ) ) method.create() request.addfinalizer(lambda: method.delete() if method.exists() else None) simulate( instance="Request", message="create", request=method.name, attribute=["VM and Instance", "auto_test_services"], # Random selection, does not matter execute_methods=True ) myservice.check_vm_add("auto_test_services") request.addfinalizer(lambda: myservice.delete(myservice.service_name))
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 original_instance(request, original_method, original_domain): instance = Instance(name=fauxfactory.gen_alphanumeric(), values={"meth5": { "value": original_method.name }}, cls=Class(name="Request", namespace=Namespace(name="System", parent=original_domain), setup_schema=[ Class.SchemaField(name="meth5", type_="Method") ])) instance.create() request.addfinalizer(lambda: instance.delete() if instance.exists() else None) return instance
def _make_namespace(domain): name = fauxfactory.gen_alphanumeric(8) description = fauxfactory.gen_alphanumeric(32) ns = Namespace(name=name, description=description, parent=domain) ns.create() return ns
def cls(request, domain): original_class = Class(name='Request', namespace=Namespace( name='System', domain=Domain(name='ManageIQ (Locked)'))) return original_class.copy_to(domain)
def a_namespace(domain=None, request=None): if not domain: domain = make_domain(request=request) return Namespace(name=fauxfactory.gen_alphanumeric(8), description=fauxfactory.gen_alphanumeric(32), parent=domain)
def _make_namespace(): name = generate_random_string(8) description = generate_random_string(32) ns = Namespace(name=name, description=description) ns.create() return ns
def a_namespace(): name = generate_random_string(8) description = generate_random_string(32) return Namespace(name=name, description=description)
def namespace(request, domain): namespace = Namespace(name="System", description="System", parent=domain) namespace.create() request.addfinalizer(lambda: namespace.delete() if namespace.exists() else None) return namespace
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()
def a_namespace_with_path(): name = generate_random_string(8) n = Namespace.make_path('Factory', 'StateMachines', name) n.description = generate_random_string(32) return n
def test_add_delete_namespace_nested(namespace): namespace.create() nested_ns = Namespace(name="Nested", parent=namespace) nested_ns.create() namespace.delete() assert not nested_ns.exists()