strongdm 15.26.0 → 15.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b01e7ac0f7ac8eaf26d9cf9776dd6d9c8dc58982859bd73125abfc8843c2c355
4
- data.tar.gz: 29f4c992cfc6cb26bb2b92c185f022077a35e2f16a8fa165a435a135f6992c5e
3
+ metadata.gz: 8f1147223e088e14c3dd89ba96393938a1711c229baa9c7a0186469bfd2953bf
4
+ data.tar.gz: ddd4c1052c4a212ad31b7694595ab1bc824b622f0d54587cd286b3087ce3a532
5
5
  SHA512:
6
- metadata.gz: 12512fb829b254c94c505944499177e3bdca0cc6105e3fef4abf9121f4046017af9f21ebe5d908946ee30d11634358c633cc5d6e840094607ec4a6c4f82d90e4
7
- data.tar.gz: 6399418b23c2be60ff74bb8e3e0098b5577f1683b994a42b6215236102f3d94c872b109be7af377c33c6d71534ab4b5873a43bcd1f76048860f0747815ba5cf8
6
+ metadata.gz: 4a782248d81c18bd016d1aba9f7534fa46f289ddab40e2a7516d723851ca112060d5810cad794efd6d67a3497a9f84af8807c4d16f0d313f7415d6589ef9071c
7
+ data.tar.gz: 787d75924565bf28110d6e22ba8c75c7a8027f373541182e5e3edd6b7bfacc18ceef1a9fdfb10776d90a2008c408bea157120c7b364a14ca8d1b8d509bc6b425
data/.git/ORIG_HEAD CHANGED
@@ -1 +1 @@
1
- a4fd017725511cf32effc6426ca74b714644d37d
1
+ 25679d89a3cf0c95ce09a35f00dd9bb6425e0946
data/.git/index CHANGED
Binary file
data/.git/logs/HEAD CHANGED
@@ -1,3 +1,3 @@
1
- 0000000000000000000000000000000000000000 a4fd017725511cf32effc6426ca74b714644d37d root <root@9d9bdd5e04cb.(none)> 1761154434 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
- a4fd017725511cf32effc6426ca74b714644d37d a4fd017725511cf32effc6426ca74b714644d37d root <root@9d9bdd5e04cb.(none)> 1761154434 +0000 checkout: moving from master to master
3
- a4fd017725511cf32effc6426ca74b714644d37d 9a13de3384bb6d3b929209e8c93515c9a146bfc0 root <root@9d9bdd5e04cb.(none)> 1761154434 +0000 merge origin/development: Fast-forward
1
+ 0000000000000000000000000000000000000000 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 root <root@9c364c0f1ac7.(none)> 1762804882 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
+ 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 root <root@9c364c0f1ac7.(none)> 1762804882 +0000 checkout: moving from master to master
3
+ 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 a19a5670f1583260058d10160faeee46ef5c6346 root <root@9c364c0f1ac7.(none)> 1762804882 +0000 merge origin/development: Fast-forward
@@ -1,2 +1,2 @@
1
- 0000000000000000000000000000000000000000 a4fd017725511cf32effc6426ca74b714644d37d root <root@9d9bdd5e04cb.(none)> 1761154434 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
- a4fd017725511cf32effc6426ca74b714644d37d 9a13de3384bb6d3b929209e8c93515c9a146bfc0 root <root@9d9bdd5e04cb.(none)> 1761154434 +0000 merge origin/development: Fast-forward
1
+ 0000000000000000000000000000000000000000 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 root <root@9c364c0f1ac7.(none)> 1762804882 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
+ 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 a19a5670f1583260058d10160faeee46ef5c6346 root <root@9c364c0f1ac7.(none)> 1762804882 +0000 merge origin/development: Fast-forward
@@ -1 +1 @@
1
- 0000000000000000000000000000000000000000 a4fd017725511cf32effc6426ca74b714644d37d root <root@9d9bdd5e04cb.(none)> 1761154434 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
1
+ 0000000000000000000000000000000000000000 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 root <root@9c364c0f1ac7.(none)> 1762804882 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
data/.git/packed-refs CHANGED
@@ -1,6 +1,6 @@
1
1
  # pack-refs with: peeled fully-peeled sorted
