Ejemplo n.º 1
0
def _form_data_mapping(selector,
                       second_provider,
                       provider,
                       source_list=None,
                       target_list=None):
    source_data = second_provider.data.get(selector, [])
    target_data = provider.data.get(selector, [])
    if selector is 'clusters':
        source = source_data if source_data else None
        target = target_data if target_data else None
        skip_test = not source or not target
    else:
        if selector is 'datastores':
            source = [d.name for d in source_data if d.type == source_list]
            target = [d.name for d in target_data if d.type == target_list]
        else:
            source = [v for v in source_data if v == source_list]
            target = [v for v in target_data if v == target_list]
        skip_test = not (source_data and target_data and source and target)

    if skip_test:
        pytest.skip(
            "No data for source or target {} in providers.".format(selector))
    else:
        _source, _target = partial_match(source[0]), partial_match(target[0])

    return {'sources': [_source], 'target': [_target]}
Ejemplo n.º 2
0
def _form_data_mapping(selector, second_provider, provider, source_list=None, target_list=None):
    source_data = second_provider.data.get(selector, [])
    target_data = provider.data.get(selector, [])
    if selector is 'clusters':
        source = source_data if source_data else None
        target = target_data if target_data else None
        skip_test = not source or not target
    else:
        if selector is 'datastores':
            source = [d.name for d in source_data if d.type == source_list]
            target = [d.name for d in target_data if d.type == target_list]
        else:
            source = [v for v in source_data if v == source_list]
            target = [v for v in target_data if v == target_list]
        skip_test = not (source_data and target_data and source and target)

    if skip_test:
        pytest.skip("No data for source or target {} in providers.".format(selector))
    else:
        _source, _target = partial_match(source[0]), partial_match(target[0])

    return {
        'sources': [_source],
        'target': [_target]
    }
Ejemplo n.º 3
0
def test_cloud_catalog_item(appliance, setup_provider, provider, dialog, catalog, request,
                            provisioning):
    """Tests cloud catalog item

    Metadata:
        test_flag: provision
    """
    # azure accepts only 15 chars vm name
    vm_name = 'test{}'.format(fauxfactory.gen_string('alphanumeric', 5))
    # GCE accepts only lowercase letters in VM name
    vm_name = vm_name.lower()
    request.addfinalizer(lambda: cleanup_vm(vm_name + "_0001", provider))
    image = provisioning['image']['name']
    item_name = fauxfactory.gen_alphanumeric()
    provisioning_data = {
        'catalog': {'vm_name': vm_name,
                    },
        'properties': {'instance_type': partial_match(provisioning['instance_type']),
                       },
        'environment': {'security_groups': partial_match(provisioning['security_group']),
                        }
    }

    if provider.type == "azure":
        env_updates = dict(
            cloud_network=partial_match(provisioning['virtual_private_cloud']),
            cloud_subnet=provisioning['cloud_subnet'],
            resource_groups=provisioning['resource_group'],
        )
        provisioning_data['environment'].update(env_updates)
        provisioning_data.update({
            'customize': {
                'admin_username': provisioning['customize_username'],
                'root_password': provisioning['customize_password']}})
    else:
        provisioning_data['properties']['guest_keypair'] = provisioning['guest_keypair']
        provisioning_data['properties']['boot_disk_size'] = provisioning['boot_disk_size']
        env_updates = dict(
            availability_zone=provisioning['availability_zone'],
            cloud_tenant=provisioning['cloud_tenant'],
            cloud_network=provisioning['cloud_network'])
        provisioning_data['environment'].update(env_updates)
    catalog_item = CatalogItem(item_type=provisioning['item_type'],
                               name=item_name,
                               description="my catalog",
                               display_in=True,
                               catalog=catalog,
                               dialog=dialog,
                               catalog_name=image,
                               provider=provider,
                               prov_data=provisioning_data)
    catalog_item.create()
    service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name)
    service_catalogs.order()
    logger.info('Waiting for cfme provision request for service %s', item_name)
    request_description = item_name
    provision_request = appliance.collections.requests.instantiate(request_description,
                                                                   partial_check=True)
    provision_request.wait_for_request()
    assert provision_request.is_succeeded()
Ejemplo n.º 4
0
def create_catalog_item(provider, provisioning, vm_name, dialog, catalog, console_template=None):
    catalog_item_type = provider.catalog_name
    provision_type, template, host, datastore, iso_file, vlan = map(provisioning.get,
        ('provision_type', 'template', 'host', 'datastore', 'iso_file', 'vlan'))
    if console_template:
        logger.info("Console template name : {}".format(console_template.name))
        template = console_template.name
    item_name = dialog.label
    if provider.one_of(InfraProvider):
        catalog_name = template
        provisioning_data = {
            'catalog': {'vm_name': vm_name,
                        'provision_type': provision_type},
            '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': {'vm_name': vm_name},
            'properties': {'instance_type': partial_match(provisioning['instance_type']),
                           'guest_keypair': provisioning['guest_keypair'],
                           'boot_disk_size': provisioning.get('boot_disk_size', None)},
            'environment': {'availability_zone': provisioning['availability_zone'],
                            'cloud_network': provisioning['cloud_network']}
        }
    catalog_item = CatalogItem(item_type=catalog_item_type, name=item_name,
        description="my catalog", display_in=True, catalog=catalog,
        dialog=dialog, catalog_name=catalog_name,
        provider=provider, prov_data=provisioning_data)
    return catalog_item
Ejemplo n.º 5
0
def create_catalog_item(appliance, provider, provisioning, vm_name, dialog, catalog,
        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 = console_template(provider).name
        logger.info("Console template name : {}".format(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': vm_name,
                        'provision_type': provision_type},
            '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': vm_name},
            'properties': {'instance_type': partial_match(provisioning['instance_type']),
                           'guest_keypair': provisioning['guest_keypair'],
                           'boot_disk_size': provisioning.get('boot_disk_size', None)},
            'environment': {'availability_zone': provisioning['availability_zone'],
                            'cloud_network': provisioning['cloud_network']}
        }
    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
    )
    return catalog_item
Ejemplo n.º 6
0
def _form_data_cluster_mapping(second_provider, provider):
    # since we have only one cluster on providers
    source_cluster = second_provider.data.get('clusters', [False])[0]
    target_cluster = provider.data.get('clusters', [False])[0]
    if not source_cluster or not target_cluster:
        pytest.skip("No data for source or target cluster in providers.")

    return {
        'sources': [partial_match(source_cluster)],
        'target': [partial_match(target_cluster)]
    }
Ejemplo n.º 7
0
def _form_data_cluster_mapping(second_provider, provider):
    # since we have only one cluster on providers
    source_cluster = second_provider.data.get('clusters', [False])[0]
    target_cluster = provider.data.get('clusters', [False])[0]
    if not source_cluster or not target_cluster:
        pytest.skip("No data for source or target cluster in providers.")

    return {
        'sources': [partial_match(source_cluster)],
        'target': [partial_match(target_cluster)]
    }
Ejemplo n.º 8
0
def _form_data_cluster_mapping(nvc_prov, rhvm_prov):
    # since we have only one cluster on providers
    source_cluster = nvc_prov.data.get('clusters')[0]
    target_cluster = rhvm_prov.data.get('clusters')[0]

    if not source_cluster or not target_cluster:
        pytest.skip("No data for source or target cluster in providers.")

    return {
        'sources': [partial_match(source_cluster)],
        'target': [partial_match(target_cluster)]
    }
