コード例 #1
0
def setup_provider(provider, original_provider_key):
    original_provider = get_from_config(original_provider_key)
    if original_provider.exists:
        # Delete original provider's hosts first
        for host in original_provider.hosts:
            if host.exists:
                host.delete(cancel=False)
        # Get rid of the original provider, it would make a mess.
        original_provider.delete(cancel=False)
        wait_for_provider_delete(provider)
    provider.create()
    provider.refresh_provider_relationships()
    try:
        wait_for(
            lambda: any([
                provider.num_vm() > 0,
                provider.num_template() > 0,
                provider.num_datastore() > 0,
                provider.num_host() > 0,
            ]), num_sec=400, delay=5)
    except:
        provider.delete(cancel=False)
        raise
    yield
    for host in provider.hosts:
        if host.exists:
            host.delete(cancel=False)
    provider.delete(cancel=False)
    wait_for_provider_delete(provider)
コード例 #2
0
ファイル: test_providers.py プロジェクト: jkrocil/cfme_tests
def test_provider_crud(provider_crud):
    """ Tests that a provider can be added """
    provider_crud.create()
    # Fails on upstream, all provider types - BZ1087476
    provider_crud.validate()

    old_name = provider_crud.name
    with update(provider_crud):
        provider_crud.name = str(uuid.uuid4())  # random uuid

    with update(provider_crud):
        provider_crud.name = old_name  # old name

    provider_crud.delete(cancel=False)
    provider.wait_for_provider_delete(provider_crud)
コード例 #3
0
def test_provider_crud(provider_crud):
    """ Tests that a provider can be added """
    provider_crud.create()
    # Fails on upstream, all provider types - BZ1087476
    provider_crud.validate()

    old_name = provider_crud.name
    with update(provider_crud):
        provider_crud.name = str(uuid.uuid4())  # random uuid

    with update(provider_crud):
        provider_crud.name = old_name  # old name

    provider_crud.delete(cancel=False)
    provider.wait_for_provider_delete(provider_crud)
コード例 #4
0
def test_provider_crud(provider_crud):
    """Tests provider add with good credentials

    Metadata:
        test_flag: crud
    """
    provider_crud.create()
    # Fails on upstream, all provider types - BZ1087476
    provider_crud.validate(db=False)

    old_name = provider_crud.name
    with update(provider_crud):
        provider_crud.name = str(uuid.uuid4())  # random uuid

    with update(provider_crud):
        provider_crud.name = old_name  # old name

    provider_crud.delete(cancel=False)
    provider.wait_for_provider_delete(provider_crud)
コード例 #5
0
ファイル: providers.py プロジェクト: seandst/cfme_tests
def setup_a_provider(
        prov_class=None, prov_type=None, validate=True, check_existing=True, delete_failure=False):
    """Sets up a random provider

    Args:
        prov_type: "infra" or "cloud"
        delete_failure: Deletes the provider if the provider exists and the validation fails. Then
            it re-adds the provider.

    """
    if prov_class == "infra":
        from cfme.infrastructure.provider import get_from_config, wait_for_provider_delete
        potential_providers = list_infra_providers()
        if prov_type:
            providers = []
            for provider in potential_providers:
                if providers_data[provider]['type'] == prov_type:
                    providers.append(provider)
        else:
            providers = potential_providers
    elif prov_class == "cloud":
        from cfme.cloud.provider import get_from_config, wait_for_provider_delete
        potential_providers = list_cloud_providers()
        if prov_type:
            providers = []
            for provider in potential_providers:
                if providers_data[provider]['type'] == prov_type:
                    providers.append(provider)
        else:
            providers = potential_providers
    else:
        from cfme.infrastructure.provider import get_from_config, wait_for_provider_delete
        providers = list_infra_providers()

    result = None

    # If there is a provider that we want to specifically avoid ...
    # If there is only a single provider, then do not do any filtering
    # Specify `do_not_prefer` in provider's yaml to make it an object of avoidance.
    if len(providers) > 1:
        filtered_providers = [
            provider
            for provider
            in providers
            if not providers_data[provider].get("do_not_prefer", False)]
        if filtered_providers:
            # If our filtering yielded any providers, use them, otherwise do not bother with that
            providers = filtered_providers

    # If there is already a suitable provider, don't try to setup a new one.
    already_existing = filter(is_provider_setup, providers)
    if already_existing:
        chosen = random.choice(already_existing)
        try:
            return setup_provider(  # This will run a refresh too
                chosen, validate=validate, check_existing=check_existing)
        except Exception as e:
            if not delete_failure:
                raise
            logger.exception(e)
            logger.warning("Deleting and re-adding the provider {}.".format(chosen))
            prov_object = get_from_config(chosen)
            prov_object.delete(cancel=False)
            wait_for_provider_delete(prov_object)
            logger.info("Provider {} deleted, now going for re-add.".format(chosen))
            # And try again
            return setup_provider(  # This will run a refresh too
                chosen, validate=validate, check_existing=check_existing)

    # Shuffle the order to spread the load across providers
    random.shuffle(providers)
    # We need to setup a new one
    for provider in providers:
        try:
            result = setup_provider(provider, validate=validate, check_existing=check_existing)
            break
        except Exception as e:
            logger.exception(e)
            continue
    else:
        raise Exception("No providers could be set up matching the params")
    return result
コード例 #6
0
def test_provider_delete(provider_crud):
    provider_crud.delete(cancel=False)
    flash.assert_message_match(
        'Delete initiated for 1 Infrastructure Provider from the CFME Database')
    provider.wait_for_provider_delete(provider_crud)