170 lines
5.2 KiB
Python
170 lines
5.2 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2021 Google LLC. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""Provides common arguments for the Run command surface."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
from typing import Dict
|
|
|
|
from googlecloudsdk.api_lib.run.integrations import types_utils
|
|
from googlecloudsdk.api_lib.run.integrations import validator
|
|
from googlecloudsdk.calliope import arg_parsers
|
|
from googlecloudsdk.core import properties
|
|
|
|
|
|
def AddFileArg(parser):
|
|
"""Adds a FILE positional arg."""
|
|
parser.add_argument(
|
|
'FILE',
|
|
type=arg_parsers.YAMLFileContents(),
|
|
help='The absolute path to the YAML file with an application '
|
|
'definition to update or deploy.')
|
|
|
|
|
|
def AddPositionalTypeArg(parser):
|
|
"""Adds an integration type positional arg."""
|
|
parser.add_argument(
|
|
'type',
|
|
help='Type of the integration.')
|
|
|
|
|
|
def AddServiceAccountArg(parser):
|
|
"""Adds a service-account argument."""
|
|
parser.add_argument(
|
|
'--service-account',
|
|
help='Name of the service account to use when deploying the integration.',
|
|
)
|
|
|
|
|
|
def AddTypeArg(parser):
|
|
"""Adds an integration type arg."""
|
|
parser.add_argument(
|
|
'--type',
|
|
required=True,
|
|
help='Type of the integration. To see available types and usage, '
|
|
'use "gcloud run integrations types list" command.')
|
|
|
|
|
|
def AddNameArg(parser):
|
|
"""Adds an integration name arg."""
|
|
parser.add_argument(
|
|
'--name',
|
|
help='Name of the integration.')
|
|
|
|
|
|
def AddNamePositionalArg(parser):
|
|
"""Adds an integration name arg."""
|
|
parser.add_argument(
|
|
'name',
|
|
help='Name of the integration.')
|
|
|
|
|
|
def AddServiceCreateArg(parser):
|
|
"""Adds a service arg for create."""
|
|
parser.add_argument(
|
|
'--service',
|
|
help='Name of the Cloud Run service to attach to the integration. '
|
|
'It is required for some integrations.')
|
|
|
|
|
|
def AddServiceUpdateArgs(parser):
|
|
"""Adds service arguments for update."""
|
|
group = parser.add_mutually_exclusive_group()
|
|
group.add_argument(
|
|
'--add-service',
|
|
help='Name of the Cloud Run service to attach to the integration.')
|
|
group.add_argument(
|
|
'--remove-service',
|
|
help='Name of the Cloud Run service to remove from the integration.')
|
|
|
|
|
|
def AddParametersArg(parser):
|
|
"""Adds a parameters arg."""
|
|
parser.add_argument(
|
|
'--parameters',
|
|
type=arg_parsers.ArgDict(),
|
|
action=arg_parsers.UpdateAction,
|
|
default={},
|
|
metavar='PARAMETER=VALUE',
|
|
help='Comma-separated list of parameter names and values. '
|
|
'Names must be one of the parameters shown when describing the '
|
|
'integration type. Only simple values can be specified with this flag.')
|
|
|
|
|
|
def ValidateEnabledGcpApis(integration_type):
|
|
"""Validates user has enabled APIs, or else prompts user to enable."""
|
|
types_utils.CheckValidIntegrationType(integration_type)
|
|
validate = validator.GetIntegrationValidator(integration_type)
|
|
validate.ValidateEnabledGcpApis()
|
|
|
|
|
|
def ValidateCreateParameters(integration_type, parameters, service):
|
|
"""Validates given params conform to what's expected from the integration."""
|
|
types_utils.CheckValidIntegrationType(integration_type)
|
|
validate = validator.GetIntegrationValidator(integration_type)
|
|
validate.ValidateCreateParameters(parameters, service)
|
|
|
|
|
|
def ValidateUpdateParameters(integration_type, parameters):
|
|
"""Validate params for update commands for a given integration."""
|
|
types_utils.CheckValidIntegrationType(integration_type)
|
|
validate = validator.GetIntegrationValidator(integration_type)
|
|
validate.ValidateUpdateParameters(parameters)
|
|
|
|
|
|
def ListIntegrationsOfService(parser):
|
|
"""Filter by Service Name."""
|
|
parser.add_argument(
|
|
'--service',
|
|
type=str,
|
|
help='Filter Integrations by Name of Cloud Run service.')
|
|
|
|
|
|
def ListIntegrationsOfType(parser):
|
|
"""Filter by Integration Type."""
|
|
parser.add_argument(
|
|
'--type', type=str, help='Filter Integrations by Type of Integration.')
|
|
|
|
|
|
def GetParameters(args) -> Dict[str, str]:
|
|
"""Validates all parameters and returns a dict of values."""
|
|
parameters = {}
|
|
if args.IsSpecified('parameters'):
|
|
parameters.update(args.parameters)
|
|
|
|
return parameters
|
|
|
|
|
|
def GetServiceAccount(args):
|
|
"""Decides the service account to use.
|
|
|
|
Service account is decided in the following order:
|
|
- service_account flag
|
|
- service_account gcloud config;
|
|
|
|
Args:
|
|
args: Namespace, the args namespace.
|
|
|
|
Returns:
|
|
A str representing service account.
|
|
"""
|
|
if getattr(args, 'service_account', None):
|
|
return args.service_account
|
|
if properties.VALUES.runapps.deployment_service_account.IsExplicitlySet():
|
|
return properties.VALUES.runapps.deployment_service_account.Get()
|