Ejemplo n.º 9
0
def _form_data_network_mapping(second_provider, provider, source_network_name, target_network_name):
    source_vlans_list = second_provider.data.get('vlans', [])
    target_vlans_list = provider.data.get('vlans', [])
    # assuming there will be only 1 network matching given name
    source_network = [v for v in source_vlans_list if v == source_network_name]
    target_network = [v for v in target_vlans_list if v == target_network_name]
    if not source_vlans_list or not target_vlans_list or not source_network or not target_network:
        pytest.skip("No data for source or target cluster in providers.")

    return {
        'sources': [partial_match(source_network[0])],
        'target': [partial_match(target_network[0])]
    }
Ejemplo n.º 10
0
def _form_data_datastore_mapping(second_provider, provider, source_type, target_type):
    source_datastores_list = second_provider.data.get('datastores', [])
    target_datastores_list = provider.data.get('datastores', [])
    # assuming, we just have 1 datastore of each type
    source_datastore = [d.name for d in source_datastores_list if d.type == source_type]
    target_datastore = [d.name for d in target_datastores_list if d.type == target_type]
    if (not source_datastores_list or not target_datastores_list or
            not source_datastore or not target_datastore):
        pytest.skip("No data for source or target datastore in providers.")

    return {
        'sources': [partial_match(source_datastore[0])],
        'target': [partial_match(target_datastore[0])]
    }
Ejemplo n.º 11
0
def _form_data_network_mapping(second_provider, provider, source_network_name,
                               target_network_name):
    source_vlans_list = second_provider.data.get('vlans', [])
    target_vlans_list = provider.data.get('vlans', [])
    # assuming there will be only 1 network matching given name
    source_network = [v for v in source_vlans_list if v == source_network_name]
    target_network = [v for v in target_vlans_list if v == target_network_name]
    if not source_vlans_list or not target_vlans_list or not source_network or not target_network:
        pytest.skip("No data for source or target cluster in providers.")

    return {
        'sources': [partial_match(source_network[0])],
        'target': [partial_match(target_network[0])]
    }
Ejemplo n.º 12
0
def _form_data_network_mapping(nvc_prov, rhvm_prov, source_network_name, target_network_name):
    source_vlans_list = nvc_prov.data.get('vlans')
    target_vlans_list = rhvm_prov.data.get('vlans')

    if not source_vlans_list or not target_vlans_list:
        pytest.skip("No data for source or target cluster in providers.")

    # assuming there will be only 1 network matching given name
    source_network = [v for v in source_vlans_list if v == source_network_name][0]
    target_network = [v for v in target_vlans_list if v == target_network_name][0]

    return {
        'sources': [partial_match(source_network)],
        'target': [partial_match(target_network)]
    }
Ejemplo n.º 13
0
def _form_data_datastore_mapping(nvc_prov, rhvm_prov, source_type, target_type):
    source_datastores_list = nvc_prov.data.get('datastores')
    target_datastores_list = rhvm_prov.data.get('datastores')

    if not source_datastores_list or not target_datastores_list:
        pytest.skip("No data for source or target cluster in providers.")

    # assuming, we just have 1 datastore of each type
    source_datastore = [d.name for d in source_datastores_list if d.type == source_type][0]
    target_datastore = [d.name for d in target_datastores_list if d.type == target_type][0]

    return {
        'sources': [partial_match(source_datastore)],
        'target': [partial_match(target_datastore)]
    }
Ejemplo n.º 14
0
def prov_data(provider, vm_name, template_name):
    if provider.one_of(OpenStackProvider):
        return {
            "catalog": {'vm_name': vm_name, 'catalog_name': {'name': template_name}},
            "environment": {'automatic_placement': True},
            "properties": {'instance_type': partial_match('m1.large')}
        }
Ejemplo n.º 15
0
def test_iso_provision_from_template(appliance, provider, vm_name, datastore_init,
                                     request, smtp_test):
    """Tests ISO provisioning

    Metadata:
        test_flag: iso, provision
        suite: infra_provisioning
    """
    # generate_tests makes sure these have values
    iso_template, host, datastore, iso_file, iso_kickstart,\
        iso_root_password, iso_image_type, vlan = map(provider.data['provisioning'].get,
            ('pxe_template', 'host', 'datastore', 'iso_file', 'iso_kickstart',
             'iso_root_password', 'iso_image_type', 'vlan'))

    request.addfinalizer(lambda:
                         appliance.collections.infra_vms.instantiate(vm_name, provider)
                         .cleanup_on_provider())

    provisioning_data = {
        'catalog': {
            'vm_name': vm_name,
            'provision_type': 'ISO',
            'iso_file': {'name': iso_file}},
        'environment': {
            'host_name': {'name': host},
            'datastore_name': {'name': datastore}},
        'customize': {
            'custom_template': {'name': iso_kickstart},
            'root_password': iso_root_password},
        'network': {
            'vlan': partial_match(vlan)}}
    do_vm_provisioning(appliance, iso_template, provider, vm_name, provisioning_data, request,
                       smtp_test, num_sec=1500)
def test_tenant_quota_enforce_via_service_cloud(
        request, appliance, provider, setup_provider, set_roottenant_quota,
        extra_msg, custom_prov_data, prov_data, template_name, catalog_item):
    """Test Tenant Quota in UI"""
    catalog_item.provisioning_data.update(custom_prov_data)
    catalog_item.provisioning_data['catalog']['vm_name'] = catalog_item.vm_name
    catalog_item.provisioning_data.update(
        {'properties': {
            'instance_type': partial_match('m1.large')
        }})
    catalog_item.create()
    service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog,
                                       catalog_item.name)
    service_catalogs.order()
    # nav to requests page to check quota validation
    request_description = 'Provisioning Service [{0}] from [{0}]'.format(
        catalog_item.name)
    provision_request = appliance.collections.requests.instantiate(
        request_description)
    provision_request.wait_for_request(method='ui')
    assert provision_request.row.reason.text == "Quota Exceeded"

    @request.addfinalizer
    def delete():
        provision_request.remove_request()
        catalog_item.delete()
def test_tenant_quota_enforce_via_lifecycle_cloud(request, appliance, provider,
                                                  setup_provider,
                                                  set_roottenant_quota,
                                                  extra_msg, custom_prov_data,
                                                  approve, prov_data, vm_name,
                                                  template_name):
    """Test Tenant Quota in UI"""
    prov_data.update(custom_prov_data)
    prov_data['catalog']['vm_name'] = vm_name
    prov_data.update({
        'request': {
            'email':
            'test_{}@example.com'.format(fauxfactory.gen_alphanumeric())
        },
        'properties': {
            'instance_type': partial_match('m1.large')
        }
    })
    instance = Instance.factory(vm_name, provider, template_name)
    instance.create(**prov_data)

    # nav to requests page to check quota validation
    request_description = 'Provision from [{}] to [{}{}]'.format(
        template_name, vm_name, extra_msg)
    provision_request = appliance.collections.requests.instantiate(
        request_description)
    if approve:
        provision_request.approve_request(method='ui', reason="Approved")
    provision_request.wait_for_request(method='ui')
    assert provision_request.row.reason.text == "Quota Exceeded"

    request.addfinalizer(provision_request.remove_request)
Ejemplo n.º 18
0
def catalog_item(setup_provider, provider, vm_name, dialog, catalog, provisioning):
    iso_template, host, datastore, iso_file, iso_kickstart,\
        iso_root_password, iso_image_type, vlan = map(provisioning.get, ('pxe_template', 'host',
                                'datastore', 'iso_file', 'iso_kickstart',
                                'iso_root_password', 'iso_image_type', 'vlan'))

    provisioning_data = {
        'catalog': {'vm_name': vm_name,
                    'provision_type': 'ISO',
                    'iso_file': {'name': iso_file},
                    },
        'environment': {'host_name': {'name': host},
                        'datastore_name': {'name': datastore},
                        },
        'customize': {'custom_template': {'name': iso_kickstart},
                      'root_password': iso_root_password,
                      },
        'network': {'vlan': partial_match(vlan),
                    },
    }

    item_name = fauxfactory.gen_alphanumeric()
    catalog_item = CatalogItem(item_type="RHEV", name=item_name,
                  description="my catalog", display_in=True, catalog=catalog,
                  dialog=dialog, catalog_name=iso_template,
                  provider=provider, prov_data=provisioning_data)
    yield catalog_item
