cara/app-config/openshift/config-generate.py
2022-01-10 17:41:37 +01:00

63 lines
2.1 KiB
Python

import argparse
import pathlib
import subprocess
import typing
def configure_parser(parser: argparse.ArgumentParser) -> None:
parser.description = "Generate the config files which can be later submitted to openshift"
parser.set_defaults(handler=handler)
parser.add_argument(
"instance", choices=['cara-prod', 'test-cara'],
help="Pick the instance for which you want to generate the config",
)
parser.add_argument(
"-o", "--output-directory", default='config',
help="Location to put the config files",
)
def generate_config(output_directory: pathlib.Path, project_name: str, hostname: str, branch: str):
output_directory.mkdir(exist_ok=True, parents=True)
def oc_process(component_name: str, context: typing.Optional[dict] = None):
cmd = ['oc', 'process', '--local', '-f', f'{component_name}.yaml', '-o', 'yaml']
for ctx_name, ctx_value in (context or {}).items():
cmd.extend(['--param', f'{ctx_name}={ctx_value}'])
with (output_directory / f'{component_name}.yaml').open('wt') as fh:
print(f'Running: {" ".join(cmd)}')
subprocess.run(cmd, stdout=fh, check=True)
oc_process('routes', context={'HOST': hostname})
oc_process('configmap')
oc_process('services')
oc_process('imagestreams')
oc_process('buildconfig', context={'GIT_BRANCH': branch})
oc_process('deploymentconfig', context={'PROJECT_NAME': project_name})
print(f'Config in: {output_directory.absolute()}')
def handler(args: argparse.ArgumentParser) -> None:
if args.instance == 'cara-prod':
project_name = 'cara-prod'
branch = 'master'
hostname = 'cara.web.cern.ch'
elif args.instance == 'test-cara':
project_name = 'test-cara'
branch = 'live/test-cara'
hostname = 'test-cara.web.cern.ch'
generate_config(pathlib.Path(args.output_directory), project_name, hostname, branch)
def main():
parser = argparse.ArgumentParser()
configure_parser(parser)
args = parser.parse_args()
args.handler(args)
if __name__ == '__main__':
main()