Files
infra-hideyoshi.com/setup.py

119 lines
3.0 KiB
Python

from base64 import b64decode, b64encode
from dotenv import load_dotenv
from envsubst import envsubst
from pathlib import Path, PosixPath
import argparse
import os
ENV_VARIABLES = [
"FRONTEND_PATH",
"BACKEND_URL",
"BACKEND_OAUTH_URL",
"TOKEN_SECRET",
"ACCESS_TOKEN_DURATION",
"REFRESH_TOKEN_DURATION",
"DEFAULT_USER_FULLNAME",
"DEFAULT_USER_EMAIL",
"DEFAULT_USER_USERNAME",
"DEFAULT_USER_PASSWORD",
"GOOGLE_CLIENT_ID",
"GOOGLE_CLIENT_SECRET",
"GOOGLE_REDIRECT_URL",
"OAUTH_GITHUB_CLIENT_ID",
"OAUTH_GITHUB_CLIENT_SECRET",
"OAUTH_GITHUB_REDIRECT_URL",
"POSTGRES_USER",
"POSTGRES_PASSWORD",
"POSTGRES_DB",
"REDIS_PASSWORD",
"STORAGE_TYPE",
"AWS_ACCESS_KEY_ID",
"AWS_SECRET_ACCESS_KEY",
"AWS_REGION_NAME",
"AWS_BUCKET_NAME",
"VIRUS_CHECKER_TYPE",
"VIRUS_CHECKER_API_KEY",
]
def setting_environment(environment: str):
if not environment in ("prod", "staging", "local", "dev"):
raise ValueError("Invalid Environment Selected")
match environment:
case "local":
DOMAIN = "local.hideyoshi.com.br"
API_DOMAIN = "api.local.hideyoshi.com.br"
case "staging":
DOMAIN = "staging.hideyoshi.com.br"
API_DOMAIN = "api.staging.hideyoshi.com.br"
case _:
DOMAIN = "hideyoshi.com.br"
API_DOMAIN = "api.hideyoshi.com.br"
os.environ["DOMAIN"] = DOMAIN
os.environ["API_DOMAIN"] = API_DOMAIN
def load_secret_file(file: str):
secret_file_path = Path(file)
if not secret_file_path.exists():
raise FileNotFoundError("Secret File Doesn't Exists")
load_dotenv(dotenv_path=secret_file_path)
def fetch_env_variables():
for env in ENV_VARIABLES:
value = os.environ[env]
value = value.encode("utf-8")
os.environ[env] = b64encode(value).decode()
def envsubst_file(file: PosixPath):
with open(file) as f:
formated_file = envsubst(f.read())
new_file = Path("deployment") \
.joinpath(*[part.split('.')[0] for part in file.parts if part != "template"]) \
.with_suffix(".yaml")
with open(new_file, 'w') as f:
f.write(formated_file)
def substitute_secrets_from_templates():
for subdir in Path("template").glob("*"):
for file in subdir.glob("*.yaml"):
envsubst_file(file)
def main(file, environment):
setting_environment(environment)
load_secret_file(file)
fetch_env_variables()
substitute_secrets_from_templates()
if __name__ == "__main__":
parser = argparse.ArgumentParser(prog="Setup")
parser.add_argument(
"-f", "--file",
dest="file",
default=".env",
help="Secret file [default = .secret]"
)
parser.add_argument(
"-e", "--environment",
dest="environment",
default="prod",
help="Selected Deployment Environment [default = prod, options = [prod, staging, dev]]"
)
args = parser.parse_args()
main(**vars(args))