2
- 9a13de3384bb6d3b929209e8c93515c9a146bfc0 refs/remotes/origin/development
3
- a4fd017725511cf32effc6426ca74b714644d37d refs/remotes/origin/master
2
+ a19a5670f1583260058d10160faeee46ef5c6346 refs/remotes/origin/development
3
+ 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 refs/remotes/origin/master
4
4
  2e4fe8087177ddea9b3991ca499f758384839c89 refs/tags/untagged-84fd83a4484c785cce63
5
5
  04f604866214fab4d5663b5171a3e596331577bd refs/tags/v0.9.4
6
6
  6f9a7b75b345c65fb554884907b7060680c807b7 refs/tags/v0.9.5
@@ -116,6 +116,8 @@ ac9b86121b9542f28b614f897f7a61f34363410b refs/tags/v15.10.0
116
116
  dbc1e295841d51376c44f987d9eecf5c8427c478 refs/tags/v15.22.0
117
117
  1fb12400f09101921542776d3887b93103dd9c5f refs/tags/v15.23.0
118
118
  a4fd017725511cf32effc6426ca74b714644d37d refs/tags/v15.25.0
119
+ 9a13de3384bb6d3b929209e8c93515c9a146bfc0 refs/tags/v15.26.0
120
+ 25679d89a3cf0c95ce09a35f00dd9bb6425e0946 refs/tags/v15.27.0
119
121
  cf3b15b82cb0c4229609c07c870c6cb4fd38ef75 refs/tags/v15.4.0
120
122
  0be2c5e7f7a90c49077548cb3a9bce234219b9f0 refs/tags/v15.5.0
121
123
  4b9cd43c5dda3f369b82b6a56132a5470ff9ff53 refs/tags/v15.6.0
@@ -1 +1 @@
1
- 9a13de3384bb6d3b929209e8c93515c9a146bfc0
1
+ a19a5670f1583260058d10160faeee46ef5c6346
@@ -75,6 +75,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
75
75
  optional :dynamo_dbiam, :message, 501, "v1.DynamoDBIAM"
76
76
  optional :elastic, :message, 601, "v1.Elastic"
77
77
  optional :elasticache_redis, :message, 1601, "v1.ElasticacheRedis"
78
+ optional :elasticache_redis_iam, :message, 1603, "v1.ElasticacheRedisIAM"
78
79
  optional :entra_id, :message, 2803, "v1.EntraID"
79
80
  optional :gcp, :message, 2700, "v1.GCP"
80
81
  optional :gcp_console, :message, 3300, "v1.GCPConsole"
@@ -1047,6 +1048,25 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
1047
1048
  optional :tls_required, :bool, 5
1048
1049
  optional :username, :string, 6
1049
1050
  end
1051
+ add_message "v1.ElasticacheRedisIAM" do
1052
+ optional :id, :string, 32768
1053
+ optional :name, :string, 32769
1054
+ optional :healthy, :bool, 32770
1055
+ optional :tags, :message, 32771, "v1.Tags"
1056
+ optional :secret_store_id, :string, 32772
1057
+ optional :egress_filter, :string, 32773
1058
+ optional :bind_interface, :string, 32774
1059
+ optional :proxy_cluster_id, :string, 32776
1060
+ optional :subdomain, :string, 32775
1061
+ optional :hostname, :string, 1
1062
+ optional :port, :int32, 5
1063
+ optional :port_override, :int32, 2
1064
+ optional :region, :string, 9
1065
+ optional :role_assumption_arn, :string, 10
1066
+ optional :role_external_id, :string, 11
1067
+ optional :tls_required, :bool, 6
1068
+ optional :username, :string, 3
1069
+ end
1050
1070
  add_message "v1.EntraID" do
1051
1071
  optional :id, :string, 32768
1052
1072
  optional :name, :string, 32769
@@ -1680,6 +1700,8 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
1680
1700
  optional :subdomain, :string, 32775
1681
1701
  optional :downgrade_nla_connections, :bool, 6
1682
1702
  optional :hostname, :string, 1
1703
+ optional :identity_alias_healthcheck_username, :string, 12
1704
+ optional :identity_set_id, :string, 11
1683
1705
  optional :lock_required, :bool, 10
1684
1706
  optional :password, :string, 3
1685
1707
  optional :port, :int32, 5
@@ -2177,6 +2199,7 @@ module V1
2177
2199
  DynamoDBIAM = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.DynamoDBIAM").msgclass
2178
2200
  Elastic = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.Elastic").msgclass
2179
2201
  ElasticacheRedis = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.ElasticacheRedis").msgclass
