def get_environment(env_name=None): tgt_env_name = env_name if env_name else horton.namespace + 'whoville' envs = list_environments() if tgt_env_name in envs: env_test = cd.EnvironmentsApi(horton.cad).get_redacted(tgt_env_name) while not env_test: sleep(2) env_test = cd.EnvironmentsApi(horton.cad).get_redacted(tgt_env_name) return env_test else: return create_environment()
def create_environment(): platform = config.profile.get('platform') env_name = horton.namespace + 'whoville' if 'ssh_key_priv' in config.profile: priv_key = config.profile['ssh_key_priv'] elif 'sshkey_priv' in config.profile: priv_key = config.profile['sshkey_priv'] else: raise ValueError("SSH Private Key is required in your Profile, please update from the Template") if platform['provider'] == 'EC2': env_type = 'aws' env_config = { 'accessKeyId': platform['key'], 'secretAccessKey': platform['secret'], 'region': platform['region'] } elif platform['provider'] == 'GCE': env_type = 'google' env_config = { 'projectId': platform['project'], 'jsonKey': platform['jsonkey'], 'region': platform['region'] } else: raise ValueError("Provider %s not supported for Director in Whoville", platform['provider']) cad_env = cd.Environment( name=env_name, credentials=cd.SshCredentials( username='******', port=22, private_key=priv_key ), provider=cd.InstanceProviderConfig( type=env_type, config=env_config ) ) try: cd.EnvironmentsApi(horton.cad).create(cad_env) except ApiException as e: if 'iam:GetInstanceProfile' in e.body: sleep(3) # The first attempt usually fails, then will succeed after cd.EnvironmentsApi(horton.cad).create(cad_env) else: raise e env_test = cd.EnvironmentsApi(horton.cad).get_redacted(env_name) while not env_test: sleep(2) env_test = cd.EnvironmentsApi(horton.cad).get_redacted(env_name) return env_test
def get_environment(env_name=None): tgt_env_name = env_name if env_name else horton.namespace + 'whoville' envs = list_environments() if tgt_env_name in envs: return cd.EnvironmentsApi(horton.cad).get_redacted(tgt_env_name) else: return create_environment()
def list_environments(bool_response=False): # Using this function as a test for the Cloudbreak Api being available try: envs = cd.EnvironmentsApi(horton.cad).list() if not bool_response: return envs else: if isinstance(envs, list): return True else: return False except ApiException as e: if bool_response: return False else: raise e
def delete_environment(env_name=None): env_name = env_name if env_name else horton.cdcred.name try: return cd.EnvironmentsApi(horton.cad).delete(env_name) except ApiException as e: raise e