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,35 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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 the Cloud Datastream CLI."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.BETA, base.ReleaseTrack.GA)
class Datastream(base.Group):
"""Manage Cloud Datastream resources.
Commands for managing Cloud Datastream resources.
"""
category = base.DATABASES_CATEGORY
def Filter(self, context, args):
del context, args

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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.
"""Connection profiles command group for Datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.BETA, base.ReleaseTrack.GA)
class ConnectionProfiles(base.Group):
"""Manage Datastream connection profiles.
Commands for managing Datastream connection profiles.
"""

View File

@@ -0,0 +1,201 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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 connection profiles for a datastream."""
from googlecloudsdk.api_lib.datastream import connection_profiles
from googlecloudsdk.api_lib.datastream import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import flags
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.connection_profiles import flags as cp_flags
from googlecloudsdk.core.console import console_io
DESCRIPTION = ('Create a Datastream connection profile')
EXAMPLES = """\
To create a connection profile for Oracle:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=oracle --oracle-password=fakepassword --oracle-username=fakeuser --display-name=my-profile --oracle-hostname=35.188.150.50 --oracle-port=1521 --database-service=ORCL --static-ip-connectivity
To create a connection profile for MySQL:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=mysql --mysql-password=fakepassword --mysql-username=fakeuser --display-name=my-profile --mysql-hostname=35.188.150.50 --mysql-port=3306 --static-ip-connectivity
To create a connection profile for PostgreSQL:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=postgresql --postgresql-password=fakepassword --postgresql-username=fakeuser --display-name=my-profile --postgresql-hostname=35.188.150.50 --postgresql-port=5432 --postgresql-database=db --static-ip-connectivity
To create a connection profile for SQL Server:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=sqlserver --sqlserver-password=fakepassword --sqlserver-username=fakeuser --display-name=my-profile --sqlserver-hostname=35.188.150.50 --sqlserver-port=1433 --sqlserver-database=db --static-ip-connectivity
To create a connection profile for Salesforce using Username, Password and Security Token:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=salesforce --salesforce-password=fakepassword --salesforce-username=fakeuser --salesforce-security-token=fakesecuritytoken --display-name=my-profile --salesforce-hostname=35.188.150.50 --salesforce-port=1433 --salesforce-database=db --static-ip-connectivity
To create a connection profile for Salesforce using OAuth:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=salesforce --salesforce-client-secret=fakesecret --salesforce-client-id=fake-client-id --display-name=my-profile --salesforce-domain=fakecompany.my.salesforce.com --static-ip-connectivity
To create a connection profile for Google Cloud Storage:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=google-cloud-storage --bucket=fake-bucket --root-path=/root/path --display-name=my-profile
To create a connection profile for BigQuery:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=bigquery --display-name=my-profile
To create a connection profile for MongoDB:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=mongodb --mongodb-password=fakepassword --mongodb-username=fakeuser --display-name=my-profile --mongodb-host-addresses=35.188.150.50:27017
"""
EXAMPLES_BETA = """\
To create a connection profile for Oracle:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=oracle --oracle-password=fakepassword --oracle-username=fakeuser --display-name=my-profile --oracle-hostname=35.188.150.50 --oracle-port=1521 --database-service=ORCL --static-ip-connectivity
To create a connection profile for MySQL:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=mysql --mysql-password=fakepassword --mysql-username=fakeuser --display-name=my-profile --mysql-hostname=35.188.150.50 --mysql-port=3306 --static-ip-connectivity
To create a connection profile for Google Cloud Storage:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=google-cloud-storage --bucket-name=fake-bucket --root-path=/root/path --display-name=my-profile --no-connectivity
"""
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Create(base.Command):
"""Create a Datastream connection profile."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def CommonArgs(parser, release_track):
"""Common arguments for all release tracks.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
release_track: Some arguments are added based on the command release
track.
"""
resource_args.AddConnectionProfileResourceArg(parser, 'to create',
release_track)
cp_flags.AddTypeFlag(parser)
cp_flags.AddDisplayNameFlag(parser)
if release_track == base.ReleaseTrack.GA:
cp_flags.AddValidationGroup(parser, 'Create')
profile_flags = parser.add_group(mutex=True)
cp_flags.AddMysqlProfileGroup(profile_flags)
cp_flags.AddOracleProfileGroup(profile_flags)
cp_flags.AddPostgresqlProfileGroup(profile_flags)
cp_flags.AddSqlServerProfileGroup(profile_flags)
cp_flags.AddSalesforceProfileGroup(profile_flags)
cp_flags.AddGcsProfileGroup(profile_flags, release_track)
cp_flags.AddMongodbProfileGroup(profile_flags)
flags.AddLabelsCreateFlags(parser)
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Create.CommonArgs(parser, base.ReleaseTrack.GA)
def Run(self, args):
"""Create a Datastream connection profile.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the operations resource describing the create
operation if the create was successful.
"""
connection_profile_ref = args.CONCEPTS.connection_profile.Parse()
parent_ref = connection_profile_ref.Parent().RelativeName()
if args.oracle_prompt_for_password:
args.oracle_password = console_io.PromptPassword(
'Please Enter Password: ')
if args.mysql_prompt_for_password:
args.mysql_password = console_io.PromptPassword('Please Enter Password: ')
if args.postgresql_prompt_for_password:
args.postgresql_password = console_io.PromptPassword(
'Please Enter Password: ')
if args.sqlserver_prompt_for_password:
args.sqlserver_password = console_io.PromptPassword(
'Please Enter Password: '
)
if args.salesforce_prompt_for_password:
args.salesforce_password = console_io.PromptPassword(
'Please Enter Password: '
)
if args.salesforce_prompt_for_security_token:
args.salesforce_security_token = console_io.PromptPassword(
'Please Enter Security Token: '
)
if args.salesforce_prompt_for_oauth2_client_secret:
args.salesforce_oauth2_client_secret = console_io.PromptPassword(
'Please Enter OAuth 2.0 Client Secret: '
)
if args.mongodb_prompt_for_password:
args.mongodb_password = console_io.PromptPassword(
'Please Enter Password: '
)
cp_type = (args.type).upper()
cp_client = connection_profiles.ConnectionProfilesClient()
result_operation = cp_client.Create(
parent_ref, connection_profile_ref.connectionProfilesId, cp_type,
self.ReleaseTrack(), args)
client = util.GetClientInstance()
messages = util.GetMessagesModule()
resource_parser = util.GetResourceParser()
operation_ref = resource_parser.Create(
'datastream.projects.locations.operations',
operationsId=result_operation.name,
projectsId=connection_profile_ref.projectsId,
locationsId=connection_profile_ref.locationsId)
return client.projects_locations_operations.Get(
messages.DatastreamProjectsLocationsOperationsGetRequest(
name=operation_ref.operationsId))
@base.Deprecate(
is_removed=False,
warning=('Datastream beta version is deprecated. Please use`gcloud '
'datastream connection-profiles create` command instead.'))
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class CreateBeta(Create):
"""Create a Datastream connection profile."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES_BETA}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Create.CommonArgs(parser, base.ReleaseTrack.BETA)