2202
+ ElasticacheRedisIAM = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.ElasticacheRedisIAM").msgclass
2180
2203
  EntraID = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.EntraID").msgclass
2181
2204
  GCP = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.GCP").msgclass
2182
2205
  GCPConsole = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.GCPConsole").msgclass
data/lib/grpc/nodes_pb.rb CHANGED
@@ -70,6 +70,18 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
70
70
  repeated :nodes, :message, 2, "v1.Node"
71
71
  optional :rate_limit, :message, 3, "v1.RateLimitMetadata"
72
72
  end
73
+ add_message "v1.NodeTCPProbeRequest" do
74
+ optional :meta, :message, 1, "v1.CreateRequestMetadata"
75
+ optional :node_id, :string, 2
76
+ optional :host, :string, 3
77
+ optional :port, :int32, 4
78
+ end
79
+ add_message "v1.NodeTCPProbeResponse" do
80
+ optional :meta, :message, 1, "v1.CreateResponseMetadata"
81
+ optional :succeeded, :bool, 2
82
+ optional :error, :string, 3
83
+ optional :rate_limit, :message, 4, "v1.RateLimitMetadata"
84
+ end
73
85
  add_message "v1.Node" do
74
86
  oneof :node do
75
87
  optional :relay, :message, 1, "v1.Relay"
@@ -139,6 +151,8 @@ module V1
139
151
  NodeDeleteResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.NodeDeleteResponse").msgclass
140
152
  NodeListRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.NodeListRequest").msgclass
141
153
  NodeListResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.NodeListResponse").msgclass
154
+ NodeTCPProbeRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.NodeTCPProbeRequest").msgclass
155
+ NodeTCPProbeResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.NodeTCPProbeResponse").msgclass
142
156
  Node = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.Node").msgclass
143
157
  Relay = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.Relay").msgclass
144
158
  Gateway = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.Gateway").msgclass
@@ -20,9 +20,11 @@ require "nodes_pb"
20
20
 
21
21
  module V1
22
22
  module Nodes
23
- # Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes:
24
- # - **Gateways** are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers.
25
- # - **Relays** are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections.
23
+ # Nodes make up the StrongDM network, and allow your users to connect securely to your resources.
24
+ # There are three types of nodes:
25
+ # 1. **Relay:** creates connectivity to your datasources, while maintaining the egress-only nature of your firewall
26
+ # 2. **Gateway:** a relay that also listens for connections from StrongDM clients
27
+ # 3. **Proxy Cluster:** a cluster of workers that together mediate access from clients to resources
26
28
  class Service
27
29
  include ::GRPC::GenericService
28
30
 
@@ -40,6 +42,9 @@ module V1
40
42
  rpc :Delete, ::V1::NodeDeleteRequest, ::V1::NodeDeleteResponse
41
43
  # List gets a list of Nodes matching a given set of criteria.
42
44
  rpc :List, ::V1::NodeListRequest, ::V1::NodeListResponse
45
+ # TCPProbe instructs a Node to connect to an address via TCP and report the
46
+ # result.
47
+ rpc :TCPProbe, ::V1::NodeTCPProbeRequest, ::V1::NodeTCPProbeResponse
43
48
  end
44
49
 
45
50
  Stub = Service.rpc_stub_class
@@ -36,6 +36,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
36
36
  optional :url, :string, 1941301
37
37
  optional :deprecation_date, :string, 1941302
38
38
  repeated :targets, :string, 1941401
39
+ optional :custom, :message, 1941305, "v1.CustomOptions"
39
40
  end
40
41
  add_message "v1.MessageOptions" do
41
42
  optional :porcelain, :bool, 1941301
data/lib/grpc/plumbing.rb CHANGED
@@ -6430,6 +6430,72 @@ module SDM
6430
6430
  end
6431
6431
  items
6432
6432
  end