Ejemplo n.º 19
0
def new_instance(provider):
    prov_data = provider.data['provisioning']
    prov_form_data = {
        'request': {'email': fauxfactory.gen_email(),
                    'first_name': fauxfactory.gen_alpha(),
                    'last_name': fauxfactory.gen_alpha()},
        'catalog': {'num_vms': '1',
                    'vm_name': fauxfactory.gen_alpha()},
        'environment': {'cloud_network': prov_data['cloud_network']},
        'properties': {'instance_type': partial_match(prov_data['instance_type'])},
    }

    instance_name = prov_form_data['catalog']['vm_name']

    try:
        instance = provider.appliance.collections.cloud_instances.create(
            instance_name,
            provider,
            prov_form_data, find_in_cfme=True
        )

    except KeyError:
        # some yaml value wasn't found
        pytest.skip('Unable to find an image map in provider "{}" provisioning data: {}'
                    .format(provider, prov_data))

    yield instance
    try:
        instance.power_control_from_provider(instance.TERMINATE)
    except:
        pass
Ejemplo n.º 20
0
    def vm_default_args(self):
        """Represents dictionary used for Vm/Instance provision with minimum required default args
        """
        provisioning = self.provider.data['provisioning']
        inst_args = {
            'request': {
                'email': '*****@*****.**'
            },
            'catalog': {
                'vm_name': self.name
            },
            'environment': {
                'availability_zone': provisioning.get('availability_zone'),
                'cloud_network': provisioning.get('cloud_network'),
                'cloud_subnet': provisioning.get('cloud_subnet'),
                'resource_groups': provisioning.get('resource_group')
            },
            'properties': {
                'instance_type':
                partial_match(provisioning.get('instance_type')),
                'guest_keypair': provisioning.get('guest_keypair')
            }
        }

        return inst_args
Ejemplo n.º 21
0
def create_catalog_item(provider, provisioning, vm_name, dialog, catalog, console_template=None):

    template, host, datastore, iso_file, catalog_item_type, vlan = map(provisioning.get,
        ('template', 'host', 'datastore', 'iso_file', 'catalog_item_type', 'vlan'))
    if console_template:
        logger.info("Console template name : {}".format(console_template.name))
        template = console_template.name
    item_name = dialog.label

    provisioning_data = {
        'catalog': {'vm_name': vm_name,
                    },
        'environment': {'host_name': {'name': host},
                        'datastore_name': {'name': datastore},
                        },
        'network': {'vlan': partial_match(vlan),
                    },
    }

    if provider.type == 'rhevm':
        provisioning_data['catalog']['provision_type'] = 'Native Clone'
    elif provider.type == 'virtualcenter':
        provisioning_data['catalog']['provision_type'] = 'VMware'
    catalog_item = CatalogItem(item_type=catalog_item_type, name=item_name,
        description="my catalog", display_in=True, catalog=catalog,
        dialog=dialog, catalog_name=template,
        provider=provider, prov_data=provisioning_data)
    return catalog_item
Ejemplo n.º 22
0
def prov_data(provisioning, provider):
    data = {
        'request': {
            'email': fauxfactory.gen_email(),
            'first_name': fauxfactory.gen_alphanumeric(),
            'last_name': fauxfactory.gen_alphanumeric(),
            'manager_name': fauxfactory.gen_alphanumeric(20, start="manager ")
        },
        'network': {
            'vlan': partial_match(provisioning.get('vlan'))
        },
        'environment': {
            'datastore_name': {
                'name': provisioning['datastore']
            },
            'host_name': {
                'name': provisioning['host']
            }
        },
        'catalog': {},
        'hardware': {},
        'schedule': {},
        'purpose': {},
    }
    if provider.one_of(RHEVMProvider):
        data['catalog']['provision_type'] = 'Native Clone'
    elif provider.one_of(VMwareProvider):
        data['catalog']['provision_type'] = 'VMware'
    # Otherwise just leave it alone
    return data
Ejemplo n.º 23
0
def test_run_host_analysis(setup_provider_modscope, provider, host_type, host_name, register_event,
                           soft_assert, host_with_credentials):
    """ Run host SmartState analysis

    Metadata:
        test_flag: host_analysis
    """
    register_event(target_type='Host', target_name=host_name, event_type='request_host_scan')
    register_event(target_type='Host', target_name=host_name, event_type='host_scan_complete')

    # Initiate analysis
    host_with_credentials.run_smartstate_analysis(wait_for_task_result=True)

    # Check results of the analysis
    view = navigate_to(host_with_credentials, 'Details')
    drift_history = view.entities.summary('Relationships').get_text_of('Drift History')
    soft_assert(drift_history != '0', 'No drift history change found')

    if provider.type == "rhevm":
        soft_assert(view.entities.summary('Configuration').get_text_of('Services') != '0',
                    'No services found in host detail')

    if host_type in ('rhel', 'rhev'):
        soft_assert(view.entities.summary('Configuration').get_text_of('Packages') != '0',
                    'No packages found in host detail')
        soft_assert(view.entities.summary('Configuration').get_text_of('Files') != '0',
                    'No files found in host detail')

    elif host_type in ('esx', 'esxi'):
        soft_assert(view.entities.summary('Configuration').get_text_of('Advanced Settings') != '0',
                    'No advanced settings found in host detail')
        view.security_accordion.navigation.select(partial_match('Firewall Rules'))
        # Page get updated if rules value is not 0, and title is update
        soft_assert("(Firewall Rules)" in view.title.text, (
            "No firewall rules found in host detail"))
def catalog_item(appliance, provider, dialog, catalog, provisioning):
    iso_template, host, datastore, iso_file, iso_kickstart,\
        iso_root_password, iso_image_type, vlan = map(provisioning.get, ('pxe_template', 'host',
                                'datastore', 'iso_file', 'iso_kickstart',
                                'iso_root_password', 'iso_image_type', 'vlan'))

    provisioning_data = {
        'catalog': {'catalog_name': {'name': iso_template, 'provider': provider.name},
                    'vm_name': random_vm_name('iso_service'),
                    'provision_type': 'ISO',
                    'iso_file': {'name': iso_file}},
        'environment': {'host_name': {'name': host},
                        'datastore_name': {'name': datastore}},
        'customize': {'custom_template': {'name': iso_kickstart},
                      'root_password': iso_root_password},
        'network': {'vlan': partial_match(vlan)},
    }

    item_name = fauxfactory.gen_alphanumeric()
    return appliance.collections.catalog_items.create(
        appliance.collections.catalog_items.RHV,
        name=item_name,
        description="my catalog", display_in=True, catalog=catalog,
        dialog=dialog,
        prov_data=provisioning_data
    )
