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,51 @@
# -*- 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.
"""The command group for cloud dataproc sessions."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class Sessions(base.Group):
"""Create and manage Dataproc sessions.
Create and manage Dataproc sessions.
Create a session:
$ {command} create
List all sessions:
$ {command} list
List session details:
$ {command} describe SESSION_ID
Delete a session:
$ {command} delete SESSION_ID
Terminate an active session:
$ {command} terminate SESSION_ID
"""

View File

@@ -0,0 +1,49 @@
# -*- 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.
"""The command group for cloud dataproc sessions create."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.dataproc import dataproc as dp
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.dataproc import flags
from googlecloudsdk.command_lib.dataproc.sessions import (
sessions_create_request_factory)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class Create(base.Group):
"""Create a Dataproc session."""
detailed_help = {
'DESCRIPTION':
"""\
Create various sessions, such as Spark.
""",
'EXAMPLES':
"""\
To create a Spark session, run:
$ {command} spark my-session --location='us-central1'
"""
}
@staticmethod
def Args(parser):
flags.AddAsync(parser)
sessions_create_request_factory.AddArguments(parser)

View File

@@ -0,0 +1,81 @@
# -*- 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.
"""Create a Spark session."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
import sys
from googlecloudsdk.api_lib.dataproc import dataproc as dp
from googlecloudsdk.api_lib.dataproc import util
from googlecloudsdk.api_lib.dataproc.poller import session_poller
from googlecloudsdk.api_lib.util import waiter
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.dataproc import flags
from googlecloudsdk.command_lib.dataproc.sessions import (
sessions_create_request_factory)
from googlecloudsdk.core import log
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class Spark(base.Command):
"""Create a Spark session."""
detailed_help = {
'DESCRIPTION':
"""\
Create a Spark session.
""",
'EXAMPLES':
"""\
To create a Spark session, to:
$ {command} my-session --location=us-central1
"""
}
@staticmethod
def Args(parser):
flags.AddSessionResourceArg(parser, 'create', dp.Dataproc().api_version)
def Run(self, args):
dataproc = dp.Dataproc()
request = sessions_create_request_factory.SessionsCreateRequestFactory(
dataproc).GetRequest(args)
session_op = dataproc.client.projects_locations_sessions.Create(request)
log.status.Print('Waiting for session creation operation...')
metadata = util.ParseOperationJsonMetadata(
session_op.metadata, dataproc.messages.SessionOperationMetadata)
for warning in metadata.warnings:
log.warning(warning)
if not args.async_:
poller = session_poller.SessionPoller(dataproc)
waiter.WaitFor(
poller,
'{}/sessions/{}'.format(request.parent, request.sessionId),
max_wait_ms=sys.maxsize,
sleep_ms=5000,
wait_ceiling_ms=5000,
exponential_sleep_multiplier=1.,
custom_tracker=None,
tracker_update_func=poller.TrackerUpdateFunction)
log.status.Print('Session [{}] is created.'.format(request.sessionId))
return session_op

View File

@@ -0,0 +1,77 @@
# -*- 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.
"""Sessions delete command."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.dataproc import dataproc as dp
from googlecloudsdk.api_lib.dataproc import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.dataproc import flags
from googlecloudsdk.core import log
from googlecloudsdk.core.console import console_io
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class Delete(base.Command):
"""Delete a session."""
detailed_help = {
'EXAMPLES':
"""\
To delete a "my-session" session in the "us-central1" location, run:
$ {command} my-session --location=us-central1
"""
}
@staticmethod
def Args(parser):
base.ASYNC_FLAG.AddToParser(parser)
flags.AddTimeoutFlag(parser)
dataproc = dp.Dataproc()
flags.AddSessionResourceArg(parser, 'delete', dataproc.api_version)
def Run(self, args):
dataproc = dp.Dataproc()
session_id = args.CONCEPTS.session.Parse()
console_io.PromptContinue(
message="The session '{0}' will be deleted.".format(
session_id.Name()),
cancel_on_no=True,
cancel_string='Deletion canceled by user.')
request = dataproc.messages.DataprocProjectsLocationsSessionsDeleteRequest(
name=session_id.RelativeName())
operation = dataproc.client.projects_locations_sessions.Delete(request)
if args.async_:
log.status.write("Deleting session '{0}'".format(
session_id.Name()))
return operation
operation = util.WaitForOperation(
dataproc,
operation,
message="Waiting for session '{0}' to delete.".format(
session_id.Name()),
timeout_s=args.timeout)
log.DeletedResource(session_id.RelativeName())
return operation

View File

