Esempio n. 1
0
def _create_vm(request, template_type, provider, vm_name):
    """Look up template in provider yaml based on the template_type,
    and provision a VM/Instance from it on the provider.
    """
    if template_type:
        template = _get_template(provider, template_type)
        template_name = template.name
    else:
        template_name = None

    collection = provider.appliance.provider_based_collection(provider)
    vm_obj = collection.instantiate(vm_name,
                                    provider,
                                    template_name=template_name)
    vm_obj.create_on_provider(allow_skip='default')

    @request.addfinalizer
    def _cleanup():
        vm_obj.cleanup_on_provider()
        try:
            provider.refresh_provider_relationships()
        except Exception as e:
            if e.args[0] != "Provider collection empty":
                raise

    vm_obj.mgmt.ensure_state(VmState.RUNNING)

    if not vm_obj.exists:
        provider.refresh_provider_relationships()
        vm_obj.wait_to_appear()

    return vm_obj
def test_migration_long_name(request, appliance, provider, source_provider):
    """Test to check VM name with 64 character should work

    Polarion:
        assignee: sshveta
        initialEstimate: 1/2h
        casecomponent: V2V
    """
    source_datastores_list = source_provider.data.get("datastores", [])
    source_datastore = [
        d.name for d in source_datastores_list if d.type == "nfs"
    ][0]
    collection = appliance.provider_based_collection(source_provider)

    # Following code will create vm name with 64 characters
    vm_name = "{vm_name}{extra_words}".format(
        vm_name=random_vm_name(context="v2v"),
        extra_words=fauxfactory.gen_alpha(51))
    template = _get_template(source_provider, Templates.RHEL7_MINIMAL)
    vm_obj = collection.instantiate(
        name=vm_name,
        provider=source_provider,
        template_name=template.name,
    )
    vm_obj.create_on_provider(timeout=2400,
                              find_in_cfme=True,
                              allow_skip="default",
                              datastore=source_datastore)
    request.addfinalizer(lambda: vm_obj.cleanup_on_provider())
    mapping_data = infra_mapping_default_data(source_provider, provider)

    infrastructure_mapping_collection = appliance.collections.v2v_infra_mappings
    mapping = infrastructure_mapping_collection.create(**mapping_data)

    @request.addfinalizer
    def _cleanup():
        infrastructure_mapping_collection.delete(mapping)

    migration_plan_collection = appliance.collections.v2v_migration_plans
    migration_plan = migration_plan_collection.create(
        name=fauxfactory.gen_alphanumeric(20, start="long_name_"),
        description=fauxfactory.gen_alphanumeric(25, start="desc_long_name_"),
        infra_map=mapping.name,
        vm_list=[vm_obj],
        target_provider=provider)
    assert migration_plan.wait_for_state("Started")
    assert migration_plan.wait_for_state("In_Progress")
    assert migration_plan.wait_for_state("Completed")
    assert migration_plan.wait_for_state("Successful")

    migrated_vm = get_migrated_vm(vm_obj, provider)
    assert vm_obj.mac_address == migrated_vm.mac_address
def get_vm(request,
           appliance,
           source_provider,
           template_type,
           datastore='nfs'):
    """ Helper method that takes template , source provider and datastore
        and creates VM on source provider to migrate .

    Args:
        request
        appliance:
        source_provider: Provider on which vm is created
        template: Template used for creating VM
        datastore: datastore in which VM is created. If no datastore
                   is provided then by default VM is created on nfs datastore

        returns: Vm object
    """
    source_datastores_list = source_provider.data.get("datastores", [])
    source_datastore = [
        d.name for d in source_datastores_list if d.type == datastore
    ][0]
    collection = source_provider.appliance.provider_based_collection(
        source_provider)
    vm_name = random_vm_name("v2v-auto")
    template = _get_template(source_provider, template_type)
    vm_obj = collection.instantiate(vm_name,
                                    source_provider,
                                    template_name=template.name)
    power_on_vm = True
    if 'win10' in template.name:
        # TODO Get the VM to the correct power state within the fixture/test, not here
        # the fixture or test
        # Need to leave this off, otherwise migration fails
        # because when migration process tries to power off the VM if it is powered off
        # and for win10, it hibernates and that state of filesystem is unsupported
        power_on_vm = False
    vm_obj.create_on_provider(
        timeout=2400,
        find_in_cfme=True,
        allow_skip="default",
        datastore=source_datastore,
        power_on=power_on_vm,
    )
    request.addfinalizer(lambda: vm_obj.cleanup_on_provider())
    return vm_obj
def create_catalog_item(appliance,
                        provider,
                        provisioning,
                        dialog,
                        catalog,
                        vm_count='1',
                        console_test=False):
    provision_type, template, host, datastore, iso_file, vlan = map(
        provisioning.get, ('provision_type', 'template', 'host', 'datastore',
                           'iso_file', 'vlan'))
    if console_test:
        template = _get_template(provider, 'console_template').name
        logger.info(f"Console template name : {template}")
    item_name = dialog.label
    if provider.one_of(InfraProvider):
        catalog_name = template
        provisioning_data = {
            'catalog': {
                'catalog_name': {
                    'name': catalog_name,
                    'provider': provider.name
                },
                'vm_name': random_vm_name('serv'),
                'provision_type': provision_type,
                'num_vms': vm_count
            },
            'environment': {
                'host_name': {
                    'name': host
                },
                'datastore_name': {
                    'name': datastore
                }
            },
            'network': {
                'vlan': partial_match(vlan)
            },
        }
    elif provider.one_of(CloudProvider):
        catalog_name = provisioning['image']['name']
        provisioning_data = {
            'catalog': {
                'catalog_name': {
                    'name': catalog_name,
                    'provider': provider.name
                },
                'vm_name': random_vm_name('serv')
            },
            'properties': {
                'instance_type':
                partial_match(provisioning.get('instance_type', None)),
                'guest_keypair':
                provisioning.get('guest_keypair', None)
            },
        }
        # Azure specific
        if provider.one_of(AzureProvider):
            recursive_update(
                provisioning_data, {
                    'customize': {
                        'admin_username': provisioning['customize_username'],
                        'root_password': provisioning['customize_password']
                    },
                    'environment': {
                        'security_groups': provisioning['security_group'],
                        'cloud_network': provisioning['cloud_network'],
                        'cloud_subnet': provisioning['cloud_subnet'],
                        'resource_groups': provisioning['resource_group']
                    },
                })
        # GCE specific
        if provider.one_of(GCEProvider):
            recursive_update(
                provisioning_data, {
                    'properties': {
                        'boot_disk_size': provisioning['boot_disk_size'],
                        'is_preemptible': True
                    },
                    'environment': {
                        'availability_zone': provisioning['availability_zone'],
                        'cloud_network': provisioning['cloud_network']
                    },
                })
        # EC2 specific
        if provider.one_of(EC2Provider):
            recursive_update(
                provisioning_data, {
                    'environment': {
                        'availability_zone': provisioning['availability_zone'],
                        'cloud_network': provisioning['cloud_network'],
                        'cloud_subnet': provisioning['cloud_subnet'],
                        'security_groups': provisioning['security_group'],
                    },
                })
            # OpenStack specific
        if provider.one_of(OpenStackProvider):
            recursive_update(
                provisioning_data, {
                    'environment': {
                        'availability_zone': provisioning['availability_zone'],
                        'cloud_network': provisioning['cloud_network'],
                        'cloud_tenant': provisioning['cloud_tenant'],
                        'security_groups': provisioning['security_group'],
                    },
                })

    catalog_item = appliance.collections.catalog_items.create(
        provider.catalog_item_type,
        name=item_name,
        description="my catalog",
        display_in=True,
        catalog=catalog,
        dialog=dialog,
        prov_data=provisioning_data,
        provider=provider)
    return catalog_item