Beispiel #1
0
def cls(request, domain):
    tcls = automate.Class(name="ProvisionRequestQuotaVerification",
        namespace=automate.Namespace.make_path("Infrastructure", "VM",
            "Provisioning", "StateMachines",
            parent=domain, create_on_init=True))
    tcls.create()
    request.addfinalizer(lambda: tcls.delete() if tcls.exists() else None)
    return tcls
Beispiel #2
0
def copy_methods(domain):
    methods = ['rejected', 'validate_quotas']
    for method in methods:
        ocls = automate.Class(name="ProvisionRequestQuotaVerification",
            namespace=automate.Namespace.make_path("Infrastructure", "VM",
                "Provisioning", "StateMachines",
                parent=automate.Domain(name="ManageIQ (Locked)")))

        method = automate.Method(name=method, cls=ocls)

        method = method.copy_to(domain)
Beispiel #3
0
def cls(request, domain):
    tcls = automate.Class(name="Methods",
                          namespace=automate.Namespace.make_path(
                              "Cloud",
                              "VM",
                              "Provisioning",
                              "StateMachines",
                              parent=domain,
                              create_on_init=True))
    tcls.create()
    request.addfinalizer(lambda: tcls.delete() if tcls.exists() else None)
    return tcls
Beispiel #4
0
def copy_domains(domain):
    methods = ['openstack_PreProvision', 'openstack_CustomizeRequest']
    for method in methods:
        ocls = automate.Class(
            name="Methods",
            namespace=automate.Namespace.make_path(
                "Cloud",
                "VM",
                "Provisioning",
                "StateMachines",
                parent=automate.Domain(name="ManageIQ (Locked)")))

        method = automate.Method(name=method, cls=ocls)

        method = method.copy_to(domain)
Beispiel #5
0
def test_provision_with_additional_volume(request, setup_provider,
                                          provisioning, provider, vm_name,
                                          soft_assert, copy_domains, domain):
    """ Tests provisioning with setting specific image from AE and then also making it create and
    attach an additional 3G volume.

    Metadata:
        test_flag: provision, volumes
    """

    image = provisioning['image']['name']
    note = (
        'Testing provisioning from image {} to vm {} on provider {}'.format(
            image, vm_name, provider.key))

    # Set up automate
    cls = automate.Class(name="Methods",
                         namespace=automate.Namespace.make_path(
                             "Cloud",
                             "VM",
                             "Provisioning",
                             "StateMachines",
                             parent=domain))
    method = automate.Method(name="openstack_CustomizeRequest", cls=cls)
    try:
        image_id = provider.mgmt.get_template_id(
            provider.data["small_template"])
    except KeyError:
        pytest.skip("No small_template in provider adta!")
    with update(method):
        method.data = dedent('''\
            $evm.root["miq_provision"].set_option(
              :clone_options, {{
                :image_ref => nil,
                :block_device_mapping_v2 => [{{
                  :boot_index => 0,
                  :uuid => "{}",
                  :device_name => "vda",
                  :source_type => "image",
                  :destination_type => "volume",
                  :volume_size => 3,
                  :delete_on_termination => false
                }}]
              }}
        )
        '''.format(image_id))

    def _finish_method():
        with update(method):
            method.data = """prov = $evm.root["miq_provision"]"""

    request.addfinalizer(_finish_method)
    instance = Instance.factory(vm_name, provider, image)
    request.addfinalizer(instance.delete_from_provider)
    inst_args = {
        'email': '*****@*****.**',
        'first_name': 'Image',
        'last_name': 'Provisioner',
        'notes': note,
        'instance_type': provisioning['instance_type'],
        'availability_zone': provisioning['availability_zone'],
        'security_groups': [provisioning['security_group']],
        'guest_keypair': provisioning['guest_keypair']
    }

    if isinstance(provider, OpenStackProvider):
        inst_args['cloud_network'] = provisioning['cloud_network']

    sel.force_navigate("clouds_instances_by_provider")
    instance.create(**inst_args)

    prov_instance = provider.mgmt._find_instance_by_name(vm_name)
    try:
        assert hasattr(prov_instance, 'os-extended-volumes:volumes_attached')
        volumes_attached = getattr(prov_instance,
                                   'os-extended-volumes:volumes_attached')
        assert len(volumes_attached) == 1
        volume_id = volumes_attached[0]["id"]
        assert provider.mgmt.volume_exists(volume_id)
        volume = provider.mgmt.get_volume(volume_id)
        assert volume.size == 3
    finally:
        instance.delete_from_provider()
        wait_for(lambda: not instance.does_vm_exist_on_provider(),
                 num_sec=180,
                 delay=5)
        if "volume_id" in locals():  # To handle the case of 1st or 2nd assert
            if provider.mgmt.volume_exists(volume_id):
                provider.mgmt.delete_volume(volume_id)
