Skip to content

Commit 701a0c7

Browse files
committed
16.4.0
1 parent 69944d0 commit 701a0c7

File tree

7 files changed

+482
-259
lines changed

7 files changed

+482
-259
lines changed

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
setup(
2424
name='strongdm',
2525
packages=['strongdm'],
26-
version='16.3.0',
26+
version='16.4.0',
2727
license='apache-2.0',
2828
description='strongDM SDK for the Python programming language.',
2929
long_description=long_description,
@@ -32,7 +32,7 @@
3232
author_email='sdk-feedback@strongdm.com',
3333
url='https://github.com/strongdm/strongdm-sdk-python',
3434
download_url=
35-
'https://github.com/strongdm/strongdm-sdk-python/archive/v16.3.0.tar.gz',
35+
'https://github.com/strongdm/strongdm-sdk-python/archive/v16.4.0.tar.gz',
3636
keywords=[
3737
'strongDM', 'sdm', 'api', 'automation', 'security', 'audit',
3838
'database', 'server', 'ssh', 'rdp'

strongdm.egg-info/PKG-INFO

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
Metadata-Version: 2.1
22
Name: strongdm
3-
Version: 16.3.0
3+
Version: 16.4.0
44
Summary: strongDM SDK for the Python programming language.
55
Home-page: https://github.com/strongdm/strongdm-sdk-python
66
Author: strongDM Team
77
Author-email: sdk-feedback@strongdm.com
88
License: apache-2.0
9-
Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v16.3.0.tar.gz
9+
Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v16.4.0.tar.gz
1010
Keywords: strongDM,sdm,api,automation,security,audit,database,server,ssh,rdp
1111
Platform: UNKNOWN
1212
Classifier: Development Status :: 4 - Beta

strongdm/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
DEFAULT_RETRY_FACTOR = 1.6
4141
DEFAULT_RETRY_JITTER = 0.2
4242
API_VERSION = '2025-04-14'
43-
USER_AGENT = 'strongdm-sdk-python/16.3.0'
43+
USER_AGENT = 'strongdm-sdk-python/16.4.0'
4444

4545
method_regexp = re.compile(r'\W+')
4646

strongdm/drivers_pb2.py

Lines changed: 270 additions & 232 deletions
Large diffs are not rendered by default.

strongdm/models.py

Lines changed: 152 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19535,10 +19535,8 @@ class MCP:
1953519535
'id',
1953619536
'name',
1953719537
'oauth_auth_endpoint',
19538-
'oauth_register_endpoint',
1953919538
'oauth_token_endpoint',
1954019539
'password',
19541-
'port',
1954219540
'port_override',
1954319541
'proxy_cluster_id',
1954419542
'secret_store_id',
@@ -19556,10 +19554,8 @@ def __init__(
1955619554
id=None,
1955719555
name=None,
1955819556
oauth_auth_endpoint=None,
19559-
oauth_register_endpoint=None,
1956019557
oauth_token_endpoint=None,
1956119558
password=None,
19562-
port=None,
1956319559
port_override=None,
1956419560
proxy_cluster_id=None,
1956519561
secret_store_id=None,
@@ -19595,10 +19591,6 @@ def __init__(
1959519591
'''
1959619592
The OAuth 2.0 authorization endpoint URL.
1959719593
'''
19598-
self.oauth_register_endpoint = oauth_register_endpoint if oauth_register_endpoint is not None else ''
19599-
'''
19600-
The OAuth 2.0 dynamic client registration endpoint URL.
19601-
'''
1960219594
self.oauth_token_endpoint = oauth_token_endpoint if oauth_token_endpoint is not None else ''
1960319595
'''
1960419596
The OAuth 2.0 token endpoint URL.
@@ -19607,10 +19599,6 @@ def __init__(
1960719599
'''
1960819600
OAuth App Client Secret
1960919601
'''
19610-
self.port = port if port is not None else 0
19611-
'''
19612-
The port to dial to initiate a connection from the egress node to this resource.
19613-
'''
1961419602
self.port_override = port_override if port_override is not None else 0
1961519603
'''
1961619604
The local port used by clients to connect to this resource. It is automatically generated if not provided on create and may be re-generated on update by specifying a value of -1.
@@ -19645,10 +19633,8 @@ def __repr__(self):
1964519633
'id: ' + repr(self.id) + ' ' +\
1964619634
'name: ' + repr(self.name) + ' ' +\
1964719635
'oauth_auth_endpoint: ' + repr(self.oauth_auth_endpoint) + ' ' +\
19648-
'oauth_register_endpoint: ' + repr(self.oauth_register_endpoint) + ' ' +\
1964919636
'oauth_token_endpoint: ' + repr(self.oauth_token_endpoint) + ' ' +\
1965019637
'password: ' + repr(self.password) + ' ' +\
19651-
'port: ' + repr(self.port) + ' ' +\
1965219638
'port_override: ' + repr(self.port_override) + ' ' +\
1965319639
'proxy_cluster_id: ' + repr(self.proxy_cluster_id) + ' ' +\
1965419640
'secret_store_id: ' + repr(self.secret_store_id) + ' ' +\
@@ -19666,10 +19652,8 @@ def to_dict(self):
1966619652
'id': self.id,
1966719653
'name': self.name,
1966819654
'oauth_auth_endpoint': self.oauth_auth_endpoint,
19669-
'oauth_register_endpoint': self.oauth_register_endpoint,
1967019655
'oauth_token_endpoint': self.oauth_token_endpoint,
1967119656
'password': self.password,
19672-
'port': self.port,
1967319657
'port_override': self.port_override,
1967419658
'proxy_cluster_id': self.proxy_cluster_id,
1967519659
'secret_store_id': self.secret_store_id,
@@ -19688,10 +19672,8 @@ def from_dict(cls, d):
1968819672
id=d.get('id'),
1968919673
name=d.get('name'),
1969019674
oauth_auth_endpoint=d.get('oauth_auth_endpoint'),
19691-
oauth_register_endpoint=d.get('oauth_register_endpoint'),
1969219675
oauth_token_endpoint=d.get('oauth_token_endpoint'),
1969319676
password=d.get('password'),
19694-
port=d.get('port'),
1969519677
port_override=d.get('port_override'),
1969619678
proxy_cluster_id=d.get('proxy_cluster_id'),
1969719679
secret_store_id=d.get('secret_store_id'),
@@ -19701,6 +19683,158 @@ def from_dict(cls, d):
1970119683
)
1970219684

1970319685

19686+
class MCPDCR:
19687+
'''
19688+
MCPDCR is currently unstable, and its API may change, or it may be removed,
19689+
without a major version bump.
19690+
'''
19691+
__slots__ = [
19692+
'bind_interface',
19693+
'egress_filter',
19694+
'healthy',
19695+
'hostname',
19696+
'id',
19697+
'name',
19698+
'oauth_auth_endpoint',
19699+
'oauth_register_endpoint',
19700+
'oauth_token_endpoint',
19701+
'port_override',
19702+
'proxy_cluster_id',
19703+
'secret_store_id',
19704+
'subdomain',
19705+
'tags',
19706+
]
19707+
19708+
def __init__(
19709+
self,
19710+
bind_interface=None,
19711+
egress_filter=None,
19712+
healthy=None,
19713+
hostname=None,
19714+
id=None,
19715+
name=None,
19716+
oauth_auth_endpoint=None,
19717+
oauth_register_endpoint=None,
19718+
oauth_token_endpoint=None,
19719+
port_override=None,
19720+
proxy_cluster_id=None,
19721+
secret_store_id=None,
19722+
subdomain=None,
19723+
tags=None,
19724+
):
19725+
self.bind_interface = bind_interface if bind_interface is not None else ''
19726+
'''
19727+
The bind interface is the IP address to which the port override of a resource is bound (for example, 127.0.0.1). It is automatically generated if not provided and may also be set to one of the ResourceIPAllocationMode constants to select between VNM, loopback, or default allocation.
19728+
'''
19729+
self.egress_filter = egress_filter if egress_filter is not None else ''
19730+
'''
19731+
A filter applied to the routing logic to pin datasource to nodes.
19732+
'''
19733+
self.healthy = healthy if healthy is not None else False
19734+
'''
19735+
True if the datasource is reachable and the credentials are valid.
19736+
'''
19737+
self.hostname = hostname if hostname is not None else ''
19738+
'''
19739+
The host to dial to initiate a connection from the egress node to this resource.
19740+
'''
19741+
self.id = id if id is not None else ''
19742+
'''
19743+
Unique identifier of the Resource.
19744+
'''
19745+
self.name = name if name is not None else ''
19746+
'''
19747+
Unique human-readable name of the Resource.
19748+
'''
19749+
self.oauth_auth_endpoint = oauth_auth_endpoint if oauth_auth_endpoint is not None else ''
19750+
'''
19751+
The OAuth 2.0 authorization endpoint URL.
19752+
'''
19753+
self.oauth_register_endpoint = oauth_register_endpoint if oauth_register_endpoint is not None else ''
19754+
'''
19755+
The OAuth 2.0 dynamic client registration endpoint URL.
19756+
'''
19757+
self.oauth_token_endpoint = oauth_token_endpoint if oauth_token_endpoint is not None else ''
19758+
'''
19759+
The OAuth 2.0 token endpoint URL.
19760+
'''
19761+
self.port_override = port_override if port_override is not None else 0
19762+
'''
19763+
The local port used by clients to connect to this resource. It is automatically generated if not provided on create and may be re-generated on update by specifying a value of -1.
19764+
'''
19765+
self.proxy_cluster_id = proxy_cluster_id if proxy_cluster_id is not None else ''
19766+
'''
19767+
ID of the proxy cluster for this resource, if any.
19768+
'''
19769+
self.secret_store_id = secret_store_id if secret_store_id is not None else ''
19770+
'''
19771+
ID of the secret store containing credentials for this resource, if any.
19772+
'''
19773+
self.subdomain = subdomain if subdomain is not None else ''
19774+
'''
19775+
DNS subdomain through which this resource may be accessed on clients. (e.g. "app-prod1" allows the resource to be accessed at "app-prod1.your-org-name.sdm-proxy-domain"). Only applicable to HTTP-based resources or resources using virtual networking mode.
19776+
'''
19777+
self.tags = tags if tags is not None else _porcelain_zero_value_tags()
19778+
'''
19779+
Tags is a map of key, value pairs.
19780+
'''
19781+
19782+
def __repr__(self):
19783+
return '<sdm.MCPDCR ' + \
19784+
'bind_interface: ' + repr(self.bind_interface) + ' ' +\
19785+
'egress_filter: ' + repr(self.egress_filter) + ' ' +\
19786+
'healthy: ' + repr(self.healthy) + ' ' +\
19787+
'hostname: ' + repr(self.hostname) + ' ' +\
19788+
'id: ' + repr(self.id) + ' ' +\
19789+
'name: ' + repr(self.name) + ' ' +\
19790+
'oauth_auth_endpoint: ' + repr(self.oauth_auth_endpoint) + ' ' +\
19791+
'oauth_register_endpoint: ' + repr(self.oauth_register_endpoint) + ' ' +\
19792+
'oauth_token_endpoint: ' + repr(self.oauth_token_endpoint) + ' ' +\
19793+
'port_override: ' + repr(self.port_override) + ' ' +\
19794+
'proxy_cluster_id: ' + repr(self.proxy_cluster_id) + ' ' +\
19795+
'secret_store_id: ' + repr(self.secret_store_id) + ' ' +\
19796+
'subdomain: ' + repr(self.subdomain) + ' ' +\
19797+
'tags: ' + repr(self.tags) + ' ' +\
19798+
'>'
19799+
19800+
def to_dict(self):
19801+
return {
19802+
'bind_interface': self.bind_interface,
19803+
'egress_filter': self.egress_filter,
19804+
'healthy': self.healthy,
19805+
'hostname': self.hostname,
19806+
'id': self.id,
19807+
'name': self.name,
19808+
'oauth_auth_endpoint': self.oauth_auth_endpoint,
19809+
'oauth_register_endpoint': self.oauth_register_endpoint,
19810+
'oauth_token_endpoint': self.oauth_token_endpoint,
19811+
'port_override': self.port_override,
19812+
'proxy_cluster_id': self.proxy_cluster_id,
19813+
'secret_store_id': self.secret_store_id,
19814+
'subdomain': self.subdomain,
19815+
'tags': self.tags,
19816+
}
19817+
19818+
@classmethod
19819+
def from_dict(cls, d):
19820+
return cls(
19821+
bind_interface=d.get('bind_interface'),
19822+
egress_filter=d.get('egress_filter'),
19823+
healthy=d.get('healthy'),
19824+
hostname=d.get('hostname'),
19825+
id=d.get('id'),
19826+
name=d.get('name'),
19827+
oauth_auth_endpoint=d.get('oauth_auth_endpoint'),
19828+
oauth_register_endpoint=d.get('oauth_register_endpoint'),
19829+
oauth_token_endpoint=d.get('oauth_token_endpoint'),
19830+
port_override=d.get('port_override'),
19831+
proxy_cluster_id=d.get('proxy_cluster_id'),
19832+
secret_store_id=d.get('secret_store_id'),
19833+
subdomain=d.get('subdomain'),
19834+
tags=d.get('tags'),
19835+
)
19836+
19837+
1970419838
class MTLSMysql:
1970519839
__slots__ = [
1970619840
'bind_interface',

strongdm/plumbing.py

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9701,10 +9701,8 @@ def convert_mcp_to_porcelain(plumbing):
97019701
porcelain.id = (plumbing.id)
97029702
porcelain.name = (plumbing.name)
97039703
porcelain.oauth_auth_endpoint = (plumbing.oauth_auth_endpoint)
9704-
porcelain.oauth_register_endpoint = (plumbing.oauth_register_endpoint)
97059704
porcelain.oauth_token_endpoint = (plumbing.oauth_token_endpoint)
97069705
porcelain.password = (plumbing.password)
9707-
porcelain.port = (plumbing.port)
97089706
porcelain.port_override = (plumbing.port_override)
97099707
porcelain.proxy_cluster_id = (plumbing.proxy_cluster_id)
97109708
porcelain.secret_store_id = (plumbing.secret_store_id)
@@ -9725,10 +9723,8 @@ def convert_mcp_to_plumbing(porcelain):
97259723
plumbing.id = (porcelain.id)
97269724
plumbing.name = (porcelain.name)
97279725
plumbing.oauth_auth_endpoint = (porcelain.oauth_auth_endpoint)
9728-
plumbing.oauth_register_endpoint = (porcelain.oauth_register_endpoint)
97299726
plumbing.oauth_token_endpoint = (porcelain.oauth_token_endpoint)
97309727
plumbing.password = (porcelain.password)
9731-
plumbing.port = (porcelain.port)
97329728
plumbing.port_override = (porcelain.port_override)
97339729
plumbing.proxy_cluster_id = (porcelain.proxy_cluster_id)
97349730
plumbing.secret_store_id = (porcelain.secret_store_id)
@@ -9746,6 +9742,56 @@ def convert_repeated_mcp_to_porcelain(plumbings):
97469742
return [convert_mcp_to_porcelain(plumbing) for plumbing in plumbings]
97479743

97489744

9745+
def convert_mcpdcr_to_porcelain(plumbing):
9746+
if plumbing is None:
9747+
return None
9748+
porcelain = models.MCPDCR()
9749+
porcelain.bind_interface = (plumbing.bind_interface)
9750+
porcelain.egress_filter = (plumbing.egress_filter)
9751+
porcelain.healthy = (plumbing.healthy)
9752+
porcelain.hostname = (plumbing.hostname)
9753+
porcelain.id = (plumbing.id)
9754+
porcelain.name = (plumbing.name)
9755+
porcelain.oauth_auth_endpoint = (plumbing.oauth_auth_endpoint)
9756+
porcelain.oauth_register_endpoint = (plumbing.oauth_register_endpoint)
9757+
porcelain.oauth_token_endpoint = (plumbing.oauth_token_endpoint)
9758+
porcelain.port_override = (plumbing.port_override)
9759+
porcelain.proxy_cluster_id = (plumbing.proxy_cluster_id)
9760+
porcelain.secret_store_id = (plumbing.secret_store_id)
9761+
porcelain.subdomain = (plumbing.subdomain)
9762+
porcelain.tags = convert_tags_to_porcelain(plumbing.tags)
9763+
return porcelain
9764+
9765+
9766+
def convert_mcpdcr_to_plumbing(porcelain):
9767+
plumbing = MCPDCR()
9768+
if porcelain is None:
9769+
return plumbing
9770+
plumbing.bind_interface = (porcelain.bind_interface)
9771+
plumbing.egress_filter = (porcelain.egress_filter)
9772+
plumbing.healthy = (porcelain.healthy)
9773+
plumbing.hostname = (porcelain.hostname)
9774+
plumbing.id = (porcelain.id)
9775+
plumbing.name = (porcelain.name)
9776+
plumbing.oauth_auth_endpoint = (porcelain.oauth_auth_endpoint)
9777+
plumbing.oauth_register_endpoint = (porcelain.oauth_register_endpoint)
9778+
plumbing.oauth_token_endpoint = (porcelain.oauth_token_endpoint)
9779+
plumbing.port_override = (porcelain.port_override)
9780+
plumbing.proxy_cluster_id = (porcelain.proxy_cluster_id)
9781+
plumbing.secret_store_id = (porcelain.secret_store_id)
9782+
plumbing.subdomain = (porcelain.subdomain)
9783+
plumbing.tags.CopyFrom(convert_tags_to_plumbing(porcelain.tags))
9784+
return plumbing
9785+
9786+
9787+
def convert_repeated_mcpdcr_to_plumbing(porcelains):
9788+
return [convert_mcpdcr_to_plumbing(porcelain) for porcelain in porcelains]
9789+
9790+
9791+
def convert_repeated_mcpdcr_to_porcelain(plumbings):
9792+
return [convert_mcpdcr_to_porcelain(plumbing) for plumbing in plumbings]
9793+
9794+
97499795
def convert_mtls_mysql_to_porcelain(plumbing):
97509796
if plumbing is None:
97519797
return None
@@ -14650,6 +14696,8 @@ def convert_resource_to_plumbing(porcelain):
1465014696
plumbing.maria.CopyFrom(convert_maria_to_plumbing(porcelain))
1465114697
if isinstance(porcelain, models.MCP):
1465214698
plumbing.mcp.CopyFrom(convert_mcp_to_plumbing(porcelain))
14699+
if isinstance(porcelain, models.MCPDCR):
14700+
plumbing.mcpdcr.CopyFrom(convert_mcpdcr_to_plumbing(porcelain))
1465314701
if isinstance(porcelain, models.Memcached):
1465414702
plumbing.memcached.CopyFrom(convert_memcached_to_plumbing(porcelain))
1465514703
if isinstance(porcelain, models.Memsql):
@@ -14925,6 +14973,8 @@ def convert_resource_to_porcelain(plumbing):
1492514973
return convert_maria_to_porcelain(plumbing.maria)
1492614974
if plumbing.HasField('mcp'):
1492714975
return convert_mcp_to_porcelain(plumbing.mcp)
14976+
if plumbing.HasField('mcpdcr'):
14977+
return convert_mcpdcr_to_porcelain(plumbing.mcpdcr)
1492814978
if plumbing.HasField('memcached'):
1492914979
return convert_memcached_to_porcelain(plumbing.memcached)
1493014980
if plumbing.HasField('memsql'):

strongdm/svc.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6410,6 +6410,7 @@ class Resources:
64106410
`strongdm.models.KubernetesUserImpersonation`
64116411
`strongdm.models.Maria`
64126412
`strongdm.models.MCP`
6413+
`strongdm.models.MCPDCR`
64136414
`strongdm.models.Memcached`
64146415
`strongdm.models.Memsql`
64156416
`strongdm.models.MongoHost`

0 commit comments

Comments
 (0)