368 lines
12 KiB
Python
368 lines
12 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.
|
|
"""Flags for data-catalog commands."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
import argparse
|
|
|
|
from googlecloudsdk.calliope import arg_parsers
|
|
from googlecloudsdk.calliope.concepts import concepts
|
|
from googlecloudsdk.command_lib.util.apis import yaml_data
|
|
from googlecloudsdk.command_lib.util.concepts import concept_parsers
|
|
from googlecloudsdk.command_lib.util.concepts import presentation_specs
|
|
|
|
|
|
def AddPrivatecloudArgToParser(parser, positional=False):
|
|
"""Sets up an argument for the privatecloud resource."""
|
|
name = '--private-cloud'
|
|
if positional:
|
|
name = 'private_cloud'
|
|
privatecloud_data = yaml_data.ResourceYAMLData.FromPath(
|
|
'vmware.private_cloud'
|
|
)
|
|
resource_spec = concepts.ResourceSpec.FromYaml(privatecloud_data.GetData())
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name=name,
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='private_cloud.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddOperationArgToParser(parser):
|
|
"""Sets up an argument for the operation resource."""
|
|
operation_data = yaml_data.ResourceYAMLData.FromPath('vmware.operation')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(operation_data.GetData())
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='operation',
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='operation.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddSubnetArgToParser(parser):
|
|
"""Sets up an argument for the subnet resource."""
|
|
|
|
address_data = yaml_data.ResourceYAMLData.FromPath('vmware.subnet')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(address_data.GetData())
|
|
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='subnet',
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='subnet.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddClusterArgToParser(
|
|
parser, positional=False, hide_resource_argument_flags=False
|
|
):
|
|
"""Sets up an argument for the cluster resource."""
|
|
if positional:
|
|
name = 'cluster'
|
|
else:
|
|
name = '--cluster'
|
|
cluster_data = yaml_data.ResourceYAMLData.FromPath('vmware.cluster')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(cluster_data.GetData())
|
|
flag_name_overrides = None
|
|
|
|
if hide_resource_argument_flags:
|
|
flag_name_overrides = {'location': '', 'private-cloud': ''}
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name=name,
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='cluster.',
|
|
flag_name_overrides=flag_name_overrides,
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddExternalAddressArgToParser(parser):
|
|
"""Sets up an argument for the external address resource."""
|
|
|
|
address_data = yaml_data.ResourceYAMLData.FromPath('vmware.external_address')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(address_data.GetData())
|
|
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='external_address',
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='external_address.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddManagementDnsZoneBindingArgToParser(parser):
|
|
"""Sets up an argument for the management DNS zone binding resource."""
|
|
|
|
path = 'vmware.management_dns_zone_binding'
|
|
address_data = yaml_data.ResourceYAMLData.FromPath(path)
|
|
resource_spec = concepts.ResourceSpec.FromYaml(address_data.GetData())
|
|
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='management_dns_zone_binding',
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='management_dns_zone_binding.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddHcxActivationKeyArgToParser(parser):
|
|
"""Sets up an argument for the HCX activation key resource."""
|
|
hcx_activation_key_data = yaml_data.ResourceYAMLData.FromPath(
|
|
'vmware.hcx_activation_key'
|
|
)
|
|
resource_spec = concepts.ResourceSpec.FromYaml(
|
|
hcx_activation_key_data.GetData()
|
|
)
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='hcx_activation_key',
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='hcxactivationkey.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddLocationArgToParser(parser, regional=False, positional=False):
|
|
"""Parses location flag."""
|
|
location_data = yaml_data.ResourceYAMLData.FromPath('vmware.location')
|
|
if regional:
|
|
location_data = yaml_data.ResourceYAMLData.FromPath(
|
|
'vmware.regional_location'
|
|
)
|
|
resource_spec = concepts.ResourceSpec.FromYaml(location_data.GetData())
|
|
name = '--location'
|
|
if positional:
|
|
name = 'location'
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name=name,
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='location.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddNodeTypeArgToParser(parser, positional=False):
|
|
"""Parses node type flag."""
|
|
|
|
if positional:
|
|
name = 'node_type'
|
|
flag_name_overrides = None
|
|
else:
|
|
name = '--node-type'
|
|
flag_name_overrides = {'location': ''}
|
|
|
|
location_data = yaml_data.ResourceYAMLData.FromPath('vmware.node_type')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(location_data.GetData())
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name=name,
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='node_type.',
|
|
flag_name_overrides=flag_name_overrides,
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddProjectArgToParser(parser, positional=False):
|
|
"""Parses project flag."""
|
|
name = '--project'
|
|
if positional:
|
|
name = 'project'
|
|
|
|
project_data = yaml_data.ResourceYAMLData.FromPath('vmware.project')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(project_data.GetData())
|
|
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name=name,
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='project.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddPrivateConnectionToParser(parser, positional=False):
|
|
"""Sets up an argument for the Private Connection resource."""
|
|
name = '--private-connection'
|
|
if positional:
|
|
name = 'private_connection'
|
|
private_connection_data = yaml_data.ResourceYAMLData.FromPath(
|
|
'vmware.private_connection'
|
|
)
|
|
resource_spec = concepts.ResourceSpec.FromYaml(
|
|
private_connection_data.GetData()
|
|
)
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name=name,
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='private_connection.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddLoggingServerArgToParser(parser):
|
|
"""Sets up an argument for the Logging Server resource."""
|
|
|
|
logging_server_data = yaml_data.ResourceYAMLData.FromPath(
|
|
'vmware.logging_server'
|
|
)
|
|
resource_spec = concepts.ResourceSpec.FromYaml(logging_server_data.GetData())
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='logging_server',
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='logging_server.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddIdentitySourceArgToParser(parser):
|
|
"""Sets up an argument for the Identity Source resource."""
|
|
|
|
resource_data = yaml_data.ResourceYAMLData.FromPath('vmware.identity_source')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(resource_data.GetData())
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='identity_source',
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='identity_source.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddNodeArgToParser(parser):
|
|
"""Sets up an argument for the node resource."""
|
|
|
|
node_data = yaml_data.ResourceYAMLData.FromPath('vmware.node')
|
|
resource_spec = concepts.ResourceSpec.FromYaml(node_data.GetData())
|
|
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='node', concept_spec=resource_spec, required=True, group_help='node.'
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddAutoscalingSettingsFlagsToParser(parser):
|
|
"""Sets up autoscaling settings flags.
|
|
|
|
There are two mutually exclusive options to pass the autoscaling settings:
|
|
through command line arguments or as a yaml file.
|
|
|
|
Args:
|
|
parser: arg_parser instance that will have the flags added.
|
|
"""
|
|
autoscaling_settings_group = parser.add_mutually_exclusive_group(
|
|
required=False, hidden=True
|
|
)
|
|
inlined_autoscaling_settings_group = autoscaling_settings_group.add_group()
|
|
inlined_autoscaling_settings_group.add_argument(
|
|
'--autoscaling-min-cluster-node-count',
|
|
type=int,
|
|
help='Minimum number of nodes in the cluster',
|
|
)
|
|
inlined_autoscaling_settings_group.add_argument(
|
|
'--autoscaling-max-cluster-node-count',
|
|
type=int,
|
|
help='Maximum number of nodes in the cluster',
|
|
)
|
|
inlined_autoscaling_settings_group.add_argument(
|
|
'--autoscaling-cool-down-period',
|
|
type=str,
|
|
help=(
|
|
'Cool down period (in minutes) between consecutive cluster'
|
|
' expansions/contractions'
|
|
),
|
|
)
|
|
inlined_autoscaling_settings_group.add_argument(
|
|
'--autoscaling-policy',
|
|
type=arg_parsers.ArgDict(
|
|
spec={
|
|
'name': str,
|
|
'node-type-id': str,
|
|
'scale-out-size': int,
|
|
'min-node-count': int,
|
|
'max-node-count': int,
|
|
'cpu-thresholds-scale-in': int,
|
|
'cpu-thresholds-scale-out': int,
|
|
'granted-memory-thresholds-scale-in': int,
|
|
'granted-memory-thresholds-scale-out': int,
|
|
'consumed-memory-thresholds-scale-in': int,
|
|
'consumed-memory-thresholds-scale-out': int,
|
|
'storage-thresholds-scale-in': int,
|
|
'storage-thresholds-scale-out': int,
|
|
},
|
|
required_keys=['name', 'node-type-id', 'scale-out-size'],
|
|
),
|
|
action='append',
|
|
default=list(),
|
|
help='Autoscaling policy to be applied to the cluster',
|
|
)
|
|
autoscaling_settings_group.add_argument(
|
|
'--autoscaling-settings-from-file',
|
|
type=arg_parsers.YAMLFileContents(),
|
|
help=(
|
|
'A YAML file containing the autoscaling settings to be applied to'
|
|
' the cluster'
|
|
),
|
|
)
|
|
|
|
|
|
def AddDatastoreArgToParser(parser, positional=False):
|
|
"""Sets up an argument for the datastore resource."""
|
|
name = '--datastore'
|
|
if positional:
|
|
name = 'datastore'
|
|
datastore_data = yaml_data.ResourceYAMLData.FromPath(
|
|
'vmware.datastore'
|
|
)
|
|
resource_spec = concepts.ResourceSpec.FromYaml(datastore_data.GetData())
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name=name,
|
|
concept_spec=resource_spec,
|
|
required=True,
|
|
group_help='datastore.',
|
|
)
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|
|
|
|
|
|
def AddUpgradeArgToParser(
|
|
parser: argparse.ArgumentParser,
|
|
) -> None:
|
|
"""Sets up an argument for the upgrade resource."""
|
|
upgrade_data = yaml_data.ResourceYAMLData.FromPath('vmware.upgrade')
|
|
|
|
presentation_spec = presentation_specs.ResourcePresentationSpec(
|
|
name='upgrade',
|
|
concept_spec=concepts.ResourceSpec.FromYaml(upgrade_data.GetData()),
|
|
required=True,
|
|
group_help='upgrade.',
|
|
flag_name_overrides=None,
|
|
)
|
|
|
|
return concept_parsers.ConceptParser([presentation_spec]).AddToParser(parser)
|