File: //snap/google-cloud-cli/current/lib/googlecloudsdk/command_lib/looker/flags.py
# -*- coding: utf-8 -*- #
# Copyright 2022 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.
"""Common flags for some of the Looker commands.
Flags are specified with functions that take in a single argument, the parser,
and add the newly constructed flag to that parser.
Example:
def AddFlagName(parser):
parser.add_argument(
'--flag-name',
... // Other flag details.
)
"""
from googlecloudsdk.calliope.concepts import concepts
from googlecloudsdk.command_lib.util import completers
from googlecloudsdk.command_lib.util.concepts import concept_parsers
from googlecloudsdk.command_lib.util.concepts import presentation_specs
class InstanceCompleter(completers.ListCommandCompleter):
def __init__(self, **kwargs):
super(InstanceCompleter, self).__init__(
collection='looker.projects.locations.instances',
list_command='looker instances list',
**kwargs
)
def AddInstance(parser):
parser.add_argument(
'--instance',
required=True,
completer=InstanceCompleter,
help=""" \
ID of the instance or fully qualified identifier for the instance.
To set the instance attribute:
- provide the argument --instance on the command line.
""",
)
def AddInstanceConcept(parser, instance_concept_str):
concept_parsers.ConceptParser(
[GetInstancePresentationSpec(instance_concept_str)]
).AddToParser(parser)
def AddKmsKeyGroup(parser):
"""Register flags for KMS Key."""
key_group = parser.add_group(
required=True,
help=(
'Key resource - The Cloud KMS (Key Management Service) cryptokey'
' that will be used to protect the Looker instance and backups. The'
" 'Looker Service Agent' service account must hold role 'Cloud"
" KMS CryptoKey Encrypter'. The arguments in this group"
' can be used to specify the attributes of this resource.'
),
)
key_group.add_argument(
'--kms-key',
metavar='KMS_KEY',
required=True,
help='Fully qualified identifier (name) for the key.',
)
def AddTargetGcsUriGroup(parser):
"""Register flags for Target GCS URI."""
target_group = parser.add_group(
mutex=True,
required=True,
help=(
'Export Destination - The path and storage where the export will be'
' stored.'
),
)
target_group.add_argument(
'--target-gcs-uri',
metavar='TARGET_GCS_URI',
help=(
'The path to the folder in Google Cloud Storage where the export will'
' be stored. The URI is in the form `gs://bucketName/folderName`. The'
' Looker Service Agent should have the role Storage Object Creator.'
),
)
def AddExportInstanceArgs(parser):
"""Register flags Export Instance command."""
AddInstanceConcept(
parser,
(
'Arguments and flags that specify the Looker instance you want to'
' export.'
),
)
AddTargetGcsUriGroup(parser)
AddKmsKeyGroup(parser)
def AddImportInstanceArgs(parser):
"""Register flags Import Instance command."""
AddInstanceConcept(
parser,
(
'Arguments and flags that specify the Looker instance you want to'
' import.'
),
)
source_group = parser.add_group(
mutex=True,
required=True,
help=(
'Import Destination - The path and storage where the import will be'
' retrieved from.'
),
)
source_group.add_argument(
'--source-gcs-uri',
metavar='SOURCE_GCS_URI',
help=(
'The path to the folder in Google Cloud Storage where the import'
' will be retrieved from. The URI is in the form'
' `gs://bucketName/folderName`.'
),
)
def GetRegionAttributeConfig():
return concepts.ResourceParameterAttributeConfig(
'region', 'The region of the {resource}.'
)
def GetInstanceAttributeConfig():
return concepts.ResourceParameterAttributeConfig(
'instance', 'The instance of the {resource}.'
)
def GetInstanceResourceSpec():
return concepts.ResourceSpec(
'looker.projects.locations.instances',
'instance',
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG,
locationsId=GetRegionAttributeConfig(),
instancesId=GetInstanceAttributeConfig(),
)
def GetInstancePresentationSpec(group_help):
return presentation_specs.ResourcePresentationSpec(
'instance', GetInstanceResourceSpec(), group_help, required=True
)