def catalog_item(appliance, setup_provider, provider, vm_name, dialog, catalog, provisioning):
    iso_template, host, datastore, iso_file, iso_kickstart,\
        iso_root_password, iso_image_type, vlan = map(provisioning.get, ('pxe_template', 'host',
                                'datastore', 'iso_file', 'iso_kickstart',
                                'iso_root_password', 'iso_image_type', 'vlan'))

    provisioning_data = {
        'catalog': {'catalog_name': {'name': iso_template, 'provider': provider.name},
                    'vm_name': vm_name,
                    'provision_type': 'ISO',
                    'iso_file': {'name': iso_file}},
        'environment': {'host_name': {'name': host},
                        'datastore_name': {'name': datastore}},
        'customize': {'custom_template': {'name': iso_kickstart},
                      'root_password': iso_root_password},
        'network': {'vlan': partial_match(vlan)},
    }

    item_name = fauxfactory.gen_alphanumeric()
    return appliance.collections.catalog_items.create(
        appliance.collections.catalog_items.RHV,
        name=item_name,
        description="my catalog", display_in=True, catalog=catalog,
        dialog=dialog,
        prov_data=provisioning_data
    )
Ejemplo n.º 26
0
def map_tags(appliance, provider, request):
    tag = appliance.collections.map_tags.create(entity_type=partial_match(
        provider.name.title()),
                                                label='test',
                                                category='Testing')
    yield tag
    request.addfinalizer(lambda: tag.delete())
def catalog_item(provider, vm_name, dialog, catalog, provisioning, setup_pxe_servers_vm_prov):
    # generate_tests makes sure these have values
    pxe_template, host, datastore, pxe_server, pxe_image, pxe_kickstart, pxe_root_password,\
        pxe_image_type, pxe_vlan, catalog_item_type = map(
            provisioning.get, (
                'pxe_template', 'host', 'datastore', 'pxe_server', 'pxe_image', 'pxe_kickstart',
                'pxe_root_password', 'pxe_image_type', 'vlan', 'catalog_item_type'
            )
        )

    provisioning_data = {
        'catalog': {'provision_type': 'PXE',
                    'pxe_server': pxe_server,
                    'pxe_image': {'name': pxe_image},
                    'vm_name': vm_name,
                    },
        'environment': {'datastore_name': {'name': datastore},
                        'host_name': {'name': host},
                        },
        'customize': {'root_password': pxe_root_password,
                      'custom_template': {'name': pxe_kickstart},
                      },
        'network': {'vlan': partial_match(pxe_vlan),
                    },
    }

    item_name = fauxfactory.gen_alphanumeric()
    catalog_item = CatalogItem(item_type=catalog_item_type, name=item_name,
                  description="my catalog", display_in=True, catalog=catalog,
                  dialog=dialog, catalog_name=pxe_template,
                  provider=provider, prov_data=provisioning_data)
    yield catalog_item
Ejemplo n.º 28
0
def new_instance(provider, zero_disk_flavor):
    flavor_name = zero_disk_flavor.name
    prov_data = provider.data['provisioning']
    prov_form_data = {
        'request': {'email': fauxfactory.gen_email(),
                    'first_name': fauxfactory.gen_alpha(),
                    'last_name': fauxfactory.gen_alpha()},
        'catalog': {'num_vms': '1',
                    'vm_name': fauxfactory.gen_alpha()},
        'environment': {'cloud_network': prov_data['cloud_network'],
                        'cloud_tenant': prov_data['cloud_tenant']},
        'properties': {'instance_type': partial_match(flavor_name)},
    }

    instance_name = prov_form_data['catalog']['vm_name']

    try:
        instance = provider.appliance.collections.cloud_instances.create(
            instance_name,
            provider,
            prov_form_data, find_in_cfme=True
        )

    except KeyError:
        # some yaml value wasn't found
        pytest.skip('Unable to find an image map in provider "{}" provisioning data: {}'
                    .format(provider, prov_data))

    yield instance

    instance.cleanup_on_provider()
Ejemplo n.º 29
0
def new_instance(provider, zero_disk_flavor):
    flavor_name = zero_disk_flavor.name
    prov_data = provider.data['provisioning']
    prov_form_data = {
        'request': {'email': fauxfactory.gen_email(),
                    'first_name': fauxfactory.gen_alpha(),
                    'last_name': fauxfactory.gen_alpha()},
        'catalog': {'num_vms': '1',
                    'vm_name': fauxfactory.gen_alpha()},
        'environment': {'cloud_network': prov_data['cloud_network'],
                        'cloud_tenant': prov_data['cloud_tenant']},
        'properties': {'instance_type': partial_match(flavor_name)},
    }

    instance_name = prov_form_data['catalog']['vm_name']

    try:
        instance = provider.appliance.collections.cloud_instances.create(
            instance_name,
            provider,
            prov_form_data, find_in_cfme=True
        )

    except KeyError:
        # some yaml value wasn't found
        pytest.skip('Unable to find an image map in provider "{}" provisioning data: {}'
                    .format(provider, prov_data))

    yield instance

    instance.cleanup_on_provider()
def catalog_item(appliance, provider, provisioning, tagcontrol_dialog, catalog):
    template, host, datastore, iso_file, vlan = map(provisioning.get,
        ('template', 'host', 'datastore', 'iso_file', 'vlan'))

    provisioning_data = {
        'catalog': {'catalog_name': {'name': template, 'provider': provider.name},
                    'vm_name': random_vm_name('service')},
        'environment': {'host_name': {'name': host},
                        'datastore_name': {'name': datastore}},
        'network': {'vlan': partial_match(vlan)},
    }

    if provider.type == 'rhevm':
        provisioning_data['catalog']['provision_type'] = 'Native Clone'
    elif provider.type == 'virtualcenter':
        provisioning_data['catalog']['provision_type'] = 'VMware'
    item_name = fauxfactory.gen_alphanumeric()
    catalog_item = appliance.collections.catalog_items.create(
        provider.catalog_item_type,
        name=item_name,
        description="my catalog",
        display_in=True,
        catalog=catalog,
        dialog=tagcontrol_dialog,
        prov_data=provisioning_data)
    return catalog_item
Ejemplo n.º 31
0
def prov_data(provider, vm_name, template_name):
    if provider.one_of(OpenStackProvider):
        return {
            "catalog": {'vm_name': vm_name, 'catalog_name': {'name': template_name}},
            "environment": {'automatic_placement': True},
            "properties": {'instance_type': partial_match('m1.large')}
        }
Ejemplo n.º 32
0
def test_infrastructure_provider_left_panel_titles(
    setup_provider, provider, option, soft_assert, vm
):
    """
    Polarion:
        assignee: pvala
        casecomponent: Infra
        caseimportance: low
        initialEstimate: 1/18h
        testSteps:
            1. Add an infrastructure provider and navigate to it's Details page.
            2. Select Properties on the panel and check all items, whether they have their titles.
            3. Select Relationships on the panel and check all items,
                whether they have their titles.
        expectedResults:
            1.
            2. Properties panel must have all items and clicking on each item should display
                the correct page.
            3. Relationships panel must have all items and clicking on each item should display
                the correct page.
    """
    view = navigate_to(provider, "Details")
    accordion = getattr(view.entities.sidebar, option)

    for panel in ALL_OPTIONS[option]:
        accordion.tree.select(partial_match(panel))
        test_view = provider.create_view(ALL_OPTIONS[option][panel])
        soft_assert(test_view.is_displayed, f"{test_view} not displayed.")
Ejemplo n.º 33
0
def prov_data(provider, vm_name, template_name):
    if provider.one_of(RHEVMProvider):
        return {
            "catalog": {
                'vm_name': vm_name,
                'catalog_name': {
                    'name': template_name
                }
            },
            "environment": {
                'automatic_placement': True
            },
            "network": {
                'vlan': partial_match('ovirtmgmt')
            },
        }
    else:
        return {
            "catalog": {
                'vm_name': vm_name,
                'catalog_name': {
                    'name': template_name
                }
            },
            "environment": {
                'automatic_placement': True
            },
        }
