feat: Add new gcloud commands, API clients, and third-party libraries across various services.

This commit is contained in:
2026-01-01 20:26:35 +01:00
parent 5e23cbece0
commit a19e592eb7
25221 changed files with 8324611 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*- #
# Copyright 2019 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.
"""Commands for creating, reading, and manipulating VPN Gateways."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.UniverseCompatible
@base.ReleaseTracks(base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA,
base.ReleaseTrack.GA)
class ExternalVpnGateways(base.Group):
"""List, create, delete and update External VPN Gateways."""
category = base.NETWORKING_CATEGORY
# Placeholder to indicate that a detailed_help field exists and should
# be set outside the class definition.
detailed_help = None
ExternalVpnGateways.detailed_help = {
'DESCRIPTION': """
Read and manipulate external VPN gateways for Cloud VPN.
For more information about external VPN gateways, see the
[external VPN Gateways documentation](https://cloud.google.com/network-connectivity/docs/vpn/concepts/key-terms#external-vpn-gateway-definition).
See also: [External VPN Gateways API](https://cloud.google.com/compute/docs/reference/rest/v1/externalVpnGateways).
""",
}

View File

@@ -0,0 +1,143 @@
# -*- coding: utf-8 -*- #
# Copyright 2019 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.
"""Command to create a new external VPN gateway."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.compute import base_classes
from googlecloudsdk.api_lib.compute.external_vpn_gateways import external_vpn_gateways_utils
from googlecloudsdk.calliope import arg_parsers
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.compute import resource_manager_tags_utils
from googlecloudsdk.command_lib.compute.external_vpn_gateways import flags
import six
@base.ReleaseTracks(base.ReleaseTrack.GA)
@base.UniverseCompatible
class Create(base.CreateCommand):
"""Create a new Compute Engine external VPN gateway.
*{command}* creates a new external VPN gateway.
External VPN gateway is the on-premises VPN gateway or another cloud
provider's VPN gateway that connects to your Google Cloud VPN gateway.
To create a highly available VPN from Google Cloud to your on-premises side
or another Cloud provider's VPN gateway, you must create an external VPN
gateway resource in Google Cloud, which provides the information to
Google Cloud about your external VPN gateway.
"""
detailed_help = {'EXAMPLES': """\
To create an external VPN gateway, run:
$ {command} my-external-gateway --interfaces=0=8.9.9.9"""}
_support_tagging_at_creation = False
@classmethod
def Args(cls, parser):
"""Set up arguments for this command."""
parser.display_info.AddFormat(flags.DEFAULT_LIST_FORMAT)
cls.EXTERNAL_VPN_GATEWAY_ARG = flags.ExternalVpnGatewayArgument()
cls.EXTERNAL_VPN_GATEWAY_ARG.AddArgument(parser, operation_type='create')
if cls._support_tagging_at_creation:
parser.add_argument(
'--resource-manager-tags',
type=arg_parsers.ArgDict(),
metavar='KEY=VALUE',
help="""\
A comma-separated list of Resource Manager tags to apply to the external VPN gateway.
""",
)
flags.AddCreateExternalVpnGatewayArgs(parser)
parser.display_info.AddCacheUpdater(flags.ExternalVpnGatewaysCompleter)
def _Run(self, args):
"""Issues the request to create a new external VPN gateway."""
holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
helper = external_vpn_gateways_utils.ExternalVpnGatewayHelper(holder)
ref = self.EXTERNAL_VPN_GATEWAY_ARG.ResolveAsResource(
args, holder.resources
)
messages = holder.client.messages
interfaces = flags.ParseInterfaces(args.interfaces, messages)
redundancy_type = flags.InferAndGetRedundancyType(args.interfaces, messages)
if (
self._support_tagging_at_creation
and args.resource_manager_tags is not None
):
params = self._CreateExternalVpnGatewayParams(
messages, args.resource_manager_tags
)
else:
params = None
external_vpn_gateway_to_insert = helper.GetExternalVpnGatewayForInsert(
name=ref.Name(),
description=args.description,
interfaces=interfaces,
redundancy_type=redundancy_type,
params=params,
support_tagging_at_creation=self._support_tagging_at_creation,
)
operation_ref = helper.Create(ref, external_vpn_gateway_to_insert)
ret = helper.WaitForOperation(
ref, operation_ref, 'Creating external VPN gateway'
)
return ret
def _CreateExternalVpnGatewayParams(self, messages, resource_manager_tags):
resource_manager_tags_map = (
resource_manager_tags_utils.GetResourceManagerTags(
resource_manager_tags
)
)
params = messages.ExternalVpnGatewayParams
additional_properties = [
params.ResourceManagerTagsValue.AdditionalProperty(key=key, value=value)
for key, value in sorted(six.iteritems(resource_manager_tags_map))
]
return params(
resourceManagerTags=params.ResourceManagerTagsValue(
additionalProperties=additional_properties
)
)
def Run(self, args):
"""Issues API requests to construct external VPN gateways."""
return self._Run(args)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class CreateBeta(Create):
"""Create a new Compute Engine external VPN gateway.
*{command} creates a new External Vpn Gateway
"""
_support_tagging_at_creation = False
@base.ReleaseTracks(base.ReleaseTrack.ALPHA)
class CreateAlpha(Create):
"""Create a new Compute Engine external VPN gateway.
*{command}* creates a new external VPN gateway.
"""
_support_tagging_at_creation = True

View File

@@ -0,0 +1,78 @@
# -*- coding: utf-8 -*- #
# Copyright 2019 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.
"""Command to delete External VPN Gateway."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.compute import base_classes
from googlecloudsdk.api_lib.compute import utils
from googlecloudsdk.api_lib.compute.external_vpn_gateways import external_vpn_gateways_utils
from googlecloudsdk.api_lib.compute.operations import poller
from googlecloudsdk.api_lib.util import waiter
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.compute.external_vpn_gateways import flags
_EXTERNAL_VPN_GATEWAY_ARG = flags.ExternalVpnGatewayArgument(plural=True)
class DeleteBatchPoller(poller.BatchPoller):
def GetResult(self, operation_batch):
# For delete operations, once the operation status is DONE, there is
# nothing further to fetch.
return
class Delete(base.DeleteCommand):
"""Delete a Compute Engine external VPN gateway.
*{command}* is used to delete all data associated with a Compute Engine
external VPN gateway in a project.
An external VPN gateway provides the information to Google Cloud
about your on-premises side or another Cloud provider's VPN gateway.
"""
detailed_help = {
'EXAMPLES':
"""\
To delete an external VPN gateway, run:
$ {command} my-external-gateway"""
}
@staticmethod
def Args(parser):
_EXTERNAL_VPN_GATEWAY_ARG.AddArgument(parser, operation_type='delete')
parser.display_info.AddCacheUpdater(flags.ExternalVpnGatewaysCompleter)
def Run(self, args):
"""Issues the request to delete an external VPN gateway."""
holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
helper = external_vpn_gateways_utils.ExternalVpnGatewayHelper(holder)
client = holder.client.apitools_client
refs = _EXTERNAL_VPN_GATEWAY_ARG.ResolveAsResource(args, holder.resources)
utils.PromptForDeletion(refs)
operation_refs = [helper.Delete(ref) for ref in refs]
wait_message = 'Deleting external VPN {}'.format(
('gateways' if (len(operation_refs) > 1) else 'gateway'))
operation_poller = DeleteBatchPoller(holder.client,
client.externalVpnGateways)
return waiter.WaitFor(operation_poller,
poller.OperationBatch(operation_refs), wait_message)

View File

@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*- #
# Copyright 2019 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.
"""Command to describe External VPN gateways."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.compute import base_classes
from googlecloudsdk.api_lib.compute.external_vpn_gateways import external_vpn_gateways_utils
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.compute import flags as compute_flags
from googlecloudsdk.command_lib.compute.external_vpn_gateways import flags
_EXTERNAL_VPN_GATEWAY_ARG = flags.ExternalVpnGatewayArgument()
class Describe(base.DescribeCommand):
"""Describe a Compute Engine external VPN gateway.
*{command}* is used to display all data associated with a Compute Engine
external VPN gateway in a project.
An external VPN gateway provides the information to Google Cloud
about your on-premises side or another Cloud provider's VPN gateway.
"""
detailed_help = {
'EXAMPLES':
"""\
To describe an external VPN gateway, run:
$ {command} my-external-gateway"""
}
@staticmethod
def Args(parser):
_EXTERNAL_VPN_GATEWAY_ARG.AddArgument(parser, operation_type='describe')
def Run(self, args):
"""Issues the request to describe an External VPN gateway."""
holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
helper = external_vpn_gateways_utils.ExternalVpnGatewayHelper(holder)
ref = _EXTERNAL_VPN_GATEWAY_ARG.ResolveAsResource(
args,
holder.resources,
scope_lister=compute_flags.GetDefaultScopeLister(holder.client))
return helper.Describe(ref)

View File

@@ -0,0 +1,63 @@
# -*- coding: utf-8 -*- #
# Copyright 2019 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.
"""Command to list the External VPN Gateways."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from apitools.base.py import list_pager
from googlecloudsdk.api_lib.compute import base_classes
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.compute.external_vpn_gateways import flags
from googlecloudsdk.core import properties
class List(base.ListCommand):
"""List Compute Engine external VPN gateways."""
detailed_help = {
'EXAMPLES':
"""\
To list all external VPN gateways, run:
$ {command}"""
}
@staticmethod
def Args(parser):
parser.display_info.AddFormat(flags.DEFAULT_LIST_FORMAT)
def Run(self, args):
"""Issues the request to list all external VPN gateways."""
holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
client = holder.client.apitools_client
messages = client.MESSAGES_MODULE
project = properties.VALUES.core.project.Get(required=True)
request = messages.ComputeExternalVpnGatewaysListRequest(
project=project, filter=args.filter)
return list_pager.YieldFromList(
client.externalVpnGateways,
request,
field='items',
limit=args.limit,
batch_size=None)
List.detailed_help = base_classes.GetGlobalListerHelp('external VPN gateways')

View File

@@ -0,0 +1,114 @@
# -*- coding: utf-8 -*- #
# Copyright 2019 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.
"""Command to update labels for external VPN gateway."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.compute import base_classes
from googlecloudsdk.api_lib.compute.external_vpn_gateways import external_vpn_gateways_utils
from googlecloudsdk.calliope import base
from googlecloudsdk.calliope import exceptions as calliope_exceptions
from googlecloudsdk.command_lib.compute import flags as compute_flags
from googlecloudsdk.command_lib.compute.external_vpn_gateways import flags as external_vpn_gateway_flag
from googlecloudsdk.command_lib.util.args import labels_util
_EXTERNAL_VPN_GATEWAY_ARG = (
external_vpn_gateway_flag.ExternalVpnGatewayArgument())
@base.ReleaseTracks(base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA,
base.ReleaseTrack.GA)
class Update(base.UpdateCommand):
r"""Update a Compute Engine external VPN gateway.
*{command}* updates labels for a Compute Engine external VPN gateway.
For example:
$ {command} example-gateway \
--update-labels=k0=value1,k1=value2 --remove-labels=k3
will add/update labels ``k0'' and ``k1'' and remove labels with key ``k3''.
Labels can be used to identify the External VPN gateway and to filter them
as in
$ {parent_command} list --filter='labels.k1:value2'
To list existing labels
$ {parent_command} describe example-gateway --format="default(labels)"
"""
detailed_help = {
'EXAMPLES':
"""\
To update labels for an external VPN gateway, run:
$ {command} my-external-gateway \
--update-labels=k0=value1,k1=value2"""
}
@classmethod
def Args(cls, parser):
"""Adds arguments to the supplied parser.
Args:
parser: The argparse parser to add arguments to.
"""
_EXTERNAL_VPN_GATEWAY_ARG.AddArgument(parser, operation_type='update')
labels_util.AddUpdateLabelsFlags(parser)
def Run(self, args):
"""Issues API requests to update a External VPN gateway.
Args:
args: argparse.Namespace, The arguments received by this command.
Returns:
[protorpc.messages.Message], A list of responses returned
by the compute API.
"""
holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
messages = holder.client.messages
helper = external_vpn_gateways_utils.ExternalVpnGatewayHelper(holder)
external_gateway_ref = _EXTERNAL_VPN_GATEWAY_ARG.ResolveAsResource(
args,
holder.resources,
scope_lister=compute_flags.GetDefaultScopeLister(holder.client))
labels_diff = labels_util.Diff.FromUpdateArgs(args)
if not labels_diff.MayHaveUpdates():
raise calliope_exceptions.RequiredArgumentException(
'LABELS', 'At least one of --update-labels or '
'--remove-labels must be specified.')
external_vpn_gateway = helper.Describe(external_gateway_ref)
labels_update = labels_diff.Apply(
messages.GlobalSetLabelsRequest.LabelsValue,
external_vpn_gateway.labels)
if not labels_update.needs_update:
return external_vpn_gateway
operation_ref = helper.SetLabels(external_gateway_ref,
external_vpn_gateway.labelFingerprint,
labels_update.labels)
return helper.WaitForOperation(
external_gateway_ref, operation_ref,
'Updating labels of external VPN gateway [{0}]'.format(
external_gateway_ref.Name()))