6433
+ def self.convert_elasticache_redis_iam_to_porcelain(plumbing)
6434
+ if plumbing == nil
6435
+ return nil
6436
+ end
6437
+ porcelain = ElasticacheRedisIAM.new()
6438
+ porcelain.bind_interface = (plumbing.bind_interface)
6439
+ porcelain.egress_filter = (plumbing.egress_filter)
6440
+ porcelain.healthy = (plumbing.healthy)
6441
+ porcelain.hostname = (plumbing.hostname)
6442
+ porcelain.id = (plumbing.id)
6443
+ porcelain.name = (plumbing.name)
6444
+ porcelain.port = (plumbing.port)
6445
+ porcelain.port_override = (plumbing.port_override)
6446
+ porcelain.proxy_cluster_id = (plumbing.proxy_cluster_id)
6447
+ porcelain.region = (plumbing.region)
6448
+ porcelain.role_assumption_arn = (plumbing.role_assumption_arn)
6449
+ porcelain.role_external_id = (plumbing.role_external_id)
6450
+ porcelain.secret_store_id = (plumbing.secret_store_id)
6451
+ porcelain.subdomain = (plumbing.subdomain)
6452
+ porcelain.tags = convert_tags_to_porcelain(plumbing.tags)
6453
+ porcelain.tls_required = (plumbing.tls_required)
6454
+ porcelain.username = (plumbing.username)
6455
+ porcelain
6456
+ end
6457
+
6458
+ def self.convert_elasticache_redis_iam_to_plumbing(porcelain)
6459
+ if porcelain == nil
6460
+ return nil
6461
+ end
6462
+ plumbing = V1::ElasticacheRedisIAM.new()
6463
+ plumbing.bind_interface = (porcelain.bind_interface)
6464
+ plumbing.egress_filter = (porcelain.egress_filter)
6465
+ plumbing.healthy = (porcelain.healthy)
6466
+ plumbing.hostname = (porcelain.hostname)
6467
+ plumbing.id = (porcelain.id)
6468
+ plumbing.name = (porcelain.name)
6469
+ plumbing.port = (porcelain.port)
6470
+ plumbing.port_override = (porcelain.port_override)
6471
+ plumbing.proxy_cluster_id = (porcelain.proxy_cluster_id)
6472
+ plumbing.region = (porcelain.region)
6473
+ plumbing.role_assumption_arn = (porcelain.role_assumption_arn)
6474
+ plumbing.role_external_id = (porcelain.role_external_id)
6475
+ plumbing.secret_store_id = (porcelain.secret_store_id)
6476
+ plumbing.subdomain = (porcelain.subdomain)
6477
+ plumbing.tags = convert_tags_to_plumbing(porcelain.tags)
6478
+ plumbing.tls_required = (porcelain.tls_required)
6479
+ plumbing.username = (porcelain.username)
6480
+ plumbing
6481
+ end
6482
+ def self.convert_repeated_elasticache_redis_iam_to_plumbing(porcelains)
6483
+ items = Array.new
6484
+ porcelains.each do |porcelain|
6485
+ plumbing = convert_elasticache_redis_iam_to_plumbing(porcelain)
6486
+ items.append(plumbing)
6487
+ end
6488
+ items
6489
+ end
6490
+
6491
+ def self.convert_repeated_elasticache_redis_iam_to_porcelain(plumbings)
6492
+ items = Array.new
6493
+ plumbings.each do |plumbing|
6494
+ porcelain = convert_elasticache_redis_iam_to_porcelain(plumbing)
6495
+ items.append(porcelain)
6496
+ end
6497
+ items
6498
+ end
6433
6499
  def self.convert_entra_id_to_porcelain(plumbing)
6434
6500
  if plumbing == nil
6435
6501
  return nil
@@ -11519,6 +11585,46 @@ module SDM
11519
11585
  end
11520
11586
  items
11521
11587
  end
11588
+ def self.convert_node_tcp_probe_response_to_porcelain(plumbing)
11589
+ if plumbing == nil
11590
+ return nil
11591
+ end
11592
+ porcelain = NodeTCPProbeResponse.new()
11593
+ porcelain.error = (plumbing.error)
11594
+ porcelain.meta = convert_create_response_metadata_to_porcelain(plumbing.meta)
11595
+ porcelain.rate_limit = convert_rate_limit_metadata_to_porcelain(plumbing.rate_limit)
11596
+ porcelain.succeeded = (plumbing.succeeded)
11597
+ porcelain
11598
+ end
11599
+
11600
+ def self.convert_node_tcp_probe_response_to_plumbing(porcelain)
11601
+ if porcelain == nil
11602
+ return nil
11603
+ end
11604
+ plumbing = V1::NodeTCPProbeResponse.new()
11605
+ plumbing.error = (porcelain.error)
11606
+ plumbing.meta = convert_create_response_metadata_to_plumbing(porcelain.meta)
11607
+ plumbing.rate_limit = convert_rate_limit_metadata_to_plumbing(porcelain.rate_limit)
11608
+ plumbing.succeeded = (porcelain.succeeded)
11609
+ plumbing
11610
+ end
11611
+ def self.convert_repeated_node_tcp_probe_response_to_plumbing(porcelains)
11612
+ items = Array.new
11613
+ porcelains.each do |porcelain|
11614
+ plumbing = convert_node_tcp_probe_response_to_plumbing(porcelain)
11615
+ items.append(plumbing)
11616
+ end
11617
+ items
11618
+ end
11619
+
11620
+ def self.convert_repeated_node_tcp_probe_response_to_porcelain(plumbings)
11621
+ items = Array.new
11622
+ plumbings.each do |plumbing|
11623
+ porcelain = convert_node_tcp_probe_response_to_porcelain(plumbing)
11624
+ items.append(porcelain)
11625
+ end
11626
+ items
11627
+ end
11522
11628
  def self.convert_node_update_response_to_porcelain(plumbing)