Ejemplo n.º 34
0
def catalog_item(setup_provider, provider, vm_name, dialog, catalog, provisioning):
    iso_template, host, datastore, iso_file, iso_kickstart,\
        iso_root_password, iso_image_type, vlan = map(provisioning.get, ('pxe_template', 'host',
                                'datastore', 'iso_file', 'iso_kickstart',
                                'iso_root_password', 'iso_image_type', 'vlan'))

    provisioning_data = {
        'catalog': {'vm_name': vm_name,
                    'provision_type': 'ISO',
                    'iso_file': {'name': iso_file},
                    },
        'environment': {'host_name': {'name': host},
                        'datastore_name': {'name': datastore},
                        },
        'customize': {'custom_template': {'name': iso_kickstart},
                      'root_password': iso_root_password,
                      },
        'network': {'vlan': partial_match(vlan),
                    },
    }

    item_name = fauxfactory.gen_alphanumeric()
    catalog_item = CatalogItem(item_type="RHEV", name=item_name,
                  description="my catalog", display_in=True, catalog=catalog,
                  dialog=dialog, catalog_name=iso_template,
                  provider=provider, prov_data=provisioning_data)
    yield catalog_item
Ejemplo n.º 35
0
def test_run_host_analysis(setup_provider_modscope, provider, host_type, host_name, register_event,
                           soft_assert, host_with_credentials):
    """ Run host SmartState analysis

    Metadata:
        test_flag: host_analysis
    """
    register_event(target_type='Host', target_name=host_name, event_type='request_host_scan')
    register_event(target_type='Host', target_name=host_name, event_type='host_scan_complete')

    # Initiate analysis
    host_with_credentials.run_smartstate_analysis(wait_for_task_result=True)

    # Check results of the analysis
    view = navigate_to(host_with_credentials, 'Details')
    drift_history = view.entities.summary('Relationships').get_text_of('Drift History')
    soft_assert(drift_history != '0', 'No drift history change found')

    if provider.type == "rhevm":
        soft_assert(view.entities.summary('Configuration').get_text_of('Services') != '0',
                    'No services found in host detail')

    if host_type in ('rhel', 'rhev'):
        soft_assert(view.entities.summary('Configuration').get_text_of('Packages') != '0',
                    'No packages found in host detail')
        soft_assert(view.entities.summary('Configuration').get_text_of('Files') != '0',
                    'No files found in host detail')

    elif host_type in ('esx', 'esxi'):
        soft_assert(view.entities.summary('Configuration').get_text_of('Advanced Settings') != '0',
                    'No advanced settings found in host detail')
        view.security_accordion.navigation.select(partial_match('Firewall Rules'))
        # Page get updated if rules value is not 0, and title is update
        soft_assert("(Firewall Rules)" in view.title.text, (
            "No firewall rules found in host detail"))
def catalog_item(appliance, provider, dialog, catalog, provisioning,
                 setup_pxe_servers_vm_prov):
    # generate_tests makes sure these have values
    pxe_template, host, datastore, pxe_server, pxe_image, pxe_kickstart, pxe_root_password,\
        pxe_image_type, pxe_vlan = map(
            provisioning.get, (
                'pxe_template', 'host', 'datastore', 'pxe_server', 'pxe_image', 'pxe_kickstart',
                'pxe_root_password', 'pxe_image_type', 'vlan'
            )
        )

    provisioning_data = {
        'catalog': {'catalog_name': {'name': pxe_template, 'provider': provider.name},
                    'provision_type': 'PXE',
                    'pxe_server': pxe_server,
                    'pxe_image': {'name': pxe_image},
                    'vm_name': random_vm_name('pxe_service')},
        'environment': {'datastore_name': {'name': datastore},
                        'host_name': {'name': host}},
        'customize': {'root_password': pxe_root_password,
                      'custom_template': {'name': pxe_kickstart}},
        'network': {'vlan': partial_match(pxe_vlan)},
    }

    item_name = fauxfactory.gen_alphanumeric()
    return 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)
def catalog_item(appliance, provider, provisioning, tagcontrol_dialog, catalog):
    template, host, datastore, iso_file, vlan = map(provisioning.get,
        ('template', 'host', 'datastore', 'iso_file', 'vlan'))

    provisioning_data = {
        'catalog': {'catalog_name': {'name': template, 'provider': provider.name},
                    'vm_name': random_vm_name('service')},
        'environment': {'host_name': {'name': host},
                        'datastore_name': {'name': datastore}},
        'network': {'vlan': partial_match(vlan)},
    }

    if provider.type == 'rhevm':
        provisioning_data['catalog']['provision_type'] = 'Native Clone'
    elif provider.type == 'virtualcenter':
        provisioning_data['catalog']['provision_type'] = 'VMware'
    item_name = fauxfactory.gen_alphanumeric()
    catalog_item = appliance.collections.catalog_items.create(
        provider.catalog_item_type,
        name=item_name,
        description="my catalog",
        display_in=True,
        catalog=catalog,
        dialog=tagcontrol_dialog,
        prov_data=provisioning_data)
    return catalog_item
Ejemplo n.º 38
0
def prov_data(provisioning, provider):
    # TODO Perhaps merge this with stuff with test_cloud_init_provisioning.test_provision_cloud_init
    data = dict(
        provisioning, **{
            'request': {
                'email': fauxfactory.gen_email(),
                'first_name': fauxfactory.gen_alphanumeric(),
                'last_name': fauxfactory.gen_alphanumeric(),
                'manager_name': fauxfactory.gen_alphanumeric(20,
                                                             start="manager ")
            },
            'catalog': {},
            'hardware': {},
            'schedule': {},
            'purpose': {},
        })

    mgmt_system = provider.mgmt

    if provider.one_of(InfraProvider):
        data['network'] = {'vlan': partial_match(provisioning.get('vlan'))}
        data['environment'] = {
            'datastore_name': {
                'name': provisioning['datastore']
            },
            'host_name': {
                'name': provisioning['host']
            }
        }
    elif provider.one_of(AzureProvider):
        data['environment'] = {'public_ip_address': "New"}
    elif provider.one_of(OpenStackProvider):
        ip_pool = provider.data['public_network']
        floating_ip = mgmt_system.get_first_floating_ip(pool=ip_pool)
        provider.refresh_provider_relationships()
        data['environment'] = {'public_ip_address': floating_ip}
        props = data.setdefault('properties', {})
        props['instance_type'] = partial_match(provisioning['ci-flavor-name'])

    if provider.one_of(RHEVMProvider):
        data['catalog']['provision_type'] = 'Native Clone'
    elif provider.one_of(VMwareProvider):
        data['catalog']['provision_type'] = 'VMware'
    # Otherwise just leave it alone
    return data
Ejemplo n.º 39
0
def test_partial_match_wrapping():
    value = ' foobar '
    wrapped = partial_match(value)

    assert dir(wrapped) == dir(value)

    assert wrapped.item is value

    assert wrapped.strip() == value.strip()
