@@ -16,11 +16,12 @@ import argparse
1616import logging
1717import urllib3
1818urllib3 .disable_warnings ()
19- import os
20- import sys
21- import json
22- import re
2319import yaml
20+ import json
21+ import sys
22+
23+ import boto3
24+ from botocore .exceptions import ClientError
2425
2526from mas .devops .users import MASUserUtils
2627
@@ -30,18 +31,20 @@ if __name__ == "__main__":
3031 parser = argparse .ArgumentParser ()
3132
3233 # Primary Options
34+ parser .add_argument ("--mas-account-id" , required = False ) # TODO: remove if unused
35+ parser .add_argument ("--mas-cluster-id" , required = False ) # TODO: remove if unused
3336 parser .add_argument ("--mas-instance-id" , required = True )
3437 parser .add_argument ("--mas-workspace-id" , required = True )
35- parser .add_argument ("--initial-users-yaml-file" , required = True )
3638 parser .add_argument ("--log-level" , required = False , choices = ["DEBUG" , "INFO" , "WARNING" , "ERROR" , "CRITICAL" ], default = "WARNING" )
37- parser .add_argument ("--dry-run" , required = False , help = "When specified, nothing will actually be deleted from the cluster" , action = "store_true" )
38-
39-
4039 parser .add_argument ("--coreapi-port" , required = False , default = 443 )
4140 parser .add_argument ("--admin-dashboard-port" , required = False , default = 443 )
4241 parser .add_argument ("--manage-api-port" , required = False , default = 443 )
4342
4443
44+ group = parser .add_mutually_exclusive_group (required = True )
45+ group .add_argument ("--initial-users-yaml-file" )
46+ group .add_argument ("--initial-users-secret-name" )
47+
4548 args , unknown = parser .parse_known_args ()
4649
4750 log_level = getattr (logging , args .log_level )
@@ -57,26 +60,29 @@ if __name__ == "__main__":
5760 ch .setFormatter (chFormatter )
5861 logger .addHandler (ch )
5962
60-
63+ mas_account_id = args .mas_account_id
64+ mas_cluster_id = args .mas_cluster_id
6165 mas_instance_id = args .mas_instance_id
6266 mas_workspace_id = args .mas_workspace_id
6367 initial_users_yaml_file = args .initial_users_yaml_file
64- dry_run = args .dry_run
68+ initial_users_secret_name = args .initial_users_secret_name
6569 coreapi_port = args .coreapi_port
6670 admin_dashboard_port = args .admin_dashboard_port
6771 manage_api_port = args .manage_api_port
6872
6973
7074 logger .info ("Configuration:" )
7175 logger .info ("--------------" )
72- logger .info (f"mas_instance_id: { mas_instance_id } " )
73- logger .info (f"mas_workspace_id: { mas_workspace_id } " )
74- logger .info (f"initial_users_yaml_file: { initial_users_yaml_file } " )
75- logger .info (f"log_level: { log_level } " )
76- logger .info (f"dry_run: { dry_run } " )
77- logger .info (f"coreapi_port: { coreapi_port } " )
78- logger .info (f"admin_dashboard_port: { admin_dashboard_port } " )
79- logger .info (f"manage_api_port: { manage_api_port } " )
76+ logger .info (f"mas_account_id: { mas_account_id } " )
77+ logger .info (f"mas_cluster_id: { mas_cluster_id } " )
78+ logger .info (f"mas_instance_id: { mas_instance_id } " )
79+ logger .info (f"mas_workspace_id: { mas_workspace_id } " )
80+ logger .info (f"initial_users_yaml_file: { initial_users_yaml_file } " )
81+ logger .info (f"initial_users_secret_name: { initial_users_secret_name } " )
82+ logger .info (f"log_level: { log_level } " )
83+ logger .info (f"coreapi_port: { coreapi_port } " )
84+ logger .info (f"admin_dashboard_port: { admin_dashboard_port } " )
85+ logger .info (f"manage_api_port: { manage_api_port } " )
8086 logger .info ("" )
8187
8288 try :
@@ -88,11 +94,30 @@ if __name__ == "__main__":
8894 config .load_kube_config ()
8995 logger .debug ("Loaded kubeconfig file" )
9096
91- user_utils = MASUserUtils (mas_instance_id , mas_workspace_id , client .api_client .ApiClient (), coreapi_port = coreapi_port , admin_dashboard_port = admin_dashboard_port , manage_api_port = manage_api_port )
92-
93- with open (initial_users_yaml_file , 'r' ) as file :
94- initial_users_yaml = yaml .safe_load (file )
9597
98+ user_utils = MASUserUtils (mas_instance_id , mas_workspace_id , client .api_client .ApiClient (), coreapi_port = coreapi_port , admin_dashboard_port = admin_dashboard_port , manage_api_port = manage_api_port )
9699
97- user_utils .create_initial_users_for_saas (initial_users_yaml )
100+ if initial_users_secret_name is not None :
101+
102+ session = boto3 .session .Session ()
103+ aws_sm_client = session .client (
104+ service_name = 'secretsmanager' ,
105+ )
106+ try :
107+ initial_users_secret = aws_sm_client .get_secret_value ( # pragma: allowlist secret
108+ SecretId = initial_users_secret_name
109+ )
110+ except ClientError as e :
111+ raise Exception (f"Failed to fetch secret { initial_users_secret_name } : { str (e )} " )
112+
113+ secret_json = json .loads (initial_users_secret ['SecretString' ])
114+ initial_users = user_utils .parse_initial_users_from_aws_secret_json (secret_json )
115+ elif initial_users_yaml_file is not None :
116+ with open (initial_users_yaml_file , 'r' ) as file :
117+ initial_users = yaml .safe_load (file )
118+ else :
119+ raise Exception ("Something unexpected happened" )
120+
121+ user_utils .create_initial_users_for_saas (initial_users )
122+
98123
0 commit comments