View File

@@ -0,0 +1,26 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream connection_profiles delete` instead.
help_text:
brief: |
Delete a Datastream connection profile.
description: |
Deletes a connection profile.
examples: |
To delete a connection profile:
$ {command} CONNECTION_PROFILE --location=us-central1
request:
collection: datastream.projects.locations.connectionProfiles
api_version: v1
arguments:
resource:
help_text: |
Connection profile resource - Connection profile to delete.
spec: !REF googlecloudsdk.command_lib.datastream.resources:connection_profile

View File

@@ -0,0 +1,23 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream connection_profiles describe` instead.
help_text:
brief: Show details about a Datastream connection profile.
description: Show details about a connection profile.
examples: |
To show details about a connection profile, run:
$ {command} my-connection-profile --location=us-central1
request:
collection: datastream.projects.locations.connectionProfiles
api_version: v1
arguments:
resource:
help_text: The connection profile you want to get the details of.
spec: !REF googlecloudsdk.command_lib.datastream.resources:connection_profile

View File

@@ -0,0 +1,97 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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 discover connection profiles for a datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.datastream import connection_profiles
from googlecloudsdk.api_lib.datastream import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.connection_profiles import flags as cp_flags
from googlecloudsdk.command_lib.util.concepts import concept_parsers
from googlecloudsdk.core import properties
DESCRIPTION = (
'Discover data objects accessible from a Datastream connection profile')
EXAMPLES = """\
To discover an existing connection profile:
$ {command} CONNECTION_PROFILE --location=us-central1 --connection-profile-name=some-cp --recursive=true
To discover a non-existing connection profile:
$ {command} CONNECTION_PROFILE --location=us-central1 --connection-profile-object-file=path/to/yaml/or/json/file
"""
class _Discover:
"""Base class for discovering Datastream connection profiles."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
"""
concept_parsers.ConceptParser.ForResource(
'--location',
resource_args.GetLocationResourceSpec(),
group_help='The location you want to list the connection profiles for.',
required=True).AddToParser(parser)
resource_args.AddConnectionProfileDiscoverResourceArg(parser)
cp_flags.AddDepthGroup(parser)
cp_flags.AddRdbmsGroup(parser)
cp_flags.AddHierarchyGroup(parser)
def Run(self, args):
"""Discover a Datastream connection profile.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the operations resource describing the discover
operation if the discover was successful.
"""
project = properties.VALUES.core.project.Get(required=True)
location = args.location
parent_ref = util.ParentRef(project, location)
cp_client = connection_profiles.ConnectionProfilesClient()
return cp_client.Discover(parent_ref, self.ReleaseTrack(), args)
@base.Deprecate(
is_removed=False,
warning=('Datastream beta version is deprecated. Please use`gcloud '
'datastream connection-profiles discover` command instead.')
)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class DiscoverBeta(_Discover, base.Command):
"""Discover a Datastream connection profile."""
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Discover(_Discover, base.Command):
"""Discover a Datastream connection profile."""

View File

@@ -0,0 +1,167 @@
# -*- 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.
"""Implementation of connection profile list command."""
from googlecloudsdk.api_lib.datastream import connection_profiles
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.util.concepts import concept_parsers
from googlecloudsdk.core import properties
def _GetUri(connection_profile_info):
"""Gets the resource URI for a connection profile."""
return connection_profiles.ConnectionProfilesClient().GetUri(
connection_profile_info.name)
class _ConnectionProfileInfo:
"""Container for connection profile data using in list display."""
def __init__(self, message, db_type):
self.display_name = message.displayName
self.name = message.name
self.type = db_type
self.create_time = message.createTime
class _List:
"""Base class for listing Datastream connection profiles."""
@classmethod
def Args(cls, parser):
"""Register flags for this command."""
concept_parsers.ConceptParser.ForResource(
"--location",
resource_args.GetLocationResourceSpec(),
group_help="The location you want to list the connection profiles for.",
required=True).AddToParser(parser)
parser.display_info.AddFormat("""
table(
display_name,
name:label=ID,
type,
create_time.date():label=CREATED
)
""")
def Run(self, args):
"""Runs the command.
Args:
args: All the arguments that were provided to this command invocation.
Returns:
An iterator over objects containing connection profile data.
"""
cp_client = connection_profiles.ConnectionProfilesClient()
project_id = properties.VALUES.core.project.Get(required=True)
profiles = cp_client.List(project_id, args)
return [
_ConnectionProfileInfo(profile, self._GetType(profile))
for profile in profiles
]
def _GetType(self, profile):
"""Gets DB type of a connection profile.
Args:
profile: A connection configuration type of a connection profile.
Returns:
A String representation of the provided profile DB type.
Default is None.
"""
raise NotImplementedError
@base.Deprecate(
is_removed=False,
warning=("Datastream beta version is deprecated. Please use`gcloud "
"datastream connection-profiles list` command instead.")
)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class ListBeta(_List, base.ListCommand):
"""List Datastream connection profiles.
List connection profiles.
## API REFERENCE
This command uses the datastream/v1 API. The full documentation
for this API can be found at: https://cloud.google.com/datastream/
## EXAMPLES
To list all connection profiles in a project and location 'us-central1',
run:
$ {command} --location=us-central1
"""
def _GetType(self, profile):
if profile.mysqlProfile:
return "MySQL"
elif profile.oracleProfile:
return "Oracle"
elif profile.gcsProfile:
return "Google Cloud Storage"
elif profile.sqlServerProfile:
return "SQL Server"
else:
return None
@base.ReleaseTracks(base.ReleaseTrack.GA)
class List(_List, base.ListCommand):
"""List Datastream connection profiles.
List connection profiles.
## API REFERENCE
This command uses the datastream/v1 API. The full documentation
for this API can be found at: https://cloud.google.com/datastream/
## EXAMPLES
To list all connection profiles in a project and location 'us-central1',
run:
$ {command} --location=us-central1
"""
def _GetType(self, profile):
if profile.mysqlProfile:
return "MySQL"
elif profile.oracleProfile:
return "Oracle"
elif profile.postgresqlProfile:
return "PostgreSQL"
elif profile.gcsProfile:
return "Google Cloud Storage"
elif profile.sqlServerProfile:
return "SQL Server"
elif profile.salesforceProfile:
return "Salesforce"
elif profile.bigqueryProfile:
return "BigQuery"
elif profile.mongodbProfile:
return "MongoDB"
else:
return None

