# tenant/commands/init.py import os from tenant.utils.common import get_secure_password, generate_key, generate_csr from tenant.utils.terraform import create_tfvars_file import tenant.utils.generate_secrets_file from tenant.utils.template_values import template_values def add_subparser(subparsers): init_parser = subparsers.add_parser("init", help="Initialize a new tenant") init_parser.add_argument( "--target", default=".", help="Target directory (default: current directory)" ) def execute(args): tenant_name = os.environ.get("TENANT_NAME") if not tenant_name: tenant_name = input("Please enter the desired tenant name: ") else: user_confirmation = input( f"Current tenant name is {tenant_name}. Is this correct? (y/n): " ) if user_confirmation != "y": tenant_name = input("Please enter the tenant name: ") ingress = input( "Please enter the FQDN of the Kibana ingress, without the 'kibana' prefix: " ) target_directory = args.target tenant_directory = os.path.join(target_directory, tenant_name) # Check if the tenant directory already exists if os.path.exists(tenant_directory): print( f"Error: Tenant directory '{tenant_directory}' already exists. Init aborted." ) return # Prompt the user for the GitSync password securely git_sync_password = get_secure_password( prompt="Please insert predefined password for GitSync: " ) # define and create necessary folder structure terraform_directory = os.path.join(tenant_directory, "00-terraform") certificates_directory = os.path.join(tenant_directory, "01-certificates") kubernetes_directory = os.path.join(tenant_directory, "02-kubernetes") helm_directory = os.path.join(tenant_directory, "03-helm") os.makedirs(certificates_directory) os.makedirs(terraform_directory) os.makedirs(kubernetes_directory) os.makedirs(helm_directory) # generate key and csr if not exist keyfile = os.path.join(certificates_directory, ingress + ".key") csrfile = os.path.join(certificates_directory, ingress + ".csr") if os.path.exists(keyfile): print("Keyfile file already exists") print(keyfile) exit(1) else: generate_key(keyfile) generate_csr(csrfile, ingress) # Create symbolic links for *.tf files in tenant directory source_tf_dir = os.path.join(target_directory, "terraform") target_tf_dir = terraform_directory # for filename in os.listdir(source_tf_dir): # if filename.endswith(".tf"): # source_path = os.path.join(source_tf_dir, filename) # target_path = os.path.join(target_tf_dir, filename) # # Ensure the source path is correct before creating the symbolic link # if os.path.exists(source_path): # relative_path = os.path.relpath(source_path, target_tf_dir) # os.symlink(relative_path, target_path) # else: # print( # f"Warning: Source file '{filename}' not found in '{source_tf_dir}'." # ) variables = { "tenant_name": tenant_name, } tfvars_filepath = os.path.join(terraform_directory, tenant_name + ".tfvars") create_tfvars_file(variables, tfvars_filepath) values_file = os.path.join(helm_directory, tenant_name + ".values.yaml") if os.path.exists(values_file): print("Values file already exists") print(values_file) else: template_values(tenant_name, "S", "laas", ingress, values_file) # generate secrets file if not already exist, not yet encrypted on the fly secrets_file = os.path.join(helm_directory, tenant_name + ".secrets.yaml") if os.path.exists(secrets_file): print("Secrets file already exists") print(secrets_file) else: tenant.utils.generate_secrets_file.generate_secrets_file( secrets_file, git_sync_password ) print(f"Tenant '{tenant_name}' initialized in '{tenant_directory}'.")