def test_tag(provisioner, prov_data, provider, vm_name):
    """ Tests tagging VMs using provisioning dialogs.

    Prerequisites:
        * A provider set up, supporting provisioning in CFME

    Steps:
        * Open the provisioning dialog.
        * Apart from the usual provisioning settings, pick a tag.
        * Submit the provisioning request and wait for it to finish.
        * Visit th page of VM, it should display the selected tags


    Metadata:
        test_flag: provision

    Polarion:
        assignee: anikifor
        initialEstimate: 1/8h
    """
    prov_data['catalog']['vm_name'] = vm_name
    prov_data['purpose']["apply_tags"] = CbTree.CheckNode(path=("Service Level *", "Gold"))
    template_name = provider.data['provisioning']['template']

    vm = provisioner(template_name, prov_data)

    tags = vm.get_tags()
    assert any(
        tag.category.display_name == "Service Level" and tag.display_name == "Gold"
        for tag in tags
    ), "Service Level: Gold not in tags ({})".format(tags)
Esempio n. 2
0
def test_provision_with_tag(appliance, vm_name, tag, provider):
    """ Tests tagging instance using provisioning dialogs.

    Steps:
        * Open the provisioning dialog.
        * Apart from the usual provisioning settings, pick a tag.
        * Submit the provisioning request and wait for it to finish.
        * Visit instance page, it should display the selected tags
    Metadata:
        test_flag: provision
    """

    inst_args = {
        'purpose': {
            'apply_tags':
            Check_tree.CheckNode(
                ['{} *'.format(tag.category.display_name), tag.display_name])
        }
    }
    collection = appliance.provider_based_collection(provider)
    instance = collection.create(vm_name, provider, form_values=inst_args)
    tags = instance.get_tags()
    assert any(instance_tag.category.display_name == tag.category.display_name
               and instance_tag.display_name == tag.display_name
               for instance_tag in tags), ("{}: {} not in ({})".format(
                   tag.category.display_name, tag.display_name, str(tags)))
def test_provision_with_tag(appliance, vm_name, tag, provider, request):
    """ Tests tagging instance using provisioning dialogs.

    Steps:
        * Open the provisioning dialog.
        * Apart from the usual provisioning settings, pick a tag.
        * Submit the provisioning request and wait for it to finish.
        * Visit instance page, it should display the selected tags
    Metadata:
        test_flag: provision

    Polarion:
        assignee: anikifor
        casecomponent: Tagging
        initialEstimate: 1/4h
    """
    inst_args = {
        'purpose': {
            'apply_tags':
            Check_tree.CheckNode(
                ['{} *'.format(tag.category.display_name), tag.display_name])
        }
    }
    collection = appliance.provider_based_collection(provider)
    instance = collection.create(vm_name, provider, form_values=inst_args)
    request.addfinalizer(instance.cleanup_on_provider)
    assert tag in instance.get_tags(
    ), 'Provisioned instance does not have expected tag'
Esempio n. 4
0
    def set_additional_tenants(view, tenants):
        """ Sets additional tenants

        Args:
            view: AddCatalogItemView or EditCatalogItemView
            tenants: list of tenants with options to select

        Usage:
            set True to the path which needs to be checked
            and False for the path that needs to be unchecked

        catalog_item = appliance.collections.catalog_items.create(
            catalog_item_class,
            additional_tenants=[
                (("All Tenants"), False),
                (("All Tenants", "My Company"), True),
                (("All Tenants", "My Company", "Child", "Grandchild"), True),
            ],
            *args,
            **kwargs
        )
        """
        if tenants is not None and isinstance(tenants, (list, tuple, set)):
            changes = [
                view.fill({
                    "additional_tenants":
                    CheckableBootstrapTreeview.CheckNode(path)
                    if option else CheckableBootstrapTreeview.UncheckNode(path)
                }) for path, option in tenants
            ]
            return True in changes
        else:
            return False
Esempio n. 5
0
    def update(self, updates):
        """
        Args:
            updates: Dictionary containing 'filters' key. Values are tuples of ([path], bool)
                Where bool is whether to check or uncheck the filter

        Returns: None
        """
        view = navigate_to(self, 'All')
        for path, check in updates['filters']:
            fill_value = CbTree.CheckNode(
                path) if check else CbTree.UncheckNode(path)
            if view.tree.fill(fill_value):
                view.save.click()
            else:
                logger.info('No change to filter on update, not saving form.')
def testing_instance(request, setup_provider, provider, provisioning, vm_name, tag):
    """ Fixture to prepare instance parameters for provisioning
    """
    image = provisioning['image']['name']
    note = ('Testing provisioning from image {} to vm {} on provider {}'.format(
        image, vm_name, provider.key))

    instance = Instance.factory(vm_name, provider, image)

    inst_args = dict()

    # Base instance info
    inst_args['request'] = {
        'email': '*****@*****.**',
        'first_name': 'Image',
        'last_name': 'Provisioner',
        'notes': note,
    }
    # TODO Move this into helpers on the provider classes
    recursive_update(inst_args, {'catalog': {'vm_name': vm_name}})

    # Check whether auto-selection of environment is passed
    auto = False  # By default provisioning will be manual
    try:
        parameter = request.param
        if parameter == 'tag':
            inst_args['purpose'] = {
                'apply_tags': Check_tree.CheckNode(
                    ['{} *'.format(tag.category.display_name), tag.display_name])
            }
        else:
            auto = parameter
    except AttributeError:
        # in case nothing was passed just skip
        pass

    recursive_update(inst_args, {
        'environment': {
            'availability_zone': provisioning.get('availability_zone', None),
            'security_groups': [provisioning.get('security_group', None)],
            'cloud_network': provisioning.get('cloud_network', None),
            'cloud_subnet': provisioning.get('cloud_subnet', None),
            'resource_groups': provisioning.get('resource_group', None)
        },
        'properties': {
            'instance_type': partial_match(provisioning.get('instance_type', None)),
            'guest_keypair': provisioning.get('guest_keypair', None)}
    })
    # GCE specific
    if provider.one_of(GCEProvider):
        recursive_update(inst_args, {
            'properties': {
                'boot_disk_size': provisioning['boot_disk_size'],
                'is_preemptible': True}
        })

    # Azure specific
    if provider.one_of(AzureProvider):
        # Azure uses different provisioning keys for some reason
        try:
            template = provider.data.templates.small_template
            vm_user = credentials[template.creds].username
            vm_password = credentials[template.creds].password
        except AttributeError:
            pytest.skip('Could not find small_template or credentials for {}'.format(provider.name))
        recursive_update(inst_args, {
            'customize': {
                'admin_username': vm_user,
                'root_password': vm_password}})
    if auto:
        inst_args.update({'environment': {'automatic_placement': auto}})
    yield instance, inst_args, image

    logger.info('Fixture cleanup, deleting test instance: %s', instance.name)
    try:
        instance.delete_from_provider()
    except Exception as ex:
        logger.warning('Exception while deleting instance fixture, continuing: {}'
                       .format(ex.message))