View File

@@ -0,0 +1,197 @@
# -*- 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.
"""Command to update connection profiles for datastream."""
from googlecloudsdk.api_lib.datastream import connection_profiles
from googlecloudsdk.api_lib.datastream import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import flags
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.connection_profiles import flags as cp_flags
from googlecloudsdk.core.console import console_io
DESCRIPTION = ('Updates a Datastream connection profile')
EXAMPLES = """\
To update a connection profile for Oracle:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=oracle --oracle-password=fakepassword --oracle-username=fakeuser --display-name=my-profile --oracle-hostname=35.188.150.50 --oracle-port=1521 --database-service=ORCL --static-ip-connectivity
To update a connection profile for MySQL:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=mysql --mysql-password=fakepassword --mysql-username=fakeuser --display-name=my-profile --mysql-hostname=35.188.150.50 --mysql-port=3306 --static-ip-connectivity
To update a connection profile for PostgreSQL:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=postgresql --postgresql-password=fakepassword --postgresql-username=fakeuser --display-name=my-profile --postgresql-hostname=35.188.150.50 --postgresql-port=5432 --postgresql-database=db --static-ip-connectivity
To update a connection profile for SQL Server:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=sqlserver --sqlserver-password=fakepassword --sqlserver-username=fakeuser --display-name=my-profile --sqlserver-hostname=35.188.150.50 --sqlserver-port=1433 --sqlserver-database=db --static-ip-connectivity
To update a connection profile for Salesforce:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=salesforce --salesforce-password=fakepassword --salesforce-username=fakeuser --display-name=my-profile --salesforce-domain=fakecompany.my.salesforce.com --static-ip-connectivity
To update a connection profile for Google Cloud Storage:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=google-cloud-storage --bucket=fake-bucket --root-path=/root/path --display-name=my-profile
To update a connection profile for BigQuery:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=bigquery --display-name=my-profile
To update a connection profile for MongoDB:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=mongodb --mongodb-password=fakepassword --mongodb-username=fakeuser --display-name=my-profile --mongodb-host-addresses=35.188.150.50:27017 --static-ip-connectivity
"""
EXAMPLES_BETA = """\
To update a connection profile for Oracle:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=oracle --oracle-password=fakepassword --oracle-username=fakeuser --display-name=my-profile --oracle-hostname=35.188.150.50 --oracle-port=1521 --database-service=ORCL --static-ip-connectivity
To update a connection profile for MySQL:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=mysql --mysql-password=fakepassword --mysql-username=fakeuser --display-name=my-profile --mysql-hostname=35.188.150.50 --mysql-port=3306 --static-ip-connectivity
To update a connection profile for Google Cloud Storage:
$ {command} CONNECTION_PROFILE --location=us-central1 --type=google-cloud-storage --bucket-name=fake-bucket --root-path=/root/path --display-name=my-profile --no-connectivity
"""
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Update(base.Command):
"""Update a Datastream connection profile."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def CommonArgs(parser, release_track):
"""Common arguments for all release tracks.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
release_track: Some arguments are added based on the command release
track.
"""
resource_args.AddConnectionProfileResourceArg(
parser, 'to update', release_track, required=False)
cp_flags.AddTypeFlag(parser)
cp_flags.AddDisplayNameFlag(parser, required=False)
if release_track == base.ReleaseTrack.GA:
cp_flags.AddValidationGroup(parser, 'Update')
profile_flags = parser.add_group(mutex=True)
cp_flags.AddMysqlProfileGroup(profile_flags, required=False)
cp_flags.AddOracleProfileGroup(profile_flags, required=False)
cp_flags.AddPostgresqlProfileGroup(profile_flags, required=False)
cp_flags.AddSqlServerProfileGroup(profile_flags, required=False)
cp_flags.AddSalesforceProfileGroup(profile_flags, required=False)
cp_flags.AddGcsProfileGroup(profile_flags, release_track, required=False)
cp_flags.AddMongodbProfileGroup(profile_flags, required=False)
flags.AddLabelsUpdateFlags(parser)
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Update.CommonArgs(parser, base.ReleaseTrack.GA)
def Run(self, args):
"""Update a Datastream connection profile.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the operations resource describing the update
operation if the update was successful.
"""
connection_profile_ref = args.CONCEPTS.connection_profile.Parse()
if args.oracle_prompt_for_password:
args.oracle_password = console_io.PromptPassword(
'Please Enter Password: ')
if args.mysql_prompt_for_password:
args.mysql_password = console_io.PromptPassword('Please Enter Password: ')
if args.postgresql_prompt_for_password:
args.postgresql_password = console_io.PromptPassword(
'Please Enter Password: ')
if args.sqlserver_prompt_for_password:
args.sqlserver_password = console_io.PromptPassword(
'Please Enter Password: '
)
if args.salesforce_prompt_for_password:
args.salesforce_password = console_io.PromptPassword(
'Please Enter Password: '
)
if args.salesforce_prompt_for_security_token:
args.salesforce_password = console_io.PromptPassword(
'Please Enter Security Token: '
)
if args.salesforce_prompt_for_oauth2_client_secret:
args.salesforce_oauth2_client_secret = console_io.PromptPassword(
'Please Enter OAuth 2.0 Client Secret: '
)
if args.mongodb_prompt_for_password:
args.mongodb_password = console_io.PromptPassword(
'Please Enter Password: '
)
cp_type = (args.type).upper()
cp_client = connection_profiles.ConnectionProfilesClient()
result_operation = cp_client.Update(connection_profile_ref.RelativeName(),
cp_type, self.ReleaseTrack(), args)
client = util.GetClientInstance()
messages = util.GetMessagesModule()
resource_parser = util.GetResourceParser()
operation_ref = resource_parser.Create(
'datastream.projects.locations.operations',
operationsId=result_operation.name,
projectsId=connection_profile_ref.projectsId,
locationsId=connection_profile_ref.locationsId)
return client.projects_locations_operations.Get(
messages.DatastreamProjectsLocationsOperationsGetRequest(
name=operation_ref.operationsId))
@base.Deprecate(
is_removed=False,
warning=('Datastream beta version is deprecated. Please use`gcloud '
'datastream connection-profiles update` command instead.')
)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class UpdateBeta(Update):
"""Update a Datastream connection profile."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES_BETA}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Update.CommonArgs(parser, base.ReleaseTrack.BETA)

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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 locations command group for Datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.GA, base.ReleaseTrack.BETA)
class Locations(base.Group):
"""Manage Datastream location resources.
Commands for managing Datastream location resources.
"""