@@ -0,0 +1,52 @@
# -*- 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.
"""Describe session command."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.dataproc import dataproc as dp
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.dataproc import flags
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class Describe(base.DescribeCommand):
"""Describe a session."""
detailed_help = {
'EXAMPLES':
"""\
To describe a session, run:
$ {command} EXAMPLE-SESSION --location=us-central1
"""
}
@staticmethod
def Args(parser):
dataproc = dp.Dataproc()
flags.AddSessionResourceArg(parser, 'describe', dataproc.api_version)
def Run(self, args):
dataproc = dp.Dataproc()
messages = dataproc.messages
session_id = args.CONCEPTS.session.Parse()
request = messages.DataprocProjectsLocationsSessionsGetRequest(
name=session_id.RelativeName())
return dataproc.client.projects_locations_sessions.Get(request)

View File

@@ -0,0 +1,105 @@
# -*- 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.
"""List session command."""
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.dataproc import constants
from googlecloudsdk.api_lib.dataproc import dataproc as dp
from googlecloudsdk.api_lib.dataproc import display_helper
from googlecloudsdk.api_lib.dataproc import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.dataproc import flags
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class List(base.ListCommand):
"""List sessions in a project.
List sessions in a project. Page-size sets the maximum number of sessions
returned per page, and Page-token retrieves subsequent results.
## EXAMPLES
List sessions in the "us-central1" location:
$ {command} --location="us-central1"
"""
@staticmethod
def Args(parser):
base.URI_FLAG.RemoveFromParser(parser)
base.PAGE_SIZE_FLAG.SetDefault(parser, constants.DEFAULT_PAGE_SIZE)
# TODO(b/207032388): Use built-in filter arg after it is supported by
# backend.
# Filter is not supported yet.
base.FILTER_FLAG.RemoveFromParser(parser)
# Temporarily add a fake hidden implementation so that no parsing logic
# needs to be changed.
parser.add_argument(
'--filter',
hidden=True,
metavar='EXPRESSION',
require_coverage_in_tests=False,
help="""\
Apply a Boolean filter EXPRESSION to each resource item to be listed
(the '=' equality operator is the only supported operator).
If the expression evaluates true for an item, the item is listed.
This flag interacts with other flags, which are applied in the
following order: *--flatten*, *--sort-by*, *--filter*, *--limit*.
For more information, run 'gcloud topic filters'.""")
flags.AddLocationFlag(parser)
parser.display_info.AddFormat("""
table(
name.basename():label=SESSION_ID,
sessionType.yesno(no="-"):label=SESSION_TYPE,
state:label=STATUS
)
""")
def Run(self, args):
dataproc = dp.Dataproc(base.ReleaseTrack.GA)
request = List.GetRequest(dataproc.messages,
util.ParseProjectsLocationsForSession(dataproc),
args)
sessions = list_pager.YieldFromList(
dataproc.client.projects_locations_sessions,
request,
limit=args.limit,
field='sessions',
batch_size=args.page_size,
batch_size_attribute='pageSize')
return (display_helper.DisplayHelper(session) for session in sessions)
@staticmethod
def GetRequest(messages, resource, args):
# Remove args.filter to prevent post-filter behavior.
backend_filter = None
if args.filter:
backend_filter = args.filter
args.filter = None
return messages.DataprocProjectsLocationsSessionsListRequest(
filter=backend_filter,
pageSize=args.page_size,
parent=resource.RelativeName())

View File

@@ -0,0 +1,77 @@
# -*- 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.
"""Sessions terminate command."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.dataproc import dataproc as dp
from googlecloudsdk.api_lib.dataproc import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.dataproc import flags
from googlecloudsdk.core import log
from googlecloudsdk.core.console import console_io
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class Terminate(base.Command):
"""Terminate an active session."""
detailed_help = {
'EXAMPLES':
"""\
To terminate a session "my-session" in the "us-central1" location, run:
$ {command} my-session --location=us-central1
"""
}
@staticmethod
def Args(parser):
base.ASYNC_FLAG.AddToParser(parser)
flags.AddTimeoutFlag(parser)
dataproc = dp.Dataproc()
flags.AddSessionResourceArg(parser, 'terminate', dataproc.api_version)
def Run(self, args):
dataproc = dp.Dataproc()
session_id = args.CONCEPTS.session.Parse()
console_io.PromptContinue(
message="The session '{0}' will be terminated.".format(
session_id.Name()),
cancel_on_no=True,
cancel_string='Termination canceled by user.')
request = dataproc.messages.DataprocProjectsLocationsSessionsTerminateRequest(
name=session_id.RelativeName())
operation = dataproc.client.projects_locations_sessions.Terminate(request)
if args.async_:
log.status.write("Terminating session '{0}'".format(
session_id.Name()))
return operation
operation = util.WaitForOperation(
dataproc,
operation,
message="Waiting for session '{0}' to terminate.".format(
session_id.Name()),
timeout_s=args.timeout)
log.DeletedResource(session_id.RelativeName())
return operation