def ssa_vm(request, local_setup_provider, provider, vm_analysis_provisioning_data, appliance, analysis_type): """ Fixture to provision instance on the provider """ vm_name = 'test-ssa-{}-{}'.format(fauxfactory.gen_alphanumeric(), analysis_type) vm = VM.factory(vm_name, provider, template_name=vm_analysis_provisioning_data.image) request.addfinalizer(lambda: vm.cleanup_on_provider()) provision_data = vm_analysis_provisioning_data.copy() del provision_data['image'] vm.create_on_provider(find_in_cfme=True, **provision_data) if provider.one_of(OpenStackProvider): public_net = provider.data['public_network'] vm.provider.mgmt.assign_floating_ip(vm.name, public_net) logger.info("VM %s provisioned, waiting for IP address to be assigned", vm_name) @wait_for_decorator(timeout="20m", delay=5) def get_ip_address(): logger.info("Power state for {} vm: {}, is_vm_stopped: {}".format( vm_name, provider.mgmt.vm_status(vm_name), provider.mgmt.is_vm_stopped(vm_name))) if provider.mgmt.is_vm_stopped(vm_name): provider.mgmt.start_vm(vm_name) ip = provider.mgmt.current_ip_address(vm_name) logger.info("Fetched IP for %s: %s", vm_name, ip) return ip is not None connect_ip = provider.mgmt.get_ip_address(vm_name) assert connect_ip is not None # Check that we can at least get the uptime via ssh this should only be possible # if the username and password have been set via the cloud-init script so # is a valid check if vm_analysis_provisioning_data['fs-type'] not in ['ntfs', 'fat32']: logger.info("Waiting for %s to be available via SSH", connect_ip) ssh_client = ssh.SSHClient( hostname=connect_ip, username=vm_analysis_provisioning_data['username'], password=vm_analysis_provisioning_data['password'], port=22) wait_for(ssh_client.uptime, num_sec=3600, handle_exception=True) vm.ssh = ssh_client vm.system_type = detect_system_type(vm) logger.info("Detected system type: %s", vm.system_type) vm.image = vm_analysis_provisioning_data['image'] vm.connect_ip = connect_ip # TODO: if rhev and iscsi, it need direct_lun if provider.type == 'rhevm': logger.info("Setting a relationship between VM and appliance") cfme_rel = InfraVm.CfmeRelationship(vm) cfme_rel.set_relationship(appliance.server.name, appliance.server_id()) yield vm # Close the SSH client if we have one if getattr(vm, 'ssh', None): vm.ssh.close()
def test_edit_management_relationship(appliance, new_vm): """ check that Edit Management Relationship works for the VM Bugzilla: 1534400 Polarion: assignee: jhenner casecomponent: WebUI caseimportance: high initialEstimate: 1/6h """ vm_relationship = InfraVm.CfmeRelationship(new_vm) for i in range(2): # do it 2 times and leave the vm w/o relationship # set relationship vm_relationship.set_relationship(appliance.server.name, appliance.server.sid) # unset relationship vm_relationship.remove_relationship()
def _ssa_single_vm(): template_name = vm_analysis_provisioning_data['image'] vm_name = f'test-ssa-{fauxfactory.gen_alphanumeric()}-{analysis_type}' collection = provider.appliance.provider_based_collection(provider) vm = collection.instantiate( vm_name, provider, template_name=vm_analysis_provisioning_data.image) provision_data = vm_analysis_provisioning_data.copy() del provision_data['image'] if "test_ssa_compliance" in request._pyfuncitem.name or provider.one_of( RHEVMProvider): provisioning_data = { "catalog": { 'vm_name': vm_name }, "environment": { 'automatic_placement': True } } if provider.one_of(RHEVMProvider): provisioning_data.update({ "network": { 'vlan': partial_match(provision_data['vlan']) } }) do_vm_provisioning(vm_name=vm_name, appliance=appliance, provider=provider, provisioning_data=provisioning_data, template_name=template_name, request=request, num_sec=2500) else: deploy_template(vm.provider.key, vm_name, template_name, timeout=2500) vm.wait_to_appear(timeout=900, load_details=False) request.addfinalizer(lambda: vm.cleanup_on_provider()) if provider.one_of(OpenStackProvider): public_net = provider.data['public_network'] vm.mgmt.assign_floating_ip(public_net) logger.info("VM %s provisioned, waiting for IP address to be assigned", vm_name) vm.mgmt.ensure_state(VmState.RUNNING) try: connect_ip, _ = wait_for(find_pingable, func_args=[vm.mgmt], timeout="10m", delay=5, fail_condition=None) except TimedOutError: pytest.fail('Timed out waiting for pingable address on SSA VM') # Check that we can at least get the uptime via ssh this should only be possible # if the username and password have been set via the cloud-init script so # is a valid check if vm_analysis_provisioning_data['fs-type'] not in ['ntfs', 'fat32']: logger.info("Waiting for %s to be available via SSH", connect_ip) ssh_client = ssh.SSHClient( hostname=connect_ip, username=credentials[ vm_analysis_provisioning_data.credentials]['username'], password=credentials[ vm_analysis_provisioning_data.credentials]['password'], port=22) wait_for(ssh_client.uptime, num_sec=3600, handle_exception=True) vm.ssh = ssh_client vm.system_type = detect_system_type(vm) logger.info("Detected system type: %s", vm.system_type) vm.image = vm_analysis_provisioning_data['image'] vm.connect_ip = connect_ip # TODO: if rhev and iscsi, it need direct_lun if provider.type == 'rhevm': logger.info("Setting a relationship between VM and appliance") cfme_rel = InfraVm.CfmeRelationship(vm) cfme_rel.set_relationship(appliance.server.name, appliance.server_id()) # Close the SSH client if we have one request.addfinalizer(lambda: vm.ssh.close() if getattr(vm, 'ssh', None) else None) return vm
def _ssa_single_vm(): template_name = vm_analysis_provisioning_data['image'] vm_name = 'test-ssa-{}-{}'.format(fauxfactory.gen_alphanumeric(), analysis_type) collection = provider.appliance.provider_based_collection(provider) vm = collection.instantiate(vm_name, provider, template_name=vm_analysis_provisioning_data.image) provision_data = vm_analysis_provisioning_data.copy() del provision_data['image'] if "test_ssa_compliance" in request._pyfuncitem.name: provisioning_data = {"catalog": {'vm_name': vm_name}, "environment": {'automatic_placement': True}} do_vm_provisioning(vm_name=vm_name, appliance=appliance, provider=provider, provisioning_data=provisioning_data, template_name=template_name, request=request, smtp_test=False, num_sec=2500) else: deploy_template(vm.provider.key, vm_name, template_name, timeout=2500) vm.wait_to_appear(timeout=900, load_details=False) request.addfinalizer(lambda: vm.delete_from_provider()) if provider.one_of(OpenStackProvider): public_net = provider.data['public_network'] vm.provider.mgmt.assign_floating_ip(vm.name, public_net) logger.info("VM %s provisioned, waiting for IP address to be assigned", vm_name) @wait_for_decorator(timeout="20m", delay=5) def get_ip_address(): logger.info("Power state for {} vm: {}, is_vm_stopped: {}".format( vm_name, provider.mgmt.vm_status(vm_name), provider.mgmt.is_vm_stopped(vm_name))) if provider.mgmt.is_vm_stopped(vm_name): provider.mgmt.start_vm(vm_name) ip = provider.mgmt.current_ip_address(vm_name) logger.info("Fetched IP for %s: %s", vm_name, ip) return ip is not None connect_ip = provider.mgmt.get_ip_address(vm_name) assert connect_ip is not None # Check that we can at least get the uptime via ssh this should only be possible # if the username and password have been set via the cloud-init script so # is a valid check if vm_analysis_provisioning_data['fs-type'] not in ['ntfs', 'fat32']: logger.info("Waiting for %s to be available via SSH", connect_ip) ssh_client = ssh.SSHClient( hostname=connect_ip, username=credentials[vm_analysis_provisioning_data.credentials]['username'], password=credentials[vm_analysis_provisioning_data.credentials]['password'], port=22) wait_for(ssh_client.uptime, num_sec=3600, handle_exception=True) vm.ssh = ssh_client vm.system_type = detect_system_type(vm) logger.info("Detected system type: %s", vm.system_type) vm.image = vm_analysis_provisioning_data['image'] vm.connect_ip = connect_ip # TODO: if rhev and iscsi, it need direct_lun if provider.type == 'rhevm': logger.info("Setting a relationship between VM and appliance") cfme_rel = InfraVm.CfmeRelationship(vm) cfme_rel.set_relationship(appliance.server.name, appliance.server_id()) # Close the SSH client if we have one request.addfinalizer(lambda: vm.ssh.close() if getattr(vm, 'ssh', None) else None) return vm