View File

@@ -0,0 +1,20 @@
release_tracks: [BETA, GA]
help_text:
brief: Show details about the location.
description: Show details about the location.
examples: |
To show details about a location, run:
$ {command} my-location
request:
collection: datastream.projects.locations
api_version: v1
arguments:
resource:
help_text: The location you want to describe.
# The following should point to the resource argument definition under your
# surface's command_lib directory:
spec: !REF googlecloudsdk.command_lib.datastream.resources:location

View File

@@ -0,0 +1,24 @@
- release_tracks: [BETA, GA]
help_text:
brief: List Datastream static ips per location.
description: |
List Datastream static IPs.
examples: |
To list the static IPs, run:
$ {command} my-location
request:
collection: datastream.projects.locations
method: fetchStaticIps
api_version: v1
response:
id_field: staticIps
arguments:
resource:
spec: !REF googlecloudsdk.command_lib.datastream.resources:location
help_text: |
The location you want to list static ips of.

View File

@@ -0,0 +1,33 @@
- release_tracks: [BETA, GA]
help_text:
brief: List Datastream locations.
description: |
List Datastream locations.
examples: |
To list the locations, run:
$ {command}
request:
collection: datastream.projects.locations
api_version: v1
response:
id_field: name
arguments:
resource:
spec: !REF googlecloudsdk.command_lib.datastream.resources:project
help_text: |
The parent project of the locations you want to list.
output:
format: |
table(
name.basename():label=NAME,
displayName:label=DISPLAYNAME,
labels:label=LABELS,
locationId:label=LOCATIONID,
metadata:label=METADATA
)

View File

@@ -0,0 +1,29 @@
# -*- 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.
"""Stream objects command group for Datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.GA)
class StreamObjects(base.Group):
"""Manage Datastream stream objects.
Commands for managing Datastream stream objects.
"""

View File

@@ -0,0 +1,20 @@
release_tracks: [GA]
help_text:
brief: Show details about a Stream object.
description: Show details about a Stream object.
examples: |
To show details about a stream object, run:
$ {command} my-object --stream=my-stream --location=us-central1
request:
collection: datastream.projects.locations.streams.objects
api_version: v1
arguments:
resource:
help_text: The Stream object you want to describe.
# The following should point to the resource argument definition under your
# surface's command_lib directory:
spec: !REF googlecloudsdk.command_lib.datastream.resources:stream_object

View File

@@ -0,0 +1,120 @@
# -*- 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.
"""Implementation of connection profile list command."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.datastream import stream_objects
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.core import properties
class _StreamObjectInfo:
"""Container for stream object data using in list display."""
def __init__(self, message, source_object):
self.display_name = message.displayName
self.name = message.name
self.source_object = source_object
self.backfill_job_state = (
message.backfillJob.state if message.backfillJob is not None else None
)
self.backfill_job_trigger = (
message.backfillJob.trigger if message.backfillJob is not None else None
)
self.last_backfill_job_start_time = (
message.backfillJob.lastStartTime
if message.backfillJob is not None
else None
)
self.last_backfill_job_end_time = (
message.backfillJob.lastEndTime
if message.backfillJob is not None
else None
)
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.GA)
class List(base.ListCommand):
"""List a Datastream stream objects.
List stream objects.
## API REFERENCE
This command uses the datastream/v1 API. The full documentation
for this API can be found at: https://cloud.google.com/datastream/
## EXAMPLES
To list all objects in a stream and location 'us-central1',
run:
$ {command} --stream=my-stream --location=us-central1
"""
@classmethod
def Args(cls, parser):
"""Register flags for this command."""
resource_args.AddStreamObjectResourceArg(parser)
parser.display_info.AddFormat("""
table(
display_name,
name.basename():label=NAME,
source_object,
backfill_job_state:label=BACKFILL_JOB_STATE,
backfill_job_trigger:label=BACKFILL_JOB_TRIGGER,
last_backfill_job_start_time:label=LAST_BACKFILL_JOB_START_TIME,
last_backfill_job_end_time:label=LAST_BACKFILL_JOB_END_TIME
)
""")
def Run(self, args):
"""Runs the command.
Args:
args: All the arguments that were provided to this command invocation.
Returns:
An iterator over objects containing stream objects data.
"""
so_client = stream_objects.StreamObjectsClient()
project_id = properties.VALUES.core.project.Get(required=True)
stream_ref = args.CONCEPTS.stream.Parse()
objects = so_client.List(project_id, stream_ref.streamsId, args)
return [_StreamObjectInfo(o, self._GetSourceObject(o)) for o in objects]
def _GetSourceObject(self, stream_object):
if stream_object.sourceObject.mysqlIdentifier:
identifier = stream_object.sourceObject.mysqlIdentifier
return "%s.%s" % (identifier.database, identifier.table)
elif stream_object.sourceObject.oracleIdentifier:
identifier = stream_object.sourceObject.oracleIdentifier
return "%s.%s" % (identifier.schema, identifier.table)
elif stream_object.sourceObject.postgresqlIdentifier:
identifier = stream_object.sourceObject.postgresqlIdentifier
return "%s.%s" % (identifier.schema, identifier.table)
elif stream_object.sourceObject.sqlServerIdentifier:
identifier = stream_object.sourceObject.sqlServerIdentifier
return "%s.%s" % (identifier.schema, identifier.table)
elif stream_object.sourceObject.salesforceIdentifier:
identifier = stream_object.sourceObject.salesforceIdentifier
return identifier.objectName
else:
return None

