def deploy(project, location, stage, skip_function, only_function, config, force): """ You can set the project and location using environment variable GOOGLE_PROJECT and GOOGLE_LOCATION Note: Allowed GOOGLE_LOCATION values for API GATEWAY are: asia-east1, europe-west1, us-eastl1 and us-central1. Note: Make sure api-gateway, cloudfunctions, and storage are enabled in your project """ try: _project = project or get_default_project() if not _project: click.echo( "Project not found. Set --project flag or add to gcloud by using gcloud config set project PROJECT" ) os.environ["GOOGLE_PROJECT"] = _project os.environ["GOOGLE_LOCATION"] = location if stage: os.environ["STAGE"] = stage if config: config = json.loads(config) app = get_goblet_app(GConfig().main_file or "main.py") # Deployer({"name": app.function_name}).deploy( # app, # skip_function=skip_function, # only_function=only_function, # config=config, # force=force, # ) app.deploy(skip_function, only_function, config=config, force=False) except FileNotFoundError as not_found: click.echo( f"Missing {not_found.filename}. Make sure you are in the correct directory and this file exists" )
def openapi(cloudfunction, stage, version): """ You can find the generated openapi spec in /.goblet folder. The cloudfunction argument sets the correct x-google-backend address in the openapi spec. """ if stage: os.environ["STAGE"] = stage try: app = get_goblet_app(GConfig().main_file or "main.py") app.handlers["route"].generate_openapi_spec(cloudfunction) except FileNotFoundError as not_found: click.echo( f"Missing {not_found.filename}. Make sure you are in the correct directory and this file exists" ) if version: with open(f"{get_g_dir()}/{app.function_name}_openapi_spec.yml", "r") as f: data = f.read() headers = { "accept": "application/yaml", "Content-Type": "application/yaml", } response = requests.post( "https://converter.swagger.io/api/convert", headers=headers, data=data ) with open(f"{get_g_dir()}/{app.function_name}_openapi_spec_3.yml", "w") as f: f.write(response.text)
def package(stage): """generates the goblet zipped package in .goblet folder""" try: if stage: os.environ["STAGE"] = stage app = get_goblet_app(GConfig().main_file or "main.py") app.package() except FileNotFoundError as not_found: click.echo( f"Missing {not_found.filename}. Make sure you are in the correct directory and this file exists" )
def create(stage): """create a new stage in config.json""" config = GConfig() if config.stages and stage in config.stages: return click.echo(f"stage {stage} already exists") app = get_goblet_app(GConfig().main_file or "main.py") function_name = f"{app.function_name}-{stage}" if not config.stages: config.stages = {stage: {"function_name": function_name}} else: config.stages[stage] = {"function_name": function_name} config.write() click.echo( f"stage {stage} created in config.json with function name {function_name}" )
def openapi(cloudfunction, stage): """ You can find the generated openapi spec in /.goblet folder. The cloudfunction argument sets the correct x-google-backend address in the openapi spec. """ if stage: os.environ["STAGE"] = stage try: app = get_goblet_app(GConfig().main_file or "main.py") app.handlers["route"].generate_openapi_spec(cloudfunction) except FileNotFoundError as not_found: click.echo( f"Missing {not_found.filename}. Make sure you are in the correct directory and this file exists" )
def destroy(project, location, stage, all): """ Deletes all resources in gcp that are defined the current deployment The --all flag removes cloudfunction artifacts in cloud storage as well """ try: _project = project or get_default_project() if not _project: click.echo( "Project not found. Set --project flag or add to gcloud by using gcloud config set project PROJECT" ) os.environ["GOOGLE_PROJECT"] = _project os.environ["GOOGLE_LOCATION"] = location if stage: os.environ["STAGE"] = stage app = get_goblet_app(GConfig().main_file or "main.py") app.destroy(all) except FileNotFoundError as not_found: click.echo( f"Missing {not_found.filename}. Make sure you are in the correct directory and this file exists" )
def sync(project, location, stage, dryrun): """ Syncs resources that are deployed with current app configuration. This command will delete resources based on naming convention that are no longer in the app configuration. Use --dryrun flag to see what resources are flagged as being deleted. """ try: _project = project or get_default_project() if not _project: click.echo( "Project not found. Set --project flag or add to gcloud by using gcloud config set project PROJECT" ) os.environ["GOOGLE_PROJECT"] = _project os.environ["GOOGLE_LOCATION"] = location if stage: os.environ["STAGE"] = stage app = get_goblet_app(GConfig().main_file or "main.py") app.sync(dryrun) except FileNotFoundError as not_found: click.echo( f"Missing {not_found.filename}. Make sure you are in the correct directory and this file exists" )