def setup(dry_run, print_only, thread_pool_size, internal, use_jump_host, account_name): gqlapi = gql.get_api() accounts = queries.get_aws_accounts() if account_name: accounts = [n for n in accounts if n['name'] == account_name] if not accounts: raise ValueError(f"aws account {account_name} is not found") settings = queries.get_app_interface_settings() namespaces = gqlapi.query(TF_NAMESPACES_QUERY)['namespaces'] tf_namespaces = [namespace_info for namespace_info in namespaces if namespace_info.get('managedTerraformResources')] ri, oc_map = fetch_current_state(dry_run, tf_namespaces, thread_pool_size, internal, use_jump_host) ts, working_dirs = init_working_dirs(accounts, thread_pool_size, print_only=print_only, oc_map=oc_map, settings=settings) tf = Terraform(QONTRACT_INTEGRATION, QONTRACT_INTEGRATION_VERSION, QONTRACT_TF_PREFIX, working_dirs, thread_pool_size) existing_secrets = tf.get_terraform_output_secrets() ts.populate_resources(tf_namespaces, existing_secrets, account_name) ts.dump(print_only, existing_dirs=working_dirs) return ri, oc_map, tf
def run(dry_run=False, print_only=False, enable_deletion=False, thread_pool_size=10, defer=None): settings = queries.get_app_interface_settings() desired_state = fetch_desired_state(settings) # check there are no repeated vpc connection names connection_names = [c['connection_name'] for c in desired_state] if len(set(connection_names)) != len(connection_names): logging.error("duplicated vpc connection names found") sys.exit(1) participating_accounts = \ [item['account'] for item in desired_state] participating_account_names = \ [a['name'] for a in participating_accounts] accounts = [ a for a in queries.get_aws_accounts() if a['name'] in participating_account_names ] ts = Terrascript(QONTRACT_INTEGRATION, "", thread_pool_size, accounts, settings=settings) ts.populate_additional_providers(participating_accounts) ts.populate_vpc_peerings(desired_state) working_dirs = ts.dump(print_only=print_only) if print_only: sys.exit() tf = Terraform(QONTRACT_INTEGRATION, QONTRACT_INTEGRATION_VERSION, "", working_dirs, thread_pool_size) if tf is None: sys.exit(1) defer(lambda: tf.cleanup()) deletions_detected, err = tf.plan(enable_deletion) if err: sys.exit(1) if deletions_detected and not enable_deletion: sys.exit(1) if dry_run: return err = tf.apply() if err: sys.exit(1)
def run(dry_run, print_only=False, enable_deletion=False, io_dir='throughput/', thread_pool_size=10, send_mails=True): working_dirs = setup(print_only, thread_pool_size) if print_only: cleanup_and_exit() if working_dirs is None: err = True cleanup_and_exit(status=err) tf = Terraform(QONTRACT_INTEGRATION, QONTRACT_INTEGRATION_VERSION, QONTRACT_TF_PREFIX, working_dirs, thread_pool_size, init_users=True) if tf is None: err = True cleanup_and_exit(tf, err) deletions_detected, err = tf.plan(enable_deletion) if err: cleanup_and_exit(tf, err) if deletions_detected: if enable_deletion: tf.dump_deleted_users(io_dir) else: cleanup_and_exit(tf, deletions_detected) if dry_run: cleanup_and_exit(tf) err = tf.apply() if err: cleanup_and_exit(tf, err) if send_mails: new_users = tf.get_new_users() settings = queries.get_app_interface_settings() send_email_invites(new_users, settings) cleanup_and_exit(tf)
def run(dry_run, print_only=False, enable_deletion=False, thread_pool_size=10, defer=None): settings = queries.get_app_interface_settings() clusters = [ c for c in queries.get_clusters() if c.get('peering') is not None ] ocm_map = OCMMap(clusters=clusters, integration=QONTRACT_INTEGRATION, settings=settings) # Fetch desired state for cluster-to-vpc(account) VPCs desired_state_vpc, err = \ build_desired_state_vpc(clusters, ocm_map, settings) if err: sys.exit(1) # Fetch desired state for cluster-to-cluster VPCs desired_state_cluster, err = \ build_desired_state_cluster(clusters, ocm_map, settings) if err: sys.exit(1) desired_state = desired_state_vpc + desired_state_cluster # check there are no repeated vpc connection names connection_names = [c['connection_name'] for c in desired_state] if len(set(connection_names)) != len(connection_names): logging.error("duplicate vpc connection names found") sys.exit(1) participating_accounts = \ [item['requester']['account'] for item in desired_state] participating_accounts += \ [item['accepter']['account'] for item in desired_state] participating_account_names = \ [a['name'] for a in participating_accounts] accounts = [ a for a in queries.get_aws_accounts() if a['name'] in participating_account_names ] ts = Terrascript(QONTRACT_INTEGRATION, "", thread_pool_size, accounts, settings=settings) ts.populate_additional_providers(participating_accounts) ts.populate_vpc_peerings(desired_state) working_dirs = ts.dump(print_only=print_only) if print_only: sys.exit() tf = Terraform(QONTRACT_INTEGRATION, QONTRACT_INTEGRATION_VERSION, "", working_dirs, thread_pool_size) if tf is None: sys.exit(1) defer(lambda: tf.cleanup()) deletions_detected, err = tf.plan(enable_deletion) if err: sys.exit(1) if deletions_detected and not enable_deletion: sys.exit(1) if dry_run: return err = tf.apply() if err: sys.exit(1)