Beispiel #1
0
 def setUpClass(cls):
     """Import some parametrized puppet classes. This is required to make
     sure that we have smart class variable available.
     Read all available smart class parameters for imported puppet class to
     be able to work with unique entity for each specific test. Raise an
     exception and skip all tests in case not enough parameters returned.
     """
     super(SmartClassParametersTestCase, cls).setUpClass()
     cls.host_name = settings.server.hostname
     ssh.command('puppet module install --force puppetlabs/ntp')
     cls.env = Environment.info({u'name': 'production'})
     Proxy.importclasses({
         u'environment': cls.env['name'],
         u'name': cls.host_name,
     })
     cls.puppet = Puppet.info({u'name': 'ntp'})
     sc_params_list = SmartClassParameter.list({
         'environment':
         cls.env['name'],
         'search':
         'puppetclass=ntp'
     })
     if len(sc_params_list) < 45:
         raise RuntimeError('There are not enough smart class parameters to'
                            ' work with in provided puppet class')
     cls.sc_params_ids_list = [
         sc_param['id'] for sc_param in sc_params_list
     ]
Beispiel #2
0
 def setUpClass(cls):
     """Import a parametrized puppet class.
     """
     super(PuppetClassTestCase, cls).setUpClass()
     cls.host_name = settings.server.hostname
     ssh.command('puppet module install --force puppetlabs/ntp')
     cls.env = Environment.info({u'name': 'production'})
     Proxy.importclasses({
         u'environment': cls.env['name'],
         u'name': cls.host_name,
     })
     cls.puppet = Puppet.info({u'name': 'ntp'})
Beispiel #3
0
    def test_positive_import_puppet_classes(self):
        """Import puppet classes from proxy

        :id: 42e3a9c0-62e1-4049-9667-f3c0cdfe0b04

        :expectedresults: Puppet classes are imported from proxy

        :CaseImportance: Critical
        """
        port = get_available_capsule_port()
        with default_url_on_new_port(9090, port) as url:
            proxy = self._make_proxy({u'url': url})
            Proxy.importclasses({u'id': proxy['id']})
Beispiel #4
0
    def test_positive_import_puppet_classes(self):
        """Import puppet classes from proxy

        @id: 42e3a9c0-62e1-4049-9667-f3c0cdfe0b04

        @Assert: Puppet classes are imported from proxy
        """
        port = get_available_capsule_port()
        with default_url_on_new_port(9090, port):
            url = u'https://{0}:{1}'.format(settings.server.hostname, port)
            proxy = make_proxy({u'url': url})
            Proxy.importclasses({u'id': proxy['id']})
        # Add capsule id to cleanup list
        self.addCleanup(capsule_cleanup, proxy['id'])
Beispiel #5
0
    def test_positive_import_puppet_classes(self):
        """Import puppet classes from proxy

        @id: 42e3a9c0-62e1-4049-9667-f3c0cdfe0b04

        @Assert: Puppet classes are imported from proxy
        """
        port = get_available_capsule_port()
        with default_url_on_new_port(9090, port):
            url = u'https://{0}:{1}'.format(settings.server.hostname, port)
            proxy = make_proxy({u'url': url})
            Proxy.importclasses({u'id': proxy['id']})
        # Add capsule id to cleanup list
        self.addCleanup(capsule_cleanup, proxy['id'])