11523
11629
  if plumbing == nil
11524
11630
  return nil
@@ -13226,6 +13332,8 @@ module SDM
13226
13332
  porcelain.healthy = (plumbing.healthy)
13227
13333
  porcelain.hostname = (plumbing.hostname)
13228
13334
  porcelain.id = (plumbing.id)
13335
+ porcelain.identity_alias_healthcheck_username = (plumbing.identity_alias_healthcheck_username)
13336
+ porcelain.identity_set_id = (plumbing.identity_set_id)
13229
13337
  porcelain.lock_required = (plumbing.lock_required)
13230
13338
  porcelain.name = (plumbing.name)
13231
13339
  porcelain.password = (plumbing.password)
@@ -13250,6 +13358,8 @@ module SDM
13250
13358
  plumbing.healthy = (porcelain.healthy)
13251
13359
  plumbing.hostname = (porcelain.hostname)
13252
13360
  plumbing.id = (porcelain.id)
13361
+ plumbing.identity_alias_healthcheck_username = (porcelain.identity_alias_healthcheck_username)
13362
+ plumbing.identity_set_id = (porcelain.identity_set_id)
13253
13363
  plumbing.lock_required = (porcelain.lock_required)
13254
13364
  plumbing.name = (porcelain.name)
13255
13365
  plumbing.password = (porcelain.password)
@@ -14563,6 +14673,9 @@ module SDM
14563
14673
  if porcelain.instance_of? ElasticacheRedis
14564
14674
  plumbing.elasticache_redis = convert_elasticache_redis_to_plumbing(porcelain)
14565
14675
  end
14676
+ if porcelain.instance_of? ElasticacheRedisIAM
14677
+ plumbing.elasticache_redis_iam = convert_elasticache_redis_iam_to_plumbing(porcelain)
14678
+ end
14566
14679
  if porcelain.instance_of? EntraID
14567
14680
  plumbing.entra_id = convert_entra_id_to_plumbing(porcelain)
14568
14681
  end
@@ -14900,6 +15013,9 @@ module SDM
14900
15013
  if plumbing.elasticache_redis != nil
14901
15014
  return convert_elasticache_redis_to_porcelain(plumbing.elasticache_redis)
14902
15015
  end
15016
+ if plumbing.elasticache_redis_iam != nil
15017
+ return convert_elasticache_redis_iam_to_porcelain(plumbing.elasticache_redis_iam)
15018
+ end
14903
15019
  if plumbing.entra_id != nil
14904
15020
  return convert_entra_id_to_porcelain(plumbing.entra_id)
14905
15021
  end
@@ -6352,6 +6352,90 @@ module SDM
6352
6352
  end
6353
6353
  end
6354
6354
 