View File

@@ -0,0 +1,90 @@
# -*- 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.
"""Command to lookup a stream object for a datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.datastream import stream_objects
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.objects import flags as so_flags
from googlecloudsdk.core import properties
DESCRIPTION = (
'Lookup a stream object by its source object identifier (e.g. schema.table)'
)
EXAMPLES = """\
To lookup an existing Mysql stream object:
$ {command} --stream=my-stream --location=us-central1 --mysql-database=my-db --mysql-table=my-table
To lookup an existing Oracle stream object:
$ {command} --stream=my-stream --location=us-central1 --oracle-schema=my-schema --oracle-table=my-table
To lookup an existing PostgreSQL stream object:
$ {command} --stream=my-stream --location=us-central1 --postgresql-schema=my-schema --postgresql-table=my-table
To lookup an existing SQL Server stream object:
$ {command} --stream=my-stream --location=us-central1 --sqlserver-schema=my-schema --sqlserver-table=my-table
To lookup an existing Salesforce stream object:
$ {command} --stream=my-stream --location=us-central1 --salesforce-object-name=my-object
"""
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Lookup(base.Command):
"""Lookup a Datastream stream object."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
"""
resource_args.AddStreamObjectResourceArg(parser)
object_identifier_parser = parser.add_group(required=True, mutex=True)
so_flags.AddOracleObjectIdentifier(object_identifier_parser)
so_flags.AddMysqlObjectIdentifier(object_identifier_parser)
so_flags.AddPostgresqlObjectIdentifier(object_identifier_parser)
so_flags.AddSqlServerObjectIdentifier(object_identifier_parser)
so_flags.AddSalesforceObjectIdentifier(object_identifier_parser)
def Run(self, args):
"""Lookup a Datastream stream object.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the looked up stream object if the lookup was
successful.
"""
project_id = properties.VALUES.core.project.Get(required=True)
stream_id = args.CONCEPTS.stream.Parse().streamsId
so_client = stream_objects.StreamObjectsClient()
return so_client.Lookup(project_id, stream_id, args)

View File

@@ -0,0 +1,21 @@
release_tracks: [GA]
help_text:
brief: Start a backfill job for a Stream object.
description: Start a backfill job for a Stream object.
examples: |
To start a stream object backfill job, run:
$ {command} my-object --stream=my-stream --location=us-central1
request:
collection: datastream.projects.locations.streams.objects
method: startBackfillJob
api_version: v1
arguments:
resource:
help_text: The Stream object you want to start backfill for.
# The following should point to the resource argument definition under your
# surface's command_lib directory:
spec: !REF googlecloudsdk.command_lib.datastream.resources:stream_object

View File

@@ -0,0 +1,21 @@
release_tracks: [GA]
help_text:
brief: Stop a backfill job for a Stream object.
description: Stop a backfill job for a Stream object.
examples: |
To stop a stream object backfill job, run:
$ {command} my-object --stream=my-stream --location=us-central1
request:
collection: datastream.projects.locations.streams.objects
method: stopBackfillJob
api_version: v1
arguments:
resource:
help_text: The Stream object you want to stop backfill for.
# The following should point to the resource argument definition under your
# surface's command_lib directory:
spec: !REF googlecloudsdk.command_lib.datastream.resources:stream_object

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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 operations command group for Datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.GA, base.ReleaseTrack.BETA)
class Operations(base.Group):
"""Manage Datastream operations.
Commands for managing Datastream operations.
"""

View File

@@ -0,0 +1,23 @@
- release_tracks: [BETA, GA]
help_text:
brief: Cancel a Datastream operation.
description: Cancel a Datastream operation.
examples: |
To cancel an operation, run:
$ {command} OPERATION --location=us-central1
request:
collection: datastream.projects.locations.operations
method: cancel
api_version: v1
arguments:
resource:
help_text: |
Operation resource - Datastream operation to cancel.
spec: !REF googlecloudsdk.command_lib.datastream.resources:operation
output:
format: none

View File

@@ -0,0 +1,19 @@
- release_tracks: [BETA, GA]
help_text:
brief: Delete a Datastream operation.
description: Delete a Datastream operation.
examples: |
To delete an operation.
$ {command} OPERATION --location=us-central1
request:
collection: datastream.projects.locations.operations
method: delete
api_version: v1
arguments:
resource:
help_text: |
Operation resource - Datastream operation to delete.
spec: !REF googlecloudsdk.command_lib.datastream.resources:operation

View File

@@ -0,0 +1,17 @@
- release_tracks: [BETA, GA]
help_text:
brief: Show details about a operation.
description: Show details about a operation.
examples: |
To show details about a operation, run:
$ {command} my-operation --location=us-central1
request:
collection: datastream.projects.locations.operations
api_version: v1
arguments:
resource:
help_text: The operation you want to get the details of.
spec: !REF googlecloudsdk.command_lib.datastream.resources:operation

View File

@@ -0,0 +1,30 @@
- release_tracks: [BETA, GA]
help_text:
brief: List operations.
description: List operations.
examples: |
To list all operations in a project and region 'us-central1', run:
$ {command} --location=us-central1
request:
collection: datastream.projects.locations.operations
api_version: v1
response:
id_field: name
arguments:
resource:
help_text: The location you want to list the operations for.
spec: !REF googlecloudsdk.command_lib.datastream.resources:location
output:
format: |
table(
name.scope("operations"):label=ID,
metadata.target.scope("locations"):label=TARGET,
metadata.verb:label=ACTION,
done:label=DONE,
error.code:label=ERROR_CODE
)

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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.
"""Private connections command group for Datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.GA, base.ReleaseTrack.BETA)
class PrivateConnections(base.Group):
"""Manage Datastream private connections.
Commands for managing Datastream private connections.
"""

View File