Beispiel #6
0
def test_provision_with_boot_volume(request, setup_provider, provider,
                                    provisioning, vm_name, soft_assert, domain,
                                    copy_domains):
    """ Tests provisioning from a template and attaching one booting volume.

    Metadata:
        test_flag: provision, volumes
    """

    image = provisioning['image']['name']
    note = (
        'Testing provisioning from image {} to vm {} on provider {}'.format(
            image, vm_name, provider.key))

    with provider.mgmt.with_volume(
            1, imageRef=provider.mgmt.get_template_id(image)) as volume:
        # Set up automate
        cls = automate.Class(name="Methods",
                             namespace=automate.Namespace.make_path(
                                 "Cloud",
                                 "VM",
                                 "Provisioning",
                                 "StateMachines",
                                 parent=domain))
        method = automate.Method(name="openstack_CustomizeRequest", cls=cls)
        with update(method):
            method.data = dedent('''\
                $evm.root["miq_provision"].set_option(
                    :clone_options, {{
                        :image_ref => nil,
                        :block_device_mapping_v2 => [{{
                            :boot_index => 0,
                            :uuid => "{}",
                            :device_name => "vda",
                            :source_type => "volume",
                            :destination_type => "volume",
                            :delete_on_termination => false
                        }}]
                    }}
                )
            '''.format(volume))

        def _finish_method():
            with update(method):
                method.data = """prov = $evm.root["miq_provision"]"""

        request.addfinalizer(_finish_method)
        instance = Instance.factory(vm_name, provider, image)
        request.addfinalizer(instance.delete_from_provider)
        inst_args = {
            'email': '*****@*****.**',
            'first_name': 'Image',
            'last_name': 'Provisioner',
            'notes': note,
            'instance_type': provisioning['instance_type'],
            'availability_zone': provisioning['availability_zone'],
            'security_groups': [provisioning['security_group']],
            'guest_keypair': provisioning['guest_keypair']
        }

        if isinstance(provider, OpenStackProvider):
            inst_args['cloud_network'] = provisioning['cloud_network']

        sel.force_navigate("clouds_instances_by_provider")
        instance.create(**inst_args)

        soft_assert(vm_name in provider.mgmt.volume_attachments(volume))
        soft_assert(provider.mgmt.volume_attachments(volume)[vm_name] == "vda")
        instance.delete_from_provider(
        )  # To make it possible to delete the volume
        wait_for(lambda: not instance.does_vm_exist_on_provider(),
                 num_sec=180,
                 delay=5)
Beispiel #7
0
def test_provision_from_template_with_attached_disks(request, setup_provider,
                                                     provider, provisioning,
                                                     vm_name, disks,
                                                     soft_assert, domain, cls,
                                                     copy_domains):
    """ Tests provisioning from a template and attaching disks

    Metadata:
        test_flag: provision
    """

    image = provisioning['image']['name']
    note = (
        'Testing provisioning from image {} to vm {} on provider {}'.format(
            image, vm_name, provider.key))

    DEVICE_NAME = "/dev/sd{}"
    device_mapping = []

    with provider.mgmt.with_volumes(1, n=disks) as volumes:
        for i, volume in enumerate(volumes):
            device_mapping.append(
                (volume, DEVICE_NAME.format(chr(ord("b") + i))))
        # Set up automate

        cls = automate.Class(name="Methods",
                             namespace=automate.Namespace.make_path(
                                 "Cloud",
                                 "VM",
                                 "Provisioning",
                                 "StateMachines",
                                 parent=domain))

        method = automate.Method(name="openstack_PreProvision", cls=cls)

        with update(method):
            disk_mapping = []
            for mapping in device_mapping:
                disk_mapping.append(ONE_FIELD.format(mapping))
            method.data = VOLUME_METHOD.format(", ".join(disk_mapping))

        def _finish_method():
            with update(method):
                method.data = """prov = $evm.root["miq_provision"]"""

        request.addfinalizer(_finish_method)
        instance = Instance.factory(vm_name, provider, image)
        request.addfinalizer(instance.delete_from_provider)
        inst_args = {
            'email': '*****@*****.**',
            'first_name': 'Image',
            'last_name': 'Provisioner',
            'notes': note,
            'instance_type': provisioning['instance_type'],
            'availability_zone': provisioning['availability_zone'],
            'security_groups': [provisioning['security_group']],
            'guest_keypair': provisioning['guest_keypair']
        }

        if isinstance(provider, OpenStackProvider):
            inst_args['cloud_network'] = provisioning['cloud_network']

        sel.force_navigate("clouds_instances_by_provider")
        instance.create(**inst_args)

        for volume_id in volumes:
            soft_assert(vm_name in provider.mgmt.volume_attachments(volume_id))
        for volume, device in device_mapping:
            soft_assert(
                provider.mgmt.volume_attachments(volume)[vm_name] == device)
        instance.delete_from_provider(
        )  # To make it possible to delete the volume
        wait_for(lambda: not instance.does_vm_exist_on_provider(),
                 num_sec=180,
                 delay=5)