6355
+ # ElasticacheRedisIAM is currently unstable, and its API may change, or it may be removed, without a major version bump.
6356
+ class ElasticacheRedisIAM
6357
+ # 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.
6358
+ attr_accessor :bind_interface
6359
+ # A filter applied to the routing logic to pin datasource to nodes.
6360
+ attr_accessor :egress_filter
6361
+ # True if the datasource is reachable and the credentials are valid.
6362
+ attr_accessor :healthy
6363
+ # The host to dial to initiate a connection from the egress node to this resource.
6364
+ attr_accessor :hostname
6365
+ # Unique identifier of the Resource.
6366
+ attr_accessor :id
6367
+ # Unique human-readable name of the Resource.
6368
+ attr_accessor :name
6369
+ # The port to dial to initiate a connection from the egress node to this resource.
6370
+ attr_accessor :port
6371
+ # 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.
6372
+ attr_accessor :port_override
6373
+ # ID of the proxy cluster for this resource, if any.
6374
+ attr_accessor :proxy_cluster_id
6375
+ # AWS region is needed in addition to hostname to generate the IAM signature
6376
+ attr_accessor :region
6377
+ # If provided, the gateway/relay will try to assume this role instead of the underlying compute's role.
6378
+ attr_accessor :role_assumption_arn
6379
+ # The external ID to associate with assume role requests. Does nothing if a role ARN is not provided.
6380
+ attr_accessor :role_external_id
6381
+ # ID of the secret store containing credentials for this resource, if any.
6382
+ attr_accessor :secret_store_id
6383
+ # 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.
6384
+ attr_accessor :subdomain
6385
+ # Tags is a map of key, value pairs.
6386
+ attr_accessor :tags
6387
+ # If set, TLS must be used to connect to this resource.
6388
+ attr_accessor :tls_required
6389
+ # The username to authenticate with.
6390
+ attr_accessor :username
6391
+
6392
+ def initialize(
6393
+ bind_interface: nil,
6394
+ egress_filter: nil,
6395
+ healthy: nil,
6396
+ hostname: nil,
6397
+ id: nil,
6398
+ name: nil,
6399
+ port: nil,
6400
+ port_override: nil,
6401
+ proxy_cluster_id: nil,
6402
+ region: nil,
6403
+ role_assumption_arn: nil,
6404
+ role_external_id: nil,
6405
+ secret_store_id: nil,
6406
+ subdomain: nil,
6407
+ tags: nil,
6408
+ tls_required: nil,
6409
+ username: nil
6410
+ )
6411
+ @bind_interface = bind_interface == nil ? "" : bind_interface
6412
+ @egress_filter = egress_filter == nil ? "" : egress_filter
6413
+ @healthy = healthy == nil ? false : healthy
6414
+ @hostname = hostname == nil ? "" : hostname
6415
+ @id = id == nil ? "" : id
6416
+ @name = name == nil ? "" : name
6417
+ @port = port == nil ? 0 : port
6418
+ @port_override = port_override == nil ? 0 : port_override
6419
+ @proxy_cluster_id = proxy_cluster_id == nil ? "" : proxy_cluster_id
6420
+ @region = region == nil ? "" : region
6421
+ @role_assumption_arn = role_assumption_arn == nil ? "" : role_assumption_arn
6422
+ @role_external_id = role_external_id == nil ? "" : role_external_id
6423
+ @secret_store_id = secret_store_id == nil ? "" : secret_store_id
6424
+ @subdomain = subdomain == nil ? "" : subdomain
6425
+ @tags = tags == nil ? SDM::_porcelain_zero_value_tags() : tags
6426
+ @tls_required = tls_required == nil ? false : tls_required
6427
+ @username = username == nil ? "" : username
6428
+ end
6429
+
6430
+ def to_json(options = {})
6431
+ hash = {}
6432
+ self.instance_variables.each do |var|
6433
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
6434
+ end
6435
+ hash.to_json
6436
+ end
6437
+ end
6438
+
6355
6439
  class EntraID
6356
6440
  # 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.
6357
6441
  attr_accessor :bind_interface
@@ -11091,6 +11175,38 @@ module SDM
11091
11175
  end
11092
11176
  end
11093
11177
 
11178
+ # NodeTCPProbeResponse reports the result of a TCP probe.
11179
+ class NodeTCPProbeResponse
11180
+ # The connection error reported by the node, or the empty string if the probe succeeded.
11181
+ attr_accessor :error
11182
+ # Reserved for future use.
11183
+ attr_accessor :meta
11184
+ # Rate limit information.
11185
+ attr_accessor :rate_limit
11186
+ # True if the node was able to connect to the target address.
11187
+ attr_accessor :succeeded
11188
+
11189
+ def initialize(
11190
+ error: nil,
11191
+ meta: nil,
11192
+ rate_limit: nil,
11193
+ succeeded: nil
11194
+ )
11195
+ @error = error == nil ? "" : error
11196
+ @meta = meta == nil ? nil : meta
11197
+ @rate_limit = rate_limit == nil ? nil : rate_limit
11198
+ @succeeded = succeeded == nil ? false : succeeded
11199
+ end
11200
+
11201
+ def to_json(options = {})
11202
+ hash = {}
11203
+ self.instance_variables.each do |var|
11204
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
11205
+ end
11206
+ hash.to_json
11207
+ end
11208
+ end
11209
+
11094
11210
  # NodeUpdateResponse returns the fields of a Node after it has been updated by