Ejemplo n.º 40
0
def generated_request(appliance, provider, provisioning, template_name, vm_name):
    """Creates a provision request, that is not automatically approved, and returns the search data.

    After finishing the test, request should be automatically deleted.

    Slightly modified code from :py:module:`cfme.tests.infrastructure.test_provisioning`
    """
    if provider.one_of(RHEVMProvider) and provisioning.get('vlan') is None:
        pytest.skip('rhevm requires a vlan value in provisioning info')
    first_name = fauxfactory.gen_alphanumeric()
    last_name = fauxfactory.gen_alphanumeric()
    notes = fauxfactory.gen_alphanumeric()
    e_mail = "{}@{}.test".format(first_name, last_name)
    host, datastore = map(provisioning.get, ('host', 'datastore'))
    vm = appliance.collections.infra_vms.instantiate(name=vm_name,
                                                     provider=provider,
                                                     template_name=template_name)
    view = navigate_to(vm.parent, 'Provision')

    provisioning_data = {
        'request': {
            'email': e_mail,
            'first_name': first_name,
            'last_name': last_name,
            'notes': notes},
        'catalog': {
            'vm_name': vm_name,
            'num_vms': '10'},
        'environment':
            {'host_name': {'name': host},
             'datastore_name': {'name': datastore}},
        'network':
            {'vlan': partial_match(provisioning['vlan'] if provisioning.get('vlan') else None)}
    }

    # Same thing, different names. :\
    if provider.one_of(RHEVMProvider):
        provisioning_data['catalog']['provision_type'] = 'Native Clone'
    elif provider.one_of(VMwareProvider):
        provisioning_data['catalog']['provision_type'] = 'VMware'

    # template and provider names for template selection
    provisioning_data['template_name'] = template_name
    provisioning_data['provider_name'] = provider.name

    view.form.fill_with(provisioning_data, on_change=view.form.submit_button)
    request_cells = {
        "Description": "Provision from [{}] to [{}###]".format(template_name, vm_name),
    }
    provision_request = appliance.collections.requests.instantiate(cells=request_cells)
    yield provision_request

    browser().get(appliance.url)
    appliance.server.login_admin()

    provision_request.remove_request()
def test_pxe_provision_from_template(appliance, provider, vm_name, smtp_test,
                                     setup_provider, request,
                                     setup_pxe_servers_vm_prov):
    """Tests provisioning via PXE

    Metadata:
        test_flag: pxe, provision
        suite: infra_provisioning
    """

    # generate_tests makes sure these have values
    (pxe_template, host, datastore, pxe_server, pxe_image, pxe_kickstart,
     pxe_root_password, pxe_image_type, pxe_vlan) = map(
         provider.data['provisioning'].get,
         ('pxe_template', 'host', 'datastore', 'pxe_server', 'pxe_image',
          'pxe_kickstart', 'pxe_root_password', 'pxe_image_type', 'vlan'))

    request.addfinalizer(lambda: appliance.collections.infra_vms.instantiate(
        vm_name, provider).cleanup_on_provider())

    provisioning_data = {
        'catalog': {
            'vm_name': vm_name,
            'provision_type': 'PXE',
            'pxe_server': pxe_server,
            'pxe_image': {
                'name': pxe_image
            }
        },
        'environment': {
            'host_name': {
                'name': host
            },
            'datastore_name': {
                'name': datastore
            }
        },
        'customize': {
            'custom_template': {
                'name': pxe_kickstart
            },
            'root_password': pxe_root_password
        },
        'network': {
            'vlan': partial_match(pxe_vlan)
        }
    }

    do_vm_provisioning(appliance,
                       pxe_template,
                       provider,
                       vm_name,
                       provisioning_data,
                       request,
                       smtp_test,
                       num_sec=3600)
Ejemplo n.º 42
0
def _form_data_datastore_mapping(second_provider, provider, source_type,
                                 target_type):
    source_datastores_list = second_provider.data.get('datastores', [])
    target_datastores_list = provider.data.get('datastores', [])
    # assuming, we just have 1 datastore of each type
    source_datastore = [
        d.name for d in source_datastores_list if d.type == source_type
    ]
    target_datastore = [
        d.name for d in target_datastores_list if d.type == target_type
    ]
    if (not source_datastores_list or not target_datastores_list
            or not source_datastore or not target_datastore):
        pytest.skip("No data for source or target datastore in providers.")

    return {
        'sources': [partial_match(source_datastore[0])],
        'target': [partial_match(target_datastore[0])]
    }
Ejemplo n.º 43
0
def test_iso_provision_from_template(appliance, provider, vm_name, datastore_init, request):
    """Tests ISO provisioning

    Metadata:
        test_flag: iso, provision
        suite: infra_provisioning

    Polarion:
        assignee: jhenner
        caseimportance: high
        casecomponent: Provisioning
        initialEstimate: 1/4h
    """
    # generate_tests makes sure these have values
    (iso_template,
     host,
     datastore,
     iso_file,
     iso_kickstart,
     iso_root_password,
     iso_image_type,
     vlan,
     addr_mode) = tuple(map(provider.data['provisioning'].get,
                            ('pxe_template',
                             'host',
                             'datastore',
                             'iso_file',
                             'iso_kickstart',
                             'iso_root_password',
                             'iso_image_type',
                             'vlan',
                             'iso_address_mode')))

    request.addfinalizer(lambda:
                         appliance.collections.infra_vms.instantiate(vm_name, provider)
                         .cleanup_on_provider())

    provisioning_data = {
        'catalog': {
            'vm_name': vm_name,
            'provision_type': 'ISO',
            'iso_file': {'name': iso_file}},
        'environment': {
            'host_name': {'name': host},
            'datastore_name': {'name': datastore}},
        'customize': {
            'custom_template': {'name': iso_kickstart},
            'root_password': iso_root_password,
            'address_mode': addr_mode},
        'network': {
            'vlan': partial_match(vlan)},
        'schedule': {
            'power_on': False}}
    do_vm_provisioning(appliance, iso_template, provider, vm_name, provisioning_data, request,
                       num_sec=1800)
Ejemplo n.º 44
0
def generated_request(appliance,
                      a_provider, provider_data, provisioning, template_name, vm_name):
    """Creates a provision request, that is not automatically approved, and returns the search data.

    After finishing the test, request should be automatically deleted.

    Slightly modified code from :py:module:`cfme.tests.infrastructure.test_provisioning`
    """
    first_name = fauxfactory.gen_alphanumeric()
    last_name = fauxfactory.gen_alphanumeric()
    notes = fauxfactory.gen_alphanumeric()
    e_mail = "{}@{}.test".format(first_name, last_name)
    host, datastore = map(provisioning.get, ('host', 'datastore'))
    vm = Vm(name=vm_name, provider=a_provider, template_name=template_name)
    view = navigate_to(vm, 'Provision')

    provisioning_data = {
        'request': {
            'email': e_mail,
            'first_name': first_name,
            'last_name': last_name,
            'notes': notes},
        'catalog': {
            'vm_name': vm_name,
            'num_vms': '10'},
        'environment':
            {'host_name': {'name': host},
             'datastore_name': {'name': datastore}},
    }

    # Same thing, different names. :\
    if provider_data["type"] == 'rhevm':
        provisioning_data['catalog']['provision_type'] = 'Native Clone'
    elif provider_data["type"] == 'virtualcenter':
        provisioning_data['catalog']['provision_type'] = 'VMware'

    try:
        provisioning_data['network'] = {'vlan': partial_match(provisioning['vlan'])}
    except KeyError:
        # provisioning['vlan'] is required for rhevm provisioning
        if provider_data["type"] == 'rhevm':
            raise pytest.fail('rhevm requires a vlan value in provisioning info')

    view.form.fill_with(provisioning_data, on_change=view.form.submit_button)
    request_cells = {
        "Description": "Provision from [{}] to [{}###]".format(template_name, vm_name),
    }
    provision_request = appliance.collections.requests.instantiate(cells=request_cells)
    yield provision_request

    browser().get(store.base_url)
    appliance.server.login_admin()

    provision_request.remove_request()
Ejemplo n.º 45
0
def prov_data(vm_name, provisioning):
    return {
        "catalog": {
            'vm_name': vm_name
        },
        "environment": {
            'automatic_placement': True
        },
        "network": {
            'vlan': partial_match(provisioning['vlan'])
        }
    }