@@ -0,0 +1,155 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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 datastream private connection."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.datastream import private_connections
from googlecloudsdk.api_lib.datastream import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import flags
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.private_connections import flags as pc_flags
from googlecloudsdk.command_lib.util.concepts import concept_parsers
from googlecloudsdk.command_lib.util.concepts import presentation_specs
DESCRIPTION = ('Create a Datastream private connection')
EXAMPLES = """\
To create a privateConnection with VPC Peering called 'my-privateConnection', run:
$ {command} my-privateConnection --location=us-central1 --display-name=my-privateConnection --vpc=vpc-example --subnet=10.0.0.0/29
To create a privateConnection with PSC Interface called 'my-privateConnection', run:
$ {command} my-privateConnection --location=us-central1 --display-name=my-privateConnection --network-attachment=network-attachment-example
"""
EXAMPLES_BETA = """\
To create a privateConnection with VPC Peering called 'my-privateConnection', run:
$ {command} my-privateConnection --location=us-central1 --display-name=my-privateConnection --vpc-name=vpc-example --subnet=10.0.0.0/29
"""
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Create(base.Command):
"""Create a Datastream private connection."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def CommonArgs(parser, release_track):
"""Common arguments for all release tracks.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
release_track: Some arguments are added based on the command release
track.
"""
resource_args.AddPrivateConnectionResourceArg(parser, 'to create')
pc_flags.AddDisplayNameFlag(parser)
# pc_flags.AddNetworkAttachmentFlag(parser)
pc_flags.AddValidateOnlyFlag(parser)
flags.AddLabelsCreateFlags(parser)
config_group = parser.add_group(mutex=True, required=True)
vpc_peering_group = config_group.add_group(
help='Arguments for VPC Peering configuration.'
)
vpc_peering_group.add_argument(
'--subnet',
help="""A free subnet for peering. (CIDR of /29).""",
required=True,
)
# Add VPC resource arg inside the VPC Peering group
vpc_field_name = 'vpc'
if release_track == base.ReleaseTrack.BETA:
vpc_field_name = 'vpc-name'
vpc_spec = presentation_specs.ResourcePresentationSpec(
'--%s' % vpc_field_name,
resource_args.GetVpcResourceSpec(),
'Resource ID of the VPC network to peer with.',
required=True,
) # Ensure VPC is required within this group
concept_parsers.ConceptParser([vpc_spec]).AddToParser(vpc_peering_group)
# --- PSC Interface Group ---
if release_track == base.ReleaseTrack.GA:
psc_group = config_group.add_group(
help='Arguments for Private Service Connect Interface configuration.'
)
pc_flags.AddNetworkAttachmentFlag(psc_group)
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Create.CommonArgs(parser, base.ReleaseTrack.GA)
def Run(self, args):
"""Create a Datastream private connection.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the operations resource describing the create
operation if the create was successful.
"""
private_connection_ref = args.CONCEPTS.private_connection.Parse()
parent_ref = private_connection_ref.Parent().RelativeName()
pc_client = private_connections.PrivateConnectionsClient()
result_operation = pc_client.Create(
parent_ref, private_connection_ref.privateConnectionsId,
self.ReleaseTrack(), args)
client = util.GetClientInstance()
messages = util.GetMessagesModule()
resource_parser = util.GetResourceParser()
operation_ref = resource_parser.Create(
'datastream.projects.locations.operations',
operationsId=result_operation.name,
projectsId=private_connection_ref.projectsId,
locationsId=private_connection_ref.locationsId)
return client.projects_locations_operations.Get(
messages.DatastreamProjectsLocationsOperationsGetRequest(
name=operation_ref.operationsId))
@base.Deprecate(
is_removed=False,
warning=('Datastream beta version is deprecated. Please use`gcloud '
'datastream private-connections create` command instead.')
)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class CreateBeta(Create):
"""Create a Datastream private connection."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES_BETA}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Create.CommonArgs(parser, base.ReleaseTrack.BETA)

View File

@@ -0,0 +1,35 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream private_connections delete` instead.
help_text:
brief: |
Delete a Datastream private connection.
description: |
Deletes a private connection. You must set the --force
parameter to ensure that the private connectivity configuration is deleted properly.
examples: |
To delete a private connection:
$ {command} PRIVATE_CONNECTION --location=us-central1 --force
request:
collection: datastream.projects.locations.privateConnections
api_version: v1
arguments:
resource:
help_text: |
Private connection resource - Private connection to delete.
spec: !REF googlecloudsdk.command_lib.datastream.resources:positional_private_connection
params:
- api_field: force
arg_name: force
required: false
help_text: |
You must set the force to ensure that the private
connectivity configuration is deleted properly.

View File

@@ -0,0 +1,23 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream private_connections describe` instead.
help_text:
brief: Show details about a Datastream private connection.
description: Show details about a private connection.
examples: |
To show details about a private connection, run:
$ {command} my-private-connection --location=us-central1
request:
collection: datastream.projects.locations.privateConnections
api_version: v1
arguments:
resource:
help_text: The private connection you want to get the details of.
spec: !REF googlecloudsdk.command_lib.datastream.resources:positional_private_connection

View File

@@ -0,0 +1,35 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream private_connections list` instead.
help_text:
brief: List private connections.
description: List private connections.
examples: |
To list all private connections in a project and location 'us-central1', run:
$ {command} --location=us-central1
request:
collection: datastream.projects.locations.privateConnections
api_version: v1
response:
id_field: name
arguments:
resource:
help_text: The location you want to list the private connections for.
spec: !REF googlecloudsdk.command_lib.datastream.resources:location
output:
format: |
table(
displayName,
createTime.date():label=CREATED,
state
)

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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.
"""Routes command group for Datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.GA, base.ReleaseTrack.BETA)
class Routes(base.Group):
"""Manage Datastream routes.
Commands for managing Datastream routes.
"""

View File

@@ -0,0 +1,101 @@
# -*- 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.
"""Command to create a datastream route."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.datastream import routes
from googlecloudsdk.api_lib.datastream import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import flags
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.routes import flags as routes_flags
DESCRIPTION = ('Create a Datastream private connection route')
EXAMPLES = """\
To create a route called 'my-route', run:
$ {command} my-route --location=us-central1 --private-connection=private-connection --display-name=my-display-name --destination-address=addr.path.to.somewhere --destination-port=33665
"""
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Create(base.Command):
"""Create a Datastream private connection route."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
"""
resource_args.AddRouteResourceArg(parser, 'to create')
routes_flags.AddDisplayNameFlag(parser)
routes_flags.AddDestinationAddressFlag(parser)
routes_flags.AddDestinationPortFlag(parser)
flags.AddLabelsCreateFlags(parser)
def Run(self, args):
"""Create a Datastream route.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the operations resource describing the create
operation if the create was successful.
"""
route_ref = args.CONCEPTS.route.Parse()
parent_ref = route_ref.Parent().RelativeName()
routes_client = routes.RoutesClient()
result_operation = routes_client.Create(
parent_ref, route_ref.routesId, args)
client = util.GetClientInstance()
messages = util.GetMessagesModule()
resource_parser = util.GetResourceParser()
operation_ref = resource_parser.Create(
'datastream.projects.locations.operations',
operationsId=result_operation.name,
projectsId=route_ref.projectsId,
locationsId=route_ref.locationsId)
return client.projects_locations_operations.Get(
messages.DatastreamProjectsLocationsOperationsGetRequest(
name=operation_ref.operationsId))
@base.Deprecate(
is_removed=False,
warning=('Datastream beta version is deprecated. Please use`gcloud '
'datastream routes create` command instead.')
)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class CreateBeta(Create):
"""Create a Datastream private connection route."""