11095
11211
  # a NodeUpdateRequest.
11096
11212
  class NodeUpdateResponse
@@ -12718,6 +12834,10 @@ module SDM
12718
12834
  attr_accessor :hostname
12719
12835
  # Unique identifier of the Resource.
12720
12836
  attr_accessor :id
12837
+ # The username to use for healthchecks, when clients otherwise connect with their own identity alias username.
12838
+ attr_accessor :identity_alias_healthcheck_username
12839
+ # if provided use identity_set to map username to secret store path
12840
+ attr_accessor :identity_set_id
12721
12841
  # When set, require a resource lock to access the resource to ensure it can only be used by one user at a time.
12722
12842
  attr_accessor :lock_required
12723
12843
  # Unique human-readable name of the Resource.
@@ -12746,6 +12866,8 @@ module SDM
12746
12866
  healthy: nil,
12747
12867
  hostname: nil,
12748
12868
  id: nil,
12869
+ identity_alias_healthcheck_username: nil,
12870
+ identity_set_id: nil,
12749
12871
  lock_required: nil,
12750
12872
  name: nil,
12751
12873
  password: nil,
@@ -12763,6 +12885,8 @@ module SDM
12763
12885
  @healthy = healthy == nil ? false : healthy
12764
12886
  @hostname = hostname == nil ? "" : hostname
12765
12887
  @id = id == nil ? "" : id
12888
+ @identity_alias_healthcheck_username = identity_alias_healthcheck_username == nil ? "" : identity_alias_healthcheck_username
12889
+ @identity_set_id = identity_set_id == nil ? "" : identity_set_id
12766
12890
  @lock_required = lock_required == nil ? false : lock_required
12767
12891
  @name = name == nil ? "" : name
12768
12892
  @password = password == nil ? "" : password
data/lib/strongdm.rb CHANGED
@@ -30,7 +30,7 @@ module SDM #:nodoc:
30
30
  DEFAULT_RETRY_FACTOR = 1.6
31
31
  DEFAULT_RETRY_JITTER = 0.2
32
32
  API_VERSION = "2025-04-14"
33
- USER_AGENT = "strongdm-sdk-ruby/15.26.0"
33
+ USER_AGENT = "strongdm-sdk-ruby/15.28.0"
34
34
  private_constant :DEFAULT_BASE_RETRY_DELAY, :DEFAULT_MAX_RETRY_DELAY, :DEFAULT_RETRY_FACTOR, :DEFAULT_RETRY_JITTER, :API_VERSION, :USER_AGENT
35
35
 
36
36
  # Creates a new strongDM API client.
@@ -380,9 +380,11 @@ module SDM #:nodoc:
380
380
  #
381
381
  # See {ManagedSecrets}.
382
382
  attr_reader :managed_secrets
383
- # Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes:
384
- # - **Gateways** are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers.
385
- # - **Relays** are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections.
383
+ # Nodes make up the StrongDM network, and allow your users to connect securely to your resources.
384
+ # There are three types of nodes:
385
+ # 1. **Relay:** creates connectivity to your datasources, while maintaining the egress-only nature of your firewall
386
+ # 2. **Gateway:** a relay that also listens for connections from StrongDM clients
387
+ # 3. **Proxy Cluster:** a cluster of workers that together mediate access from clients to resources
386
388
  #
387
389
  # See {Nodes}.
388
390
  attr_reader :nodes
@@ -694,9 +696,11 @@ module SDM #:nodoc:
694
696
  #
695
697
  # See {SnapshotIdentitySets}.
696
698
  attr_reader :identity_sets
697
- # Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes:
698
- # - **Gateways** are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers.
699
- # - **Relays** are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections.
699
+ # Nodes make up the StrongDM network, and allow your users to connect securely to your resources.
700
+ # There are three types of nodes:
701
+ # 1. **Relay:** creates connectivity to your datasources, while maintaining the egress-only nature of your firewall
702
+ # 2. **Gateway:** a relay that also listens for connections from StrongDM clients
703
+ # 3. **Proxy Cluster:** a cluster of workers that together mediate access from clients to resources
700
704
  #
701
705
  # See {SnapshotNodes}.
702
706
  attr_reader :nodes
