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)
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)
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)
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
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)