112 lines
4.1 KiB
Python
112 lines
4.1 KiB
Python
# 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}'.")
|