data/lib/svc.rb CHANGED
@@ -4061,9 +4061,11 @@ module SDM #:nodoc:
4061
4061
  end
4062
4062
  end
4063
4063
 
4064
- # Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes:
4065
- # - **Gateways** are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers.
4066
- # - **Relays** are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections.
4064
+ # Nodes make up the StrongDM network, and allow your users to connect securely to your resources.
4065
+ # There are three types of nodes:
4066
+ # 1. **Relay:** creates connectivity to your datasources, while maintaining the egress-only nature of your firewall
4067
+ # 2. **Gateway:** a relay that also listens for connections from StrongDM clients
4068
+ # 3. **Proxy Cluster:** a cluster of workers that together mediate access from clients to resources
4067
4069
  #
4068
4070
  # See:
4069
4071
  # {Gateway}
@@ -4243,6 +4245,42 @@ module SDM #:nodoc:
4243
4245
  }
4244
4246
  resp
4245
4247
  end
4248
+
4249
+ # TCPProbe instructs a Node to connect to an address via TCP and report the
4250
+ # result.
4251
+ def tcp_probe(
4252
+ node_id,
4253
+ host,
4254
+ port,
4255
+ deadline: nil
4256
+ )
4257
+ req = V1::NodeTCPProbeRequest.new()
4258
+
4259
+ req.node_id = (node_id)
4260
+ req.host = (host)
4261
+ req.port = (port)
4262
+ tries = 0
4263
+ plumbing_response = nil
4264
+ loop do
4265
+ begin
4266
+ plumbing_response = @stub.tcp_probe(req, metadata: @parent.get_metadata("Nodes.TCPProbe", req), deadline: deadline)
4267
+ rescue => exception
4268
+ if (@parent.shouldRetry(tries, exception, deadline))
4269
+ tries + +sleep(@parent.exponentialBackoff(tries, deadline))
4270
+ next
4271
+ end
4272
+ raise Plumbing::convert_error_to_porcelain(exception)
4273
+ end
4274
+ break
4275
+ end
4276
+
4277
+ resp = NodeTCPProbeResponse.new()
4278
+ resp.error = (plumbing_response.error)
4279
+ resp.meta = Plumbing::convert_create_response_metadata_to_porcelain(plumbing_response.meta)
4280
+ resp.rate_limit = Plumbing::convert_rate_limit_metadata_to_porcelain(plumbing_response.rate_limit)
4281
+ resp.succeeded = (plumbing_response.succeeded)
4282
+ resp
4283
+ end
4246
4284
  end
4247
4285
 
4248
4286
  # SnapshotNodes exposes the read only methods of the Nodes
@@ -6045,6 +6083,7 @@ module SDM #:nodoc:
6045
6083
  # {DynamoDBIAM}
6046
6084
  # {Elastic}
6047
6085
  # {ElasticacheRedis}
6086
+ # {ElasticacheRedisIAM}
6048
6087
  # {EntraID}
6049
6088
  # {GCP}
6050
6089
  # {GCPConsole}
data/lib/version CHANGED
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
  #
15
15
  module SDM
16
- VERSION = "15.26.0"
16
+ VERSION = "15.28.0"
17
17
  end
data/lib/version.rb CHANGED
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
  #
15
15
  module SDM
16
- VERSION = "15.26.0"
16
+ VERSION = "15.28.0"
17
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strongdm
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.26.0
4
+ version: 15.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - strongDM Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-22 00:00:00.000000000 Z
11
+ date: 2025-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc
@@ -81,8 +81,8 @@ files:
81
81
  - "./.git/logs/HEAD"
82
82
  - "./.git/logs/refs/heads/master"
83
83
  - "./.git/logs/refs/remotes/origin/HEAD"
84
- - "./.git/objects/pack/pack-c7c08cb7bc1b28fe985a95fcfab51cb58c8e3705.idx"
85
- - "./.git/objects/pack/pack-c7c08cb7bc1b28fe985a95fcfab51cb58c8e3705.pack"
84
+ - "./.git/objects/pack/pack-57422f9648cd00a4b26afeacb8a0ba4bd5eb4b5b.idx"
85
+ - "./.git/objects/pack/pack-57422f9648cd00a4b26afeacb8a0ba4bd5eb4b5b.pack"
86
86
  - "./.git/packed-refs"
87
87
  - "./.git/refs/heads/master"
88
88
  - "./.git/refs/remotes/origin/HEAD"