View File

@@ -0,0 +1,26 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream routes delete` instead.
help_text:
brief: |
Delete a Datastream private connection route.
description: |
Deletes a Datastream private connection route.
examples: |
To delete a Datastream private connection route:
$ {command} ROUTE --location=us-central1
request:
collection: datastream.projects.locations.privateConnections.routes
api_version: v1
arguments:
resource:
help_text: |
The Route to delete.
spec: !REF googlecloudsdk.command_lib.datastream.resources:route

View File

@@ -0,0 +1,26 @@
release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream routes describe` instead.
help_text:
brief: Show details about the route.
description: Show details about the route.
examples: |
To show details about a device, run:
$ {command} my-route --private-connection=pc --location=us-central1
request:
collection: datastream.projects.locations.privateConnections.routes
api_version: v1
arguments:
resource:
help_text: The route you want to describe.
# The following should point to the resource argument definition under your
# surface's command_lib directory:
spec: !REF googlecloudsdk.command_lib.datastream.resources:route

View File

@@ -0,0 +1,41 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream routes list` instead.
help_text:
brief: List Datastream routes.
description: |
List Datastream routes.
examples: |
To list the routes, run:
$ {command} --private-connection=pc --location=us-central1
request:
collection: datastream.projects.locations.privateConnections.routes
api_version: v1
response:
id_field: name
arguments:
resource:
help_text: Parent Datastream location to list all contained Datastream routes.
# The following should point to the parent resource argument definition
# under your surface's command_lib directory:
spec: !REF googlecloudsdk.command_lib.datastream.resources:private_connection
output:
format: |
table(
name.basename():label=NAME,
createTime:label=CREATETIME,
destinationAddress:label=DESTINATIONADDRESS,
destinationPort:label=DESTINATIONPORT,
displayName:label=DISPLAYNAME,
labels:label=LABELS,
updateTime:label=UPDATETIME
)

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*- #
# Copyright 2020 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 streams command group for Datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.calliope import base
@base.ReleaseTracks(base.ReleaseTrack.GA, base.ReleaseTrack.BETA)
class Streams(base.Group):
"""Manage Datastream stream resources.
Commands for managing Datastream stream resources.
"""

View File

@@ -0,0 +1,142 @@
# -*- 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.
"""Command to create connection profiles for a datastream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.datastream import streams
from googlecloudsdk.api_lib.datastream import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import flags
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.streams import flags as streams_flags
DESCRIPTION = """\
Create a Datastream stream. If successful, the response body contains a newly created instance of Operation.
To get the operation result, call: describe OPERATION
"""
EXAMPLES = """\
To create a stream with an Oracle source and a Google Cloud Storage destination:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source=source --oracle-source-config=source_config.json --destination=destination --gcs-destination-config=destination_config.json --backfill-none
To create a stream with a MySQL source and a Cloud Storage destination and that excludes some objects from being backfilled:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source=source --mysql-source-config=source_config.json --destination=destination --gcs-destination-config=destination_config.json --backfill-all --mysql-excluded-objects=excluded_objects.json
To create a stream with an Oracle source and a BigQuery destination:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source=source --oracle-source-config=source_config.json --destination=destination --bigquery-destination-config=destination_config.json --backfill-none
To create a stream with a PostgreSQL source and a BigQuery destination:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source=source --postgresql-source-config=source_config.json --destination=destination --bigquery-destination-config=destination_config.json --backfill-none
To create a stream with a MongoDB source and a Cloud Storage destination and that excludes some objects from being backfilled:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source=source --mongodb-source-config=source_config.json --destination=destination --gcs-destination-config=destination_config.json --backfill-all --mongodb-excluded-objects=excluded_objects.json
"""
EXAMPLES_BETA = """\
To create a stream with an Oracle source and a Google Cloud Storage destination:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source-name=source --oracle-source-config=source_config.json --destination-name=destination --gcs-destination-config=destination_config.json --backfill-none
To create a stream with a MySQL source and a Cloud Storage destination and that excludes some objects from being backfilled:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source-name=source --mysql-source-config=source_config.json --destination-name=destination --gcs-destination-config=destination_config.json --backfill-all --mysql-excluded-objects=excluded_objects.json
"""
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Create(base.Command):
"""Create a Datastream stream."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def CommonArgs(parser, release_track):
"""Common arguments for all release tracks.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
release_track: Some arguments are added based on the command release
track.
"""
resource_args.AddStreamResourceArg(parser, 'create', release_track)
streams_flags.AddDisplayNameFlag(parser)
streams_flags.AddBackfillStrategyGroup(parser)
streams_flags.AddValidationGroup(parser, 'Create')
streams_flags.AddRuleSetsFlag(parser)
flags.AddLabelsCreateFlags(parser)
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Create.CommonArgs(parser, base.ReleaseTrack.GA)
def Run(self, args):
"""Create a Datastream stream.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the operations resource describing the create
operation if the create was successful.
"""
stream_ref = args.CONCEPTS.stream.Parse()
parent_ref = stream_ref.Parent().RelativeName()
stream_client = streams.StreamsClient()
result_operation = stream_client.Create(parent_ref, stream_ref.streamsId,
self.ReleaseTrack(), args)
client = util.GetClientInstance()
messages = util.GetMessagesModule()
resource_parser = util.GetResourceParser()
operation_ref = resource_parser.Create(
'datastream.projects.locations.operations',
operationsId=result_operation.name,
projectsId=stream_ref.projectsId,
locationsId=stream_ref.locationsId)
return client.projects_locations_operations.Get(
messages.DatastreamProjectsLocationsOperationsGetRequest(
name=operation_ref.operationsId))
@base.Deprecate(
is_removed=False,
warning=('Datastream beta version is deprecated. Please use`gcloud '
'datastream streams create` command instead.'))
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class CreateBeta(Create):
"""Creates a Datastream stream."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES_BETA}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Create.CommonArgs(parser, base.ReleaseTrack.BETA)

View File

@@ -0,0 +1,26 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream streams delete` instead.
help_text:
brief: |
Delete a Datastream stream.
description: |
Deletes a stream.
examples: |
To delete a stream:
$ {command} STREAM --location=us-central1
request:
collection: datastream.projects.locations.streams
api_version: v1
arguments:
resource:
help_text: |
Stream resource - Stream to delete.
spec: !REF googlecloudsdk.command_lib.datastream.resources:stream

View File

@@ -0,0 +1,23 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream streams describe` instead.
help_text:
brief: Show details about a Datastream stream resource.
description: Show details about a Datastream stream resource.
examples: |
To show details about a stream, run:
$ {command} my-stream --location=us-central1
request:
collection: datastream.projects.locations.streams
api_version: v1
arguments:
resource:
help_text: The stream you want to get the details of.
spec: !REF googlecloudsdk.command_lib.datastream.resources:stream

View File

@@ -0,0 +1,37 @@
- release_tracks: [BETA, GA]
BETA:
deprecate:
is_removed: false
warning: |
This command has been deprecated.
Use `gcloud datastream streams list` instead.
help_text:
brief: List Datastream stream resources.
description: List Datastream stream resources.
examples: |
To list all streams in a project and location 'us-central1', run:
$ {command} --location=us-central1
request:
collection: datastream.projects.locations.streams
api_version: v1
response:
id_field: name
arguments:
resource:
help_text: The location you want to list the streams for.
spec: !REF googlecloudsdk.command_lib.datastream.resources:location
output:
format: |
table(
displayName:label=NAME,
state:label=STATE,
sourceConfig.sourceConnectionProfile:label=SOURCE,
destinationConfig.destinationConnectionProfile:label=DESTINATION,
createTime,
updateTime
)

View File

@@ -0,0 +1,139 @@
# -*- 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.
"""Command to update a Datastream Stream."""
from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals
from googlecloudsdk.api_lib.datastream import streams
from googlecloudsdk.api_lib.datastream import util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.datastream import flags
from googlecloudsdk.command_lib.datastream import resource_args
from googlecloudsdk.command_lib.datastream.streams import flags as streams_flags
DESCRIPTION = """\
Update a Datastream stream. If successful, the response body contains a newly created instance of Operation.
To get the operation result, call: describe OPERATION
"""
EXAMPLES = """\
To update a stream with a new source and new display name:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source=source --update-mask=display_name,source
To update a stream's state to RUNNING:
$ {command} STREAM --location=us-central1 --state=RUNNING --update-mask=state
To update a stream's oracle source config:
$ {command} STREAM --location=us-central1 --oracle-source-config=good_oracle_cp.json --update-mask=oracle_source_config.include_objects
"""
EXAMPLES_BETA = """\
To update a stream with a new source and new display name:
$ {command} STREAM --location=us-central1 --display-name=my-stream --source-name=source --update-mask=display_name,source_name
To update a stream's state to RUNNING:
$ {command} STREAM --location=us-central1 --state=RUNNING --update-mask=state
To update a stream's oracle source config:
$ {command} STREAM --location=us-central1 --oracle-source-config=good_oracle_cp.json --update-mask=oracle_source_config.allowlist
"""
@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.GA)
class Update(base.Command):
"""Updates a Datastream stream."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES}
@staticmethod
def CommonArgs(parser, release_track):
"""Common arguments for all release tracks.
Args:
parser: An argparse parser that you can use to add arguments that go on
the command line after this command. Positional arguments are allowed.
release_track: Some arguments are added based on the command release
track.
"""
resource_args.AddStreamResourceArg(
parser, 'update', release_track, required=False)
streams_flags.AddUpdateMaskFlag(parser)
streams_flags.AddDisplayNameFlag(parser, required=False)
streams_flags.AddBackfillStrategyGroup(parser, required=False)
streams_flags.AddValidationGroup(parser, 'Update')
streams_flags.AddStateFlag(parser)
streams_flags.AddRuleSetsFlag(parser)
flags.AddLabelsUpdateFlags(parser)
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Update.CommonArgs(parser, base.ReleaseTrack.GA)
def Run(self, args):
"""Create a Datastream stream.
Args:
args: argparse.Namespace, The arguments that this command was invoked
with.
Returns:
A dict object representing the operations resource describing the create
operation if the create was successful.
"""
stream_ref = args.CONCEPTS.stream.Parse()
stream_client = streams.StreamsClient()
result_operation = stream_client.Update(stream_ref.RelativeName(),
self.ReleaseTrack(), args)
client = util.GetClientInstance()
messages = util.GetMessagesModule()
resource_parser = util.GetResourceParser()
operation_ref = resource_parser.Create(
'datastream.projects.locations.operations',
operationsId=result_operation.name,
projectsId=stream_ref.projectsId,
locationsId=stream_ref.locationsId)
return client.projects_locations_operations.Get(
messages.DatastreamProjectsLocationsOperationsGetRequest(
name=operation_ref.operationsId))
@base.Deprecate(
is_removed=False,
warning=('Datastream beta version is deprecated. Please use`gcloud '
'datastream streams update` command instead.')
)
@base.ReleaseTracks(base.ReleaseTrack.BETA)
class UpdateBeta(Update):
"""Updates a Datastream stream."""
detailed_help = {'DESCRIPTION': DESCRIPTION, 'EXAMPLES': EXAMPLES_BETA}
@staticmethod
def Args(parser):
"""Args is called by calliope to gather arguments for this command."""
Update.CommonArgs(parser, base.ReleaseTrack.BETA)