Ejemplo n.º 46
0
def prov_data(provider, vm_name, template_name):
    if provider.one_of(RHEVMProvider):
        return {
            "catalog": {'vm_name': vm_name, 'catalog_name': {'name': template_name}},
            "environment": {'automatic_placement': True},
            "network": {'vlan': partial_match('ovirtmgmt')},
        }
    else:
        return {
            "catalog": {'vm_name': vm_name, 'catalog_name': {'name': template_name}},
            "environment": {'automatic_placement': True},
        }
Ejemplo n.º 47
0
def provisioning_data(provisioning, provider):
    return {
        'catalog': {
            'catalog_name': {'name': provisioning.template, 'provider': provider.name},
            'vm_name': random_vm_name('service')
        },
        'environment': {
            'host_name': {'name': provisioning.host},
            'datastore_name': {'name': provisioning.datastore}
        },
        'network': {'vlan': partial_match(provisioning.vlan)},
    }
Ejemplo n.º 48
0
def test_pxe_provision_from_template(appliance, provider, vm_name, setup_provider,
                                     request, setup_pxe_servers_vm_prov):
    """Tests provisioning via PXE

    Metadata:
        test_flag: pxe, provision
        suite: infra_provisioning

    Polarion:
        assignee: jhenner
        casecomponent: Provisioning
        initialEstimate: 1/6h
        testtype: integration
        upstream: yes
    """

    # generate_tests makes sure these have values
    (
        pxe_template, host, datastore,
        pxe_server, pxe_image, pxe_kickstart,
        pxe_root_password, pxe_image_type, pxe_vlan
    ) = map(
        provider.data['provisioning'].get,
        (
            'pxe_template', 'host', 'datastore',
            'pxe_server', 'pxe_image', 'pxe_kickstart',
            'pxe_root_password', 'pxe_image_type', 'vlan'
        )
    )

    request.addfinalizer(
        lambda: appliance.collections.infra_vms.instantiate(vm_name, provider)
        .cleanup_on_provider())

    provisioning_data = {
        'catalog': {
            'vm_name': vm_name,
            'provision_type': 'PXE',
            'pxe_server': pxe_server,
            'pxe_image': {'name': pxe_image}},
        'environment': {
            'host_name': {'name': host},
            'datastore_name': {'name': datastore}},
        'customize': {
            'custom_template': {'name': pxe_kickstart},
            'root_password': pxe_root_password},
        'network': {
            'vlan': partial_match(pxe_vlan)}}

    do_vm_provisioning(appliance, pxe_template, provider, vm_name, provisioning_data, request,
                       num_sec=3600)
Ejemplo n.º 49
0
def prov_data(appliance, provisioning):
    """Keeping it as a fixture because we need to call 'provisioning' from this fixture as well as
       using this same fixture in various tests.
    """
    instance_type = "d2s_v3" if appliance.version < "5.10" else "d2s_v3".capitalize()
    return {
        "catalog": {"vm_name": random_vm_name(context="quota")},
        "environment": {"automatic_placement": True},
        "properties": {"instance_type": partial_match(instance_type)},
        "customize": {
            "admin_username": provisioning["customize_username"],
            "root_password": provisioning["customize_password"],
        },
    }
Ejemplo n.º 50
0
def component_generator(selector, source_provider, provider, source_type=None, target_type=None):
    """
    Component generator method to generate a dict of source and target
    components(clusters/datastores/networks).
    Gets the provider data based on selector from cfme_data.yaml and creates
    InfraMapping.component(source_list, target_list) object

    Test is skipped if no source or target data is found

    Args:
        selector: can be clusters/datastores/vlans
        source_provider: vmware provider to migrate from
        provider:  rhev or osp provider or target provider to migrate to
        source_type: string source datastores/networks on vmware provider to migrate from.
                     Ex: if source_type is "iscsi". Provider data is checked for datastore with type
                     iscsi and that datastores name is used.
        target_type: string target datastores/networks to migrate to

        returns : InfraMapping.component(source_list, target_list) object

    """
    if selector not in ['clusters', 'datastores', 'vlans']:
        raise ValueError("Please specify cluster, datastore or network(vlans) selector!")

    source_data = source_provider.data.get(selector, [])
    target_data = provider.data.get(selector, [])

    if not (source_data and target_data):
        pytest.skip("No source and target data")

    if selector == "clusters":
        sources = source_data or None
        targets = target_data or None
        component = InfraMapping.ClusterComponent(
            [partial_match(sources[0])], [partial_match(targets[0])]
        )
    elif selector == "datastores":
        # Ignoring target_type for osp and setting new value
        if provider.one_of(OpenStackProvider):
            target_type = "volume"

        sources = [d.name for d in source_data if d.type == source_type]
        targets = [d.name for d in target_data if d.type == target_type]
        component = InfraMapping.DatastoreComponent(
            [partial_match(sources[0])], [partial_match(targets[0])]
        )
    else:
        sources = [v for v in source_data if v == source_type]
        targets = [v for v in target_data if v == target_type]
        component = InfraMapping.NetworkComponent(
            [partial_match(sources[0])], [partial_match(targets[0])]
        )

    skip_test = not (sources and targets and component)
    if skip_test:
        pytest.skip("No data for source or target {} in providers.".format(selector))
    return component
def test_provision_vm_to_virtual_network(appliance, setup_provider, provider,
                                         request, provisioning, network):
    """ Tests provisioning a vm from a template to a virtual network

    Metadata:
        test_flag: provision

    Polarion:
        assignee: mmojzis
        casecomponent: Provisioning
        initialEstimate: 1/4h
    """
    vm_name = random_vm_name('provd')

    def _cleanup():
        vm = appliance.collections.infra_vms.instantiate(vm_name, provider)
        vm.cleanup_on_provider()

    request.addfinalizer(_cleanup)

    template = provisioning['template']
    provisioning_data = {
        'catalog': {
            'vm_name': vm_name
        },
        'environment': {
            'vm_name': vm_name,
            'automatic_placement': True
        },
        'network': {
            'vlan': partial_match(network.name)
        }
    }
    wait_for(
        do_vm_provisioning,
        [appliance, template, provider, vm_name, provisioning_data, request],
        {'num_sec': 900},
        handle_exception=True,
        delay=50,
        num_sec=900,
        fail_func=appliance.server.browser.refresh,
        message='Cannot do provision for vm {}.'.format(vm_name)
    )
def test_pxe_provision_from_template(appliance, provider, vm_name, smtp_test, setup_provider,
                                     request, setup_pxe_servers_vm_prov):
    """Tests provisioning via PXE

    Metadata:
        test_flag: pxe, provision
        suite: infra_provisioning
    """

    # generate_tests makes sure these have values
    (
        pxe_template, host, datastore,
        pxe_server, pxe_image, pxe_kickstart,
        pxe_root_password, pxe_image_type, pxe_vlan
    ) = map(
        provider.data['provisioning'].get,
        (
            'pxe_template', 'host', 'datastore',
            'pxe_server', 'pxe_image', 'pxe_kickstart',
            'pxe_root_password', 'pxe_image_type', 'vlan'
        )
    )

    request.addfinalizer(lambda: VM.factory(vm_name, provider).cleanup_on_provider())

    provisioning_data = {
        'catalog': {
            'vm_name': vm_name,
            'provision_type': 'PXE',
            'pxe_server': pxe_server,
            'pxe_image': {'name': pxe_image}},
        'environment': {
            'host_name': {'name': host},
            'datastore_name': {'name': datastore}},
        'customize': {
            'custom_template': {'name': pxe_kickstart},
            'root_password': pxe_root_password},
        'network': {
            'vlan': partial_match(pxe_vlan)}}

    do_vm_provisioning(appliance, pxe_template, provider, vm_name, provisioning_data, request,
                       smtp_test, num_sec=3600)
Ejemplo n.º 53
0
def test_iso_provision_from_template(appliance, provider, vm_name, datastore_init, request):
    """Tests ISO provisioning

    Metadata:
        test_flag: iso, provision
        suite: infra_provisioning

    Polarion:
        assignee: jhenner
        caseimportance: high
        casecomponent: Provisioning
        initialEstimate: 1/4h
    """
    # generate_tests makes sure these have values
    iso_template, host, datastore, iso_file, iso_kickstart,\
        iso_root_password, iso_image_type, vlan, addr_mode = map(provider.data['provisioning'].get,
            ('pxe_template', 'host', 'datastore', 'iso_file', 'iso_kickstart',
             'iso_root_password', 'iso_image_type', 'vlan', 'iso_address_mode'))

    request.addfinalizer(lambda:
                         appliance.collections.infra_vms.instantiate(vm_name, provider)
                         .cleanup_on_provider())

    provisioning_data = {
        'catalog': {
            'vm_name': vm_name,
            'provision_type': 'ISO',
            'iso_file': {'name': iso_file}},
        'environment': {
            'host_name': {'name': host},
            'datastore_name': {'name': datastore}},
        'customize': {
            'custom_template': {'name': iso_kickstart},
            'root_password': iso_root_password,
            'address_mode': addr_mode},
        'network': {
            'vlan': partial_match(vlan)},
        'schedule': {
            'power_on': False}}
    do_vm_provisioning(appliance, iso_template, provider, vm_name, provisioning_data, request,
                       num_sec=1800)
Ejemplo n.º 54
0
    def vm_default_args(self):
        """Represents dictionary used for Vm/Instance provision with minimum required default args
        """
        provisioning = self.provider.data['provisioning']
        inst_args = {
            'request': {'email': '*****@*****.**'},
            'catalog': {
                'vm_name': self.name},
            'environment': {
                'availability_zone': provisioning.get('availability_zone'),
                'cloud_network': provisioning.get('cloud_network'),
                'cloud_subnet': provisioning.get('cloud_subnet'),
                'resource_groups': provisioning.get('resource_group')
            },
            'properties': {
                'instance_type': partial_match(provisioning.get('instance_type')),
                'guest_keypair': provisioning.get('guest_keypair')
            }
        }

        return inst_args
Ejemplo n.º 55
0
def test_tenant_quota_enforce_via_lifecycle_cloud(request, appliance, provider, setup_provider,
                                            set_roottenant_quota, extra_msg, custom_prov_data,
                                            approve, prov_data, vm_name, template_name):
    """Test Tenant Quota in UI"""
    prov_data.update(custom_prov_data)
    prov_data['catalog']['vm_name'] = vm_name
    prov_data.update({
        'request': {'email': 'test_{}@example.com'.format(fauxfactory.gen_alphanumeric())},
        'properties': {'instance_type': partial_match('m1.large')}})
    instance = Instance.factory(vm_name, provider, template_name)
    instance.create(**prov_data)

    # nav to requests page to check quota validation
    request_description = 'Provision from [{}] to [{}{}]'.format(template_name, vm_name, extra_msg)
    provision_request = appliance.collections.requests.instantiate(request_description)
    if approve:
        provision_request.approve_request(method='ui', reason="Approved")
    provision_request.wait_for_request(method='ui')
    assert provision_request.row.reason.text == "Quota Exceeded"

    request.addfinalizer(provision_request.remove_request)
def test_provision_vm_to_virtual_network(appliance, setup_provider, provider,
                                         request, provisioning, network):
    """ Tests provisioning a vm from a template to a virtual network

    Metadata:
        test_flag: provision
    """
    vm_name = random_vm_name('provd')

    def _cleanup():
        try:
            provider.mgmt.get_vm(vm_name).cleanup()
        except NotFoundError:
            pass

    request.addfinalizer(_cleanup)

    template = provisioning['template']
    provisioning_data = {
        'catalog': {
            'vm_name': vm_name
        },
        'environment': {
            'vm_name': vm_name,
            'automatic_placement': True
        },
        'network': {
            'vlan': partial_match(network.name)
        }
    }
    wait_for(
        do_vm_provisioning,
        [appliance, template, provider, vm_name, provisioning_data, request],
        {'num_sec': 900, 'smtp_test': False},
        handle_exception=True,
        delay=50,
        num_sec=900,
        fail_func=appliance.server.browser.refresh,
        message='Cannot do provision for vm {}.'.format(vm_name)
    )
Ejemplo n.º 57
0
def test_tenant_quota_enforce_via_service_cloud(request, appliance, provider, setup_provider,
                                          set_roottenant_quota, extra_msg, custom_prov_data,
                                          prov_data, template_name, catalog_item):
    """Test Tenant Quota in UI"""
    catalog_item.provisioning_data.update(custom_prov_data)
    catalog_item.provisioning_data['catalog']['vm_name'] = catalog_item.vm_name
    catalog_item.provisioning_data.update({'properties': {
        'instance_type': partial_match('m1.large')}})
    catalog_item.create()
    service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog,
                                       catalog_item.name)
    service_catalogs.order()
    # nav to requests page to check quota validation
    request_description = 'Provisioning Service [{0}] from [{0}]'.format(catalog_item.name)
    provision_request = appliance.collections.requests.instantiate(request_description)
    provision_request.wait_for_request(method='ui')
    assert provision_request.row.reason.text == "Quota Exceeded"

    @request.addfinalizer
    def delete():
        provision_request.remove_request()
        catalog_item.delete()
Ejemplo n.º 58
0
def prov_data(provisioning, provider):
    data = {
        'request': {
            'email': "{}@{}.test".format(fauxfactory.gen_alphanumeric(),
                                         fauxfactory.gen_alphanumeric()),
            'first_name': fauxfactory.gen_alphanumeric(),
            'last_name': fauxfactory.gen_alphanumeric(),
            'manager_name': '{} {}'.format(fauxfactory.gen_alphanumeric(),
                                           fauxfactory.gen_alphanumeric())},
        'network': {'vlan': partial_match(provisioning.get('vlan'))},
        'environment': {'datastore_name': {'name': provisioning['datastore']},
                        'host_name': {'name': provisioning['host']}},
        'catalog': {},
        'hardware': {},
        'schedule': {},
        'purpose': {},
    }
    if provider.one_of(RHEVMProvider):
        data['catalog']['provision_type'] = 'Native Clone'
    elif provider.one_of(VMwareProvider):
        data['catalog']['provision_type'] = 'VMware'
    # Otherwise just leave it alone
    return data
Ejemplo n.º 59
0
def test_infra_provision_from_template(appliance, setup_provider, provider, vm_name, smtp_test,
                                 request, provisioning, auto):
    """ Tests provisioning from a template

    Metadata:
        test_flag: provision
        suite: infra_provisioning
        rbac:
            roles:
                default:
                evmgroup-super_administrator:
                evmgroup-administrator:
                evmgroup-operator: NoSuchElementException
                evmgroup-auditor: NoSuchElementException
    """

    template = provisioning['template']

    request.addfinalizer(lambda: VM.factory(vm_name, provider).cleanup_on_provider())

    provisioning_data = {
        'catalog': {
            'vm_name': vm_name
        },
        'environment': {
            'vm_name': vm_name,
            'host_name': {'name': provisioning['host']} if not auto else None,
            'datastore_name': {'name': provisioning['datastore']} if not auto else None,
            'automatic_placement': True if auto else None
        },
        'network': {
            'vlan': partial_match(provisioning['vlan'])
        }
    }

    do_vm_provisioning(appliance, template, provider, vm_name, provisioning_data, request,
                       smtp_test, num_sec=900)