Beispiel #6
0
 def setUpClass(cls):
     """Import some parametrized puppet classes. This is required to make
     sure that we have data to be able to perform interactions with smart
     class variables.
     """
     super(SmartVariablesTestCase, cls).setUpClass()
     cls.puppet_module = "puppetlabs/ntp"
     cls.host_name = settings.server.hostname
     ssh.command('puppet module install --force {0}'.format(
         cls.puppet_module))
     cls.env = Environment.info({u'name': 'production'})
     Proxy.importclasses({
         u'environment': cls.env['name'],
         u'name': cls.host_name,
     })
     cls.puppet = Puppet.info({u'name': 'ntp'})
 def setUpClass(cls):
     """Import some parametrized puppet classes. This is required to make
     sure that we have smart class variable available.
     Read all available smart class parameters for imported puppet class to
     be able to work with unique entity for each specific test. Raise an
     exception and skip all tests in case not enough parameters returned.
     """
     super(SmartClassParametersTestCase, cls).setUpClass()
     cls.host_name = settings.server.hostname
     ssh.command("puppet module install --force puppetlabs/ntp")
     cls.env = Environment.info({u"name": "production"})
     Proxy.importclasses({u"environment": cls.env["name"], u"name": cls.host_name})
     cls.puppet = Puppet.info({u"name": "ntp"})
     sc_params_list = SmartClassParameter.list({"environment": cls.env["name"], "search": "puppetclass=ntp"})
     if len(sc_params_list) < 45:
         raise RuntimeError("There are not enough smart class parameters to" " work with in provided puppet class")
     cls.sc_params_ids_list = [sc_param["id"] for sc_param in sc_params_list]
Beispiel #8
0
def configure_puppet_test():
    sat6_hostname = settings.server.hostname
    repo_values = [
        {'repo': REPOS['rhst6']['name'], 'reposet': REPOSET['rhst6']},
        {'repo': REPOS['rhst7']['name'], 'reposet': REPOSET['rhst7']},
    ]

    # step 1: Create new organization and environment.
    org = entities.Organization(name=gen_string('alpha')).create()
    loc = entities.Location(name=DEFAULT_LOC).search()[0].read()
    puppet_env = entities.Environment(
        name='production').search()[0].read()
    puppet_env.location.append(loc)
    puppet_env.organization.append(org)
    puppet_env = puppet_env.update(['location', 'organization'])
    Proxy.importclasses({
        u'environment': puppet_env.name,
        u'name': sat6_hostname,
    })
    env = entities.LifecycleEnvironment(
        organization=org,
        name=gen_string('alpha')
    ).create()

    # step 2: Clone and Upload manifest
    with manifests.clone() as manifest:
        upload_manifest(org.id, manifest.content)

    # step 3: Sync RedHat Sattools RHEL6 and RHEL7 repository
    repos = [
        entities.Repository(id=enable_rhrepo_and_fetchid(
            basearch='x86_64',
            org_id=org.id,
            product=PRDS['rhel'],
            repo=value['repo'],
            reposet=value['reposet'],
            releasever=None,
        ))
        for value in repo_values
        ]
    for repo in repos:
        repo.sync()

    # step 4: Create content view
    content_view = entities.ContentView(
        organization=org,
        name=gen_string('alpha')
    ).create()

    # step 5: Associate repository to new content view
    content_view.repository = repos
    content_view = content_view.update(['repository'])

    # step 6: Publish content view and promote to lifecycle env.
    content_view.publish()
    content_view = content_view.read()
    promote(content_view.version[0], env.id)

    # step 7: Create activation key
    ak_name = gen_string('alpha')
    activation_key = entities.ActivationKey(
        name=ak_name,
        environment=env,
        organization=org,
        content_view=content_view,
    ).create()

    # step 7.1: Walk through the list of subscriptions.
    # Find the "Employee SKU" and attach it to the
    # recently-created activation key.
    for sub in entities.Subscription(organization=org).search():
        if sub.read_json()['product_name'] == DEFAULT_SUBSCRIPTION_NAME:
            # 'quantity' must be 1, not subscription['quantity']. Greater
            # values produce this error: "RuntimeError: Error: Only pools
            # with multi-entitlement product subscriptions can be added to
            # the activation key with a quantity greater than one."
            activation_key.add_subscriptions(data={
                'quantity': 1,
                'subscription_id': sub.id,
            })
            break
    for content_label in [REPOS['rhst6']['id'], REPOS['rhst7']['id']]:
        # step 7.2: Enable product content
        activation_key.content_override(data={'content_override': {
            u'content_label': content_label,
            u'value': u'1',
        }})

    return {
        'org_name': org.name,
        'cv_name': content_view.name,
        'sat6_hostname': settings.server.hostname,
        'ak_name': ak_name,
        'env_name': env.name,
    }