strongdm 17.2.0 → 17.4.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: 6b44bd1d6ac4e929666e3a944a1484a020e22e8df3a635d32a71c1600b02cea3
4
- data.tar.gz: 0c8d963ae8ad3ee6d53bb6c2cb2c5123cb60b131715189e214b0907a7544fab8
3
+ metadata.gz: 580acc1ed9278a0c9561311df9ae116844bddb5201176ee6fc6fb47ea2aaeedf
4
+ data.tar.gz: 7b3c8d0219a12f1f57a02a0e84a8ddf2bfccaee549fb8025b23751370e543ecf
5
5
  SHA512:
6
- metadata.gz: 155c213b4119be483577497d33e36d2958cff080a06fc03fc97d97e13750519582a837a536466f29f218e08af5d539a666a2319581a85d5fba9aedff26e0f76a
7
- data.tar.gz: bc42158b1c0fecb667e6562ad20c062a65499c898c70967865c2fab2745f218fa7b31d4c220571f0132a76235bfa7b407153787bf8bedfedebf81b5f4294a611
6
+ metadata.gz: ad44932db9ecb1c0e9a8acbe9e9e9abfe5b8cc882d73bf7a5104a8805de20a33ad8112d4a84a9febf6cc5425db1bbe6509d663584b03fad64190fce92f70edf9
7
+ data.tar.gz: dfef5d51a3bf53a81d64b55ad04dc460473d0157f89db775cd02b3a9e35cb36da1a82918b9c07cb7c2bb67d834eaff65e0985dc286fd0cdf74e1e997b7e19f27
data/.git/ORIG_HEAD CHANGED
@@ -1 +1 @@
1
- 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48
1
+ dc10f48d22db35fa4756342f7d1c30bc0c3365a6
data/.git/index CHANGED
Binary file
data/.git/logs/HEAD CHANGED
@@ -1,3 +1,3 @@
1
- 0000000000000000000000000000000000000000 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 root <root@727dbfa9690c.(none)> 1777457472 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
- 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 root <root@727dbfa9690c.(none)> 1777457472 +0000 checkout: moving from master to master
3
- 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 dc10f48d22db35fa4756342f7d1c30bc0c3365a6 root <root@727dbfa9690c.(none)> 1777457472 +0000 merge origin/development: Fast-forward
1
+ 0000000000000000000000000000000000000000 dc10f48d22db35fa4756342f7d1c30bc0c3365a6 root <root@4d0dc992c3e3.(none)> 1777908565 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
+ dc10f48d22db35fa4756342f7d1c30bc0c3365a6 dc10f48d22db35fa4756342f7d1c30bc0c3365a6 root <root@4d0dc992c3e3.(none)> 1777908565 +0000 checkout: moving from master to master
3
+ dc10f48d22db35fa4756342f7d1c30bc0c3365a6 30b485e69242afeb16291ec3ac66be276363f8a1 root <root@4d0dc992c3e3.(none)> 1777908565 +0000 merge origin/development: Fast-forward
@@ -1,2 +1,2 @@
1
- 0000000000000000000000000000000000000000 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 root <root@727dbfa9690c.(none)> 1777457472 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
- 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 dc10f48d22db35fa4756342f7d1c30bc0c3365a6 root <root@727dbfa9690c.(none)> 1777457472 +0000 merge origin/development: Fast-forward
1
+ 0000000000000000000000000000000000000000 dc10f48d22db35fa4756342f7d1c30bc0c3365a6 root <root@4d0dc992c3e3.(none)> 1777908565 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
2
+ dc10f48d22db35fa4756342f7d1c30bc0c3365a6 30b485e69242afeb16291ec3ac66be276363f8a1 root <root@4d0dc992c3e3.(none)> 1777908565 +0000 merge origin/development: Fast-forward
@@ -1 +1 @@
1
- 0000000000000000000000000000000000000000 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 root <root@727dbfa9690c.(none)> 1777457472 +0000 clone: from github.com:strongdm/strongdm-sdk-ruby.git
1
+ 0000000000000000000000000000000000000000 dc10f48d22db35fa4756342f7d1c30bc0c3365a6 root <root@4d0dc992c3e3.(none)> 1777908565 +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
- dc10f48d22db35fa4756342f7d1c30bc0c3365a6 refs/remotes/origin/development
3
- 80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 refs/remotes/origin/master
2
+ 30b485e69242afeb16291ec3ac66be276363f8a1 refs/remotes/origin/development
3
+ dc10f48d22db35fa4756342f7d1c30bc0c3365a6 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
@@ -161,6 +161,7 @@ f1adf906557d59b87f34abb19d7f8aa1c5665f3f refs/tags/v16.8.0
161
161
  198062e97957107a8723fb8fbd714b174bc67b90 refs/tags/v16.9.0
162
162
  5f7f719a5c803d95cebb885aebb5dc5161e14c00 refs/tags/v17.0.0
163
163
  80d8f6f6e484a8fd5ec273cad249e9d7a9767d48 refs/tags/v17.1.0
164
+ dc10f48d22db35fa4756342f7d1c30bc0c3365a6 refs/tags/v17.2.0
164
165
  e0b1ec0134c7015ccb8c14464cc713c20034159e refs/tags/v2.0.0
165
166
  62a146d9d56852b2ad14ec5d2796cad158d66e1c refs/tags/v2.1.0
166
167
  9de04e628082f4ad0eb9511311479a089d302008 refs/tags/v2.2.0
@@ -1 +1 @@
1
- dc10f48d22db35fa4756342f7d1c30bc0c3365a6
1
+ 30b485e69242afeb16291ec3ac66be276363f8a1
@@ -95,6 +95,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
95
95
  optional :kubernetes_service_account, :message, 804, "v1.KubernetesServiceAccount"
96
96
  optional :kubernetes_service_account_user_impersonation, :message, 808, "v1.KubernetesServiceAccountUserImpersonation"
97
97
  optional :kubernetes_user_impersonation, :message, 812, "v1.KubernetesUserImpersonation"
98
+ optional :llm, :message, 4900, "v1.LLM"
98
99
  optional :mcp_gateway_no_auth, :message, 4703, "v1.MCPGatewayNoAuth"
99
100
  optional :mcp_gateway_o_auth, :message, 4700, "v1.MCPGatewayOAuth"
100
101
  optional :mcp_gateway_o_auth_dcr, :message, 4701, "v1.MCPGatewayOAuthDCR"
@@ -1407,6 +1408,21 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
1407
1408
  optional :port, :int32, 2
1408
1409
  optional :port_override, :int32, 10
1409
1410
  end
1411
+ add_message "v1.LLM" do
1412
+ optional :id, :string, 32768
1413
+ optional :name, :string, 32769
1414
+ optional :healthy, :bool, 32770
1415
+ optional :tags, :message, 32771, "v1.Tags"
1416
+ optional :secret_store_id, :string, 32772
1417
+ optional :egress_filter, :string, 32773
1418
+ optional :bind_interface, :string, 32774
1419
+ optional :proxy_cluster_id, :string, 32776
1420
+ optional :subdomain, :string, 32775
1421
+ optional :models, :string, 10
1422
+ optional :password, :string, 2
1423
+ optional :port_override, :int32, 4
1424
+ optional :url, :string, 9
1425
+ end
1410
1426
  add_message "v1.MCPGatewayNoAuth" do
1411
1427
  optional :id, :string, 32768
1412
1428
  optional :name, :string, 32769
@@ -2340,6 +2356,7 @@ module V1
2340
2356
  KubernetesServiceAccount = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.KubernetesServiceAccount").msgclass
2341
2357
  KubernetesServiceAccountUserImpersonation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.KubernetesServiceAccountUserImpersonation").msgclass
2342
2358
  KubernetesUserImpersonation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.KubernetesUserImpersonation").msgclass
2359
+ LLM = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.LLM").msgclass
2343
2360
  MCPGatewayNoAuth = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.MCPGatewayNoAuth").msgclass
2344
2361
  MCPGatewayOAuth = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.MCPGatewayOAuth").msgclass
2345
2362
  MCPGatewayOAuthDCR = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.MCPGatewayOAuthDCR").msgclass
@@ -0,0 +1,102 @@
1
+ # Copyright 2020 StrongDM Inc
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
16
+ # source: organizations.proto
17
+
18
+ require "google/protobuf"
19
+
20
+ require "organization_history_pb"
21
+ require "options_pb"
22
+ require "spec_pb"
23
+
24
+ Google::Protobuf::DescriptorPool.generated_pool.build do
25
+ add_file("organizations.proto", :syntax => :proto3) do
26
+ add_message "v1.OrganizationUpdateRequest" do
27
+ optional :meta, :message, 1, "v1.UpdateRequestMetadata"
28
+ optional :organization, :message, 2, "v1.Organization"
29
+ end
30
+ add_message "v1.OrganizationUpdateResponse" do
31
+ optional :meta, :message, 1, "v1.UpdateResponseMetadata"
32
+ optional :organization, :message, 2, "v1.Organization"
33
+ optional :rate_limit, :message, 3, "v1.RateLimitMetadata"
34
+ end
35
+ add_message "v1.OrganizationGetRequest" do
36
+ optional :meta, :message, 1, "v1.GetRequestMetadata"
37
+ end
38
+ add_message "v1.OrganizationGetResponse" do
39
+ optional :meta, :message, 1, "v1.GetResponseMetadata"
40
+ optional :organization, :message, 2, "v1.Organization"
41
+ optional :rate_limit, :message, 3, "v1.RateLimitMetadata"
42
+ end
43
+ add_message "v1.MFAConfig" do
44
+ optional :enabled, :bool, 1
45
+ optional :provider, :string, 2
46
+ optional :okta, :message, 3, "v1.OktaMFAConfig"
47
+ end
48
+ add_message "v1.OktaMFAConfig" do
49
+ optional :auth_mode, :string, 1
50
+ optional :api_token, :string, 2
51
+ optional :api_token_set, :bool, 3
52
+ optional :client_id, :string, 4
53
+ optional :private_key_pem, :string, 5
54
+ optional :private_key_pem_set, :bool, 6
55
+ optional :organization_url, :string, 7
56
+ optional :multidevice_push_enabled, :bool, 8
57
+ optional :user_lookup, :string, 9
58
+ optional :private_key_id, :string, 10
59
+ optional :private_key_id_set, :bool, 11
60
+ end
61
+ add_message "v1.OrganizationGetMFARequest" do
62
+ optional :meta, :message, 1, "v1.GetRequestMetadata"
63
+ end
64
+ add_message "v1.OrganizationGetMFAResponse" do
65
+ optional :meta, :message, 1, "v1.GetResponseMetadata"
66
+ optional :mfa, :message, 2, "v1.MFAConfig"
67
+ optional :rate_limit, :message, 3, "v1.RateLimitMetadata"
68
+ end
69
+ add_message "v1.OrganizationUpdateMFARequest" do
70
+ optional :meta, :message, 1, "v1.UpdateRequestMetadata"
71
+ optional :mfa, :message, 2, "v1.MFAConfig"
72
+ end
73
+ add_message "v1.OrganizationUpdateMFAResponse" do
74
+ optional :meta, :message, 1, "v1.UpdateResponseMetadata"
75
+ optional :mfa, :message, 2, "v1.MFAConfig"
76
+ optional :rate_limit, :message, 3, "v1.RateLimitMetadata"
77
+ end
78
+ add_message "v1.OrganizationTestMFARequest" do
79
+ optional :meta, :message, 1, "v1.UpdateRequestMetadata"
80
+ optional :mfa, :message, 2, "v1.MFAConfig"
81
+ end
82
+ add_message "v1.OrganizationTestMFAResponse" do
83
+ optional :meta, :message, 1, "v1.UpdateResponseMetadata"
84
+ optional :rate_limit, :message, 3, "v1.RateLimitMetadata"
85
+ end
86
+ end
87
+ end
88
+
89
+ module V1
90
+ OrganizationUpdateRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationUpdateRequest").msgclass
91
+ OrganizationUpdateResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationUpdateResponse").msgclass
92
+ OrganizationGetRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationGetRequest").msgclass
93
+ OrganizationGetResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationGetResponse").msgclass
94
+ MFAConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.MFAConfig").msgclass
95
+ OktaMFAConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OktaMFAConfig").msgclass
96
+ OrganizationGetMFARequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationGetMFARequest").msgclass
97
+ OrganizationGetMFAResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationGetMFAResponse").msgclass
98
+ OrganizationUpdateMFARequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationUpdateMFARequest").msgclass
99
+ OrganizationUpdateMFAResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationUpdateMFAResponse").msgclass
100
+ OrganizationTestMFARequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationTestMFARequest").msgclass
101
+ OrganizationTestMFAResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("v1.OrganizationTestMFAResponse").msgclass
102
+ end
@@ -0,0 +1,49 @@
1
+ # Copyright 2020 StrongDM Inc
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
16
+ # Source: organizations.proto for package 'v1'
17
+
18
+ require "grpc"
19
+ require "organizations_pb"
20
+
21
+ module V1
22
+ module Organizations
23
+ # Organizations exposes organization configuration. Most RPCs remain private to the
24
+ # go_private SDK; public MFA management is exposed to all public SDK targets.
25
+ # The terraform-provider target is opted out at the service level because the
26
+ # provider's data-source generator assumes every service has a List RPC; MFA is
27
+ # instead surfaced via a hand-written resource template.
28
+ class Service
29
+ include ::GRPC::GenericService
30
+
31
+ self.marshal_class_method = :encode
32
+ self.unmarshal_class_method = :decode
33
+ self.service_name = "v1.Organizations"
34
+
35
+ # Update updates an existing organization.
36
+ rpc :Update, ::V1::OrganizationUpdateRequest, ::V1::OrganizationUpdateResponse
37
+ # Get gets an organization
38
+ rpc :Get, ::V1::OrganizationGetRequest, ::V1::OrganizationGetResponse
39
+ # GetMFA gets the organization's MFA configuration.
40
+ rpc :GetMFA, ::V1::OrganizationGetMFARequest, ::V1::OrganizationGetMFAResponse
41
+ # UpdateMFA updates the organization's MFA configuration.
42
+ rpc :UpdateMFA, ::V1::OrganizationUpdateMFARequest, ::V1::OrganizationUpdateMFAResponse
43
+ # TestMFA validates MFA connectivity without persisting changes.
44
+ rpc :TestMFA, ::V1::OrganizationTestMFARequest, ::V1::OrganizationTestMFAResponse
45
+ end
46
+
47
+ Stub = Service.rpc_stub_class
48
+ end
49
+ end
data/lib/grpc/plumbing.rb CHANGED
@@ -66,6 +66,7 @@ require_relative "./managed_secrets_pb"
66
66
  require_relative "./nodes_pb"
67
67
  require_relative "./nodes_history_pb"
68
68
  require_relative "./organization_history_pb"
69
+ require_relative "./organizations_pb"
69
70
  require_relative "./peering_group_nodes_pb"
70
71
  require_relative "./peering_group_peers_pb"
71
72
  require_relative "./peering_group_resources_pb"
@@ -385,6 +386,8 @@ module SDM
385
386
  return SDM::ResourceType::RESOURCE_TYPE_KUBERNETES_SERVICE_ACCOUNT_USER_IMPERSONATION
386
387
  when V1::ResourceType::RESOURCE_TYPE_KUBERNETES_USER_IMPERSONATION
387
388
  return SDM::ResourceType::RESOURCE_TYPE_KUBERNETES_USER_IMPERSONATION
389
+ when V1::ResourceType::RESOURCE_TYPE_LLM
390
+ return SDM::ResourceType::RESOURCE_TYPE_LLM
388
391
  when V1::ResourceType::RESOURCE_TYPE_MCP_NO_AUTH
389
392
  return SDM::ResourceType::RESOURCE_TYPE_MCP_NO_AUTH
390
393
  when V1::ResourceType::RESOURCE_TYPE_MCP
@@ -643,6 +646,8 @@ module SDM
643
646
  value = V1::ResourceType::RESOURCE_TYPE_KUBERNETES_SERVICE_ACCOUNT_USER_IMPERSONATION
644
647
  when SDM::ResourceType::RESOURCE_TYPE_KUBERNETES_USER_IMPERSONATION, "RESOURCE_TYPE_KUBERNETES_USER_IMPERSONATION"
645
648
  value = V1::ResourceType::RESOURCE_TYPE_KUBERNETES_USER_IMPERSONATION
649
+ when SDM::ResourceType::RESOURCE_TYPE_LLM, "RESOURCE_TYPE_LLM"
650
+ value = V1::ResourceType::RESOURCE_TYPE_LLM
646
651
  when SDM::ResourceType::RESOURCE_TYPE_MCP_NO_AUTH, "RESOURCE_TYPE_MCP_NO_AUTH"
647
652
  value = V1::ResourceType::RESOURCE_TYPE_MCP_NO_AUTH
648
653
  when SDM::ResourceType::RESOURCE_TYPE_MCP, "RESOURCE_TYPE_MCP"
@@ -11026,6 +11031,64 @@ module SDM
11026
11031
  end
11027
11032
  items
11028
11033
  end
11034
+ def self.convert_llm_to_porcelain(plumbing)
11035
+ if plumbing == nil
11036
+ return nil
11037
+ end
11038
+ porcelain = LLM.new()
11039
+ porcelain.bind_interface = (plumbing.bind_interface)
11040
+ porcelain.egress_filter = (plumbing.egress_filter)
11041
+ porcelain.healthy = (plumbing.healthy)
11042
+ porcelain.id = (plumbing.id)
11043
+ porcelain.models = (plumbing.models)
11044
+ porcelain.name = (plumbing.name)
11045
+ porcelain.password = (plumbing.password)
11046
+ porcelain.port_override = (plumbing.port_override)
11047
+ porcelain.proxy_cluster_id = (plumbing.proxy_cluster_id)
11048
+ porcelain.secret_store_id = (plumbing.secret_store_id)
11049
+ porcelain.subdomain = (plumbing.subdomain)
11050
+ porcelain.tags = convert_tags_to_porcelain(plumbing.tags)
11051
+ porcelain.url = (plumbing.url)
11052
+ porcelain
11053
+ end
11054
+
11055
+ def self.convert_llm_to_plumbing(porcelain)
11056
+ if porcelain == nil
11057
+ return nil
11058
+ end
11059
+ plumbing = V1::LLM.new()
11060
+ plumbing.bind_interface = (porcelain.bind_interface)
11061
+ plumbing.egress_filter = (porcelain.egress_filter)
11062
+ plumbing.healthy = (porcelain.healthy)
11063
+ plumbing.id = (porcelain.id)
11064
+ plumbing.models = (porcelain.models)
11065
+ plumbing.name = (porcelain.name)
11066
+ plumbing.password = (porcelain.password)
11067
+ plumbing.port_override = (porcelain.port_override)
11068
+ plumbing.proxy_cluster_id = (porcelain.proxy_cluster_id)
11069
+ plumbing.secret_store_id = (porcelain.secret_store_id)
11070
+ plumbing.subdomain = (porcelain.subdomain)
11071
+ plumbing.tags = convert_tags_to_plumbing(porcelain.tags)
11072
+ plumbing.url = (porcelain.url)
11073
+ plumbing
11074
+ end
11075
+ def self.convert_repeated_llm_to_plumbing(porcelains)
11076
+ items = Array.new
11077
+ porcelains.each do |porcelain|
11078
+ plumbing = convert_llm_to_plumbing(porcelain)
11079
+ items.append(plumbing)
11080
+ end
11081
+ items
11082
+ end
11083
+
11084
+ def self.convert_repeated_llm_to_porcelain(plumbings)
11085
+ items = Array.new
11086
+ plumbings.each do |plumbing|
11087
+ porcelain = convert_llm_to_porcelain(plumbing)
11088
+ items.append(porcelain)
11089
+ end
11090
+ items
11091
+ end
11029
11092
  def self.convert_log_category_config_to_porcelain(plumbing)
11030
11093
  if plumbing == nil
11031
11094
  return nil
@@ -11352,6 +11415,44 @@ module SDM
11352
11415
  end
11353
11416
  items
11354
11417
  end
11418
+ def self.convert_mfa_config_to_porcelain(plumbing)
11419
+ if plumbing == nil
11420
+ return nil
11421
+ end
11422
+ porcelain = MFAConfig.new()
11423
+ porcelain.enabled = (plumbing.enabled)
11424
+ porcelain.okta = convert_okta_mfa_config_to_porcelain(plumbing.okta)
11425
+ porcelain.provider = (plumbing.provider)
11426
+ porcelain
11427
+ end
11428
+
11429
+ def self.convert_mfa_config_to_plumbing(porcelain)
11430
+ if porcelain == nil
11431
+ return nil
11432
+ end
11433
+ plumbing = V1::MFAConfig.new()
11434
+ plumbing.enabled = (porcelain.enabled)
11435
+ plumbing.okta = convert_okta_mfa_config_to_plumbing(porcelain.okta)
11436
+ plumbing.provider = (porcelain.provider)
11437
+ plumbing
11438
+ end
11439
+ def self.convert_repeated_mfa_config_to_plumbing(porcelains)
11440
+ items = Array.new
11441
+ porcelains.each do |porcelain|
11442
+ plumbing = convert_mfa_config_to_plumbing(porcelain)
11443
+ items.append(plumbing)
11444
+ end
11445
+ items
11446
+ end
11447
+
11448
+ def self.convert_repeated_mfa_config_to_porcelain(plumbings)
11449
+ items = Array.new
11450
+ plumbings.each do |plumbing|
11451
+ porcelain = convert_mfa_config_to_porcelain(plumbing)
11452
+ items.append(porcelain)
11453
+ end
11454
+ items
11455
+ end
11355
11456
  def self.convert_mtls_mysql_to_porcelain(plumbing)
11356
11457
  if plumbing == nil
11357
11458
  return nil
@@ -13523,6 +13624,60 @@ module SDM
13523
13624
  end
13524
13625
  items
13525
13626
  end
13627
+ def self.convert_okta_mfa_config_to_porcelain(plumbing)
13628
+ if plumbing == nil
13629
+ return nil
13630
+ end
13631
+ porcelain = OktaMFAConfig.new()
13632
+ porcelain.api_token = (plumbing.api_token)
13633
+ porcelain.api_token_set = (plumbing.api_token_set)
13634
+ porcelain.auth_mode = (plumbing.auth_mode)
13635
+ porcelain.client_id = (plumbing.client_id)
13636
+ porcelain.multidevice_push_enabled = (plumbing.multidevice_push_enabled)
13637
+ porcelain.organization_url = (plumbing.organization_url)
13638
+ porcelain.private_key_id = (plumbing.private_key_id)
13639
+ porcelain.private_key_id_set = (plumbing.private_key_id_set)
13640
+ porcelain.private_key_pem = (plumbing.private_key_pem)
13641
+ porcelain.private_key_pem_set = (plumbing.private_key_pem_set)
13642
+ porcelain.user_lookup = (plumbing.user_lookup)
13643
+ porcelain
13644
+ end
13645
+
13646
+ def self.convert_okta_mfa_config_to_plumbing(porcelain)
13647
+ if porcelain == nil
13648
+ return nil
13649
+ end
13650
+ plumbing = V1::OktaMFAConfig.new()
13651
+ plumbing.api_token = (porcelain.api_token)
13652
+ plumbing.api_token_set = (porcelain.api_token_set)
13653
+ plumbing.auth_mode = (porcelain.auth_mode)
13654
+ plumbing.client_id = (porcelain.client_id)
13655
+ plumbing.multidevice_push_enabled = (porcelain.multidevice_push_enabled)
13656
+ plumbing.organization_url = (porcelain.organization_url)
13657
+ plumbing.private_key_id = (porcelain.private_key_id)
13658
+ plumbing.private_key_id_set = (porcelain.private_key_id_set)
13659
+ plumbing.private_key_pem = (porcelain.private_key_pem)
13660
+ plumbing.private_key_pem_set = (porcelain.private_key_pem_set)
13661
+ plumbing.user_lookup = (porcelain.user_lookup)
13662
+ plumbing
13663
+ end
13664
+ def self.convert_repeated_okta_mfa_config_to_plumbing(porcelains)
13665
+ items = Array.new
13666
+ porcelains.each do |porcelain|
13667
+ plumbing = convert_okta_mfa_config_to_plumbing(porcelain)
13668
+ items.append(plumbing)
13669
+ end
13670
+ items
13671
+ end
13672
+
13673
+ def self.convert_repeated_okta_mfa_config_to_porcelain(plumbings)
13674
+ items = Array.new
13675
+ plumbings.each do |plumbing|
13676
+ porcelain = convert_okta_mfa_config_to_porcelain(plumbing)
13677
+ items.append(porcelain)
13678
+ end
13679
+ items
13680
+ end
13526
13681
  def self.convert_oracle_to_porcelain(plumbing)
13527
13682
  if plumbing == nil
13528
13683
  return nil
@@ -13745,6 +13900,44 @@ module SDM
13745
13900
  end
13746
13901
  items
13747
13902
  end
13903
+ def self.convert_organization_get_mfa_response_to_porcelain(plumbing)
13904
+ if plumbing == nil
13905
+ return nil
13906
+ end
13907
+ porcelain = OrganizationGetMFAResponse.new()
13908
+ porcelain.meta = convert_get_response_metadata_to_porcelain(plumbing.meta)
13909
+ porcelain.mfa = convert_mfa_config_to_porcelain(plumbing.mfa)
13910
+ porcelain.rate_limit = convert_rate_limit_metadata_to_porcelain(plumbing.rate_limit)
13911
+ porcelain
13912
+ end
13913
+
13914
+ def self.convert_organization_get_mfa_response_to_plumbing(porcelain)
13915
+ if porcelain == nil
13916
+ return nil
13917
+ end
13918
+ plumbing = V1::OrganizationGetMFAResponse.new()
13919
+ plumbing.meta = convert_get_response_metadata_to_plumbing(porcelain.meta)
13920
+ plumbing.mfa = convert_mfa_config_to_plumbing(porcelain.mfa)
13921
+ plumbing.rate_limit = convert_rate_limit_metadata_to_plumbing(porcelain.rate_limit)
13922
+ plumbing
13923
+ end
13924
+ def self.convert_repeated_organization_get_mfa_response_to_plumbing(porcelains)
13925
+ items = Array.new
13926
+ porcelains.each do |porcelain|
13927
+ plumbing = convert_organization_get_mfa_response_to_plumbing(porcelain)
13928
+ items.append(plumbing)
13929
+ end
13930
+ items
13931
+ end
13932
+
13933
+ def self.convert_repeated_organization_get_mfa_response_to_porcelain(plumbings)
13934
+ items = Array.new
13935
+ plumbings.each do |plumbing|
13936
+ porcelain = convert_organization_get_mfa_response_to_porcelain(plumbing)
13937
+ items.append(porcelain)
13938
+ end
13939
+ items
13940
+ end
13748
13941
  def self.convert_organization_history_record_to_porcelain(plumbing)
13749
13942
  if plumbing == nil
13750
13943
  return nil
@@ -13783,6 +13976,76 @@ module SDM
13783
13976
  end
13784
13977
  items
13785
13978
  end
13979
+ def self.convert_organization_test_mfa_response_to_porcelain(plumbing)
13980
+ if plumbing == nil
13981
+ return nil
13982
+ end
13983
+ porcelain = OrganizationTestMFAResponse.new()
13984
+ porcelain.rate_limit = convert_rate_limit_metadata_to_porcelain(plumbing.rate_limit)
13985
+ porcelain
13986
+ end
13987
+
13988
+ def self.convert_organization_test_mfa_response_to_plumbing(porcelain)
13989
+ if porcelain == nil
13990
+ return nil
13991
+ end
13992
+ plumbing = V1::OrganizationTestMFAResponse.new()
13993
+ plumbing.rate_limit = convert_rate_limit_metadata_to_plumbing(porcelain.rate_limit)
13994
+ plumbing
13995
+ end
13996
+ def self.convert_repeated_organization_test_mfa_response_to_plumbing(porcelains)
13997
+ items = Array.new
13998
+ porcelains.each do |porcelain|
13999
+ plumbing = convert_organization_test_mfa_response_to_plumbing(porcelain)
14000
+ items.append(plumbing)
14001
+ end
14002
+ items
14003
+ end
14004
+
14005
+ def self.convert_repeated_organization_test_mfa_response_to_porcelain(plumbings)
14006
+ items = Array.new
14007
+ plumbings.each do |plumbing|
14008
+ porcelain = convert_organization_test_mfa_response_to_porcelain(plumbing)
14009
+ items.append(porcelain)
14010
+ end
14011
+ items
14012
+ end
14013
+ def self.convert_organization_update_mfa_response_to_porcelain(plumbing)
14014
+ if plumbing == nil
14015
+ return nil
14016
+ end
14017
+ porcelain = OrganizationUpdateMFAResponse.new()
14018
+ porcelain.mfa = convert_mfa_config_to_porcelain(plumbing.mfa)
14019
+ porcelain.rate_limit = convert_rate_limit_metadata_to_porcelain(plumbing.rate_limit)
14020
+ porcelain
14021
+ end
14022
+
14023
+ def self.convert_organization_update_mfa_response_to_plumbing(porcelain)
14024
+ if porcelain == nil
14025
+ return nil
14026
+ end
14027
+ plumbing = V1::OrganizationUpdateMFAResponse.new()
14028
+ plumbing.mfa = convert_mfa_config_to_plumbing(porcelain.mfa)
14029
+ plumbing.rate_limit = convert_rate_limit_metadata_to_plumbing(porcelain.rate_limit)
14030
+ plumbing
14031
+ end
14032
+ def self.convert_repeated_organization_update_mfa_response_to_plumbing(porcelains)
14033
+ items = Array.new
14034
+ porcelains.each do |porcelain|
14035
+ plumbing = convert_organization_update_mfa_response_to_plumbing(porcelain)
14036
+ items.append(plumbing)
14037
+ end
14038
+ items
14039
+ end
14040
+
14041
+ def self.convert_repeated_organization_update_mfa_response_to_porcelain(plumbings)
14042
+ items = Array.new
14043
+ plumbings.each do |plumbing|
14044
+ porcelain = convert_organization_update_mfa_response_to_porcelain(plumbing)
14045
+ items.append(porcelain)
14046
+ end
14047
+ items
14048
+ end
13786
14049
  def self.convert_peering_group_to_porcelain(plumbing)
13787
14050
  if plumbing == nil
13788
14051
  return nil
@@ -16714,6 +16977,9 @@ module SDM
16714
16977
  if porcelain.instance_of? KubernetesUserImpersonation
16715
16978
  plumbing.kubernetes_user_impersonation = convert_kubernetes_user_impersonation_to_plumbing(porcelain)
16716
16979
  end
16980
+ if porcelain.instance_of? LLM
16981
+ plumbing.llm = convert_llm_to_plumbing(porcelain)
16982
+ end
16717
16983
  if porcelain.instance_of? Maria
16718
16984
  plumbing.maria = convert_maria_to_plumbing(porcelain)
16719
16985
  end
@@ -17072,6 +17338,9 @@ module SDM
17072
17338
  if plumbing.kubernetes_user_impersonation != nil
17073
17339
  return convert_kubernetes_user_impersonation_to_porcelain(plumbing.kubernetes_user_impersonation)
17074
17340
  end
17341
+ if plumbing.llm != nil
17342
+ return convert_llm_to_porcelain(plumbing.llm)
17343
+ end
17075
17344
  if plumbing.maria != nil
17076
17345
  return convert_maria_to_porcelain(plumbing.maria)
17077
17346
  end
@@ -93,6 +93,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
93
93
  value :RESOURCE_TYPE_KUBERNETES_SERVICE_ACCOUNT, 804
94
94
  value :RESOURCE_TYPE_KUBERNETES_SERVICE_ACCOUNT_USER_IMPERSONATION, 808
95
95
  value :RESOURCE_TYPE_KUBERNETES_USER_IMPERSONATION, 812
96
+ value :RESOURCE_TYPE_LLM, 4900
96
97
  value :RESOURCE_TYPE_MCP_NO_AUTH, 4703
97
98
  value :RESOURCE_TYPE_MCP, 4700
98
99
  value :RESOURCE_TYPE_MCPDCR, 4701
@@ -163,6 +163,8 @@ module SDM
163
163
 
164
164
  KUBERNETES_USER_IMPERSONATION = "RESOURCE_TYPE_KUBERNETES_USER_IMPERSONATION"
165
165
 
166
+ LLM = "RESOURCE_TYPE_LLM"
167
+
166
168
  MCP_NO_AUTH = "RESOURCE_TYPE_MCP_NO_AUTH"
167
169
 
168
170
  MCP = "RESOURCE_TYPE_MCP"
@@ -10285,6 +10287,74 @@ module SDM
10285
10287
  end
10286
10288
  end
10287
10289
 
10290
+ # LLM is currently unstable, and its API may change, or it may be removed, without a major version bump.
10291
+ class LLM
10292
+ # 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.
10293
+ attr_accessor :bind_interface
10294
+ # A filter applied to the routing logic to pin datasource to nodes.
10295
+ attr_accessor :egress_filter
10296
+ # True if the datasource is reachable and the credentials are valid.
10297
+ attr_accessor :healthy
10298
+ # Unique identifier of the Resource.
10299
+ attr_accessor :id
10300
+ # Space-separated list of model names this resource accepts. Requests for unlisted models are rejected. Leave empty to allow all models.
10301
+ attr_accessor :models
10302
+ # Unique human-readable name of the Resource.
10303
+ attr_accessor :name
10304
+ # The password to authenticate with.
10305
+ attr_accessor :password
10306
+ # 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.
10307
+ attr_accessor :port_override
10308
+ # ID of the proxy cluster for this resource, if any.
10309
+ attr_accessor :proxy_cluster_id
10310
+ # ID of the secret store containing credentials for this resource, if any.
10311
+ attr_accessor :secret_store_id
10312
+ # 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.
10313
+ attr_accessor :subdomain
10314
+ # Tags is a map of key, value pairs.
10315
+ attr_accessor :tags
10316
+ # The URL to dial to initiate a connection from the egress node to this resource.
10317
+ attr_accessor :url
10318
+
10319
+ def initialize(
10320
+ bind_interface: nil,
10321
+ egress_filter: nil,
10322
+ healthy: nil,
10323
+ id: nil,
10324
+ models: nil,
10325
+ name: nil,
10326
+ password: nil,
10327
+ port_override: nil,
10328
+ proxy_cluster_id: nil,
10329
+ secret_store_id: nil,
10330
+ subdomain: nil,
10331
+ tags: nil,
10332
+ url: nil
10333
+ )
10334
+ @bind_interface = bind_interface == nil ? "" : bind_interface
10335
+ @egress_filter = egress_filter == nil ? "" : egress_filter
10336
+ @healthy = healthy == nil ? false : healthy
10337
+ @id = id == nil ? "" : id
10338
+ @models = models == nil ? "" : models
10339
+ @name = name == nil ? "" : name
10340
+ @password = password == nil ? "" : password
10341
+ @port_override = port_override == nil ? 0 : port_override
10342
+ @proxy_cluster_id = proxy_cluster_id == nil ? "" : proxy_cluster_id
10343
+ @secret_store_id = secret_store_id == nil ? "" : secret_store_id
10344
+ @subdomain = subdomain == nil ? "" : subdomain
10345
+ @tags = tags == nil ? SDM::_porcelain_zero_value_tags() : tags
10346
+ @url = url == nil ? "" : url
10347
+ end
10348
+
10349
+ def to_json(options = {})
10350
+ hash = {}
10351
+ self.instance_variables.each do |var|
10352
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
10353
+ end
10354
+ hash.to_json
10355
+ end
10356
+ end
10357
+
10288
10358
  class LogCategoryConfig
10289
10359
  # Indicates if the Organization should exclude replay data from remote logging for the log category.
10290
10360
  attr_accessor :remote_discard_replays
@@ -10643,6 +10713,33 @@ module SDM
10643
10713
  end
10644
10714
  end
10645
10715
 
10716
+ class MFAConfig
10717
+ # Indicates if MFA is enabled for the organization.
10718
+ attr_accessor :enabled
10719
+ # Okta MFA configuration. Future providers will be added to this wrapper.
10720
+ attr_accessor :okta
10721
+ # The MFA provider, one of the MFAProvider constants.
10722
+ attr_accessor :provider
10723
+
10724
+ def initialize(
10725
+ enabled: nil,
10726
+ okta: nil,
10727
+ provider: nil
10728
+ )
10729
+ @enabled = enabled == nil ? false : enabled
10730
+ @okta = okta == nil ? nil : okta
10731
+ @provider = provider == nil ? "" : provider
10732
+ end
10733
+
10734
+ def to_json(options = {})
10735
+ hash = {}
10736
+ self.instance_variables.each do |var|
10737
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
10738
+ end
10739
+ hash.to_json
10740
+ end
10741
+ end
10742
+
10646
10743
  class MTLSMysql
10647
10744
  # 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.
10648
10745
  attr_accessor :bind_interface
@@ -12685,6 +12782,67 @@ module SDM
12685
12782
  end
12686
12783
  end
12687
12784
 
12785
+ class OktaMFAConfig
12786
+ # The API token to authenticate with when auth_mode is api_token.
12787
+ attr_accessor :api_token
12788
+ # Indicates if an API token is already stored.
12789
+ attr_accessor :api_token_set
12790
+ # The Okta auth mode, one of the OktaAuthMode constants.
12791
+ attr_accessor :auth_mode
12792
+ # The Okta client ID to authenticate with when auth_mode is client_credentials.
12793
+ attr_accessor :client_id
12794
+ # Indicates if multidevice push is enabled.
12795
+ attr_accessor :multidevice_push_enabled
12796
+ # The Okta organization URL.
12797
+ attr_accessor :organization_url
12798
+ # The key ID (kid) assigned by Okta to the registered public key.
12799
+ attr_accessor :private_key_id
12800
+ # Indicates if a key ID is already stored or explicitly supplied. This allows
12801
+ # callers to preserve the existing value when omitted or clear it by
12802
+ # sending an empty string with private_key_id_set=true.
12803
+ attr_accessor :private_key_id_set
12804
+ # The PEM encoded private key to authenticate with when auth_mode is client_credentials.
12805
+ attr_accessor :private_key_pem
12806
+ # Indicates if a PEM encoded private key is already stored.
12807
+ attr_accessor :private_key_pem_set
12808
+ # The Okta user lookup strategy, one of the OktaUserLookup constants.
12809
+ attr_accessor :user_lookup
12810
+
12811
+ def initialize(
12812
+ api_token: nil,
12813
+ api_token_set: nil,
12814
+ auth_mode: nil,
12815
+ client_id: nil,
12816
+ multidevice_push_enabled: nil,
12817
+ organization_url: nil,
12818
+ private_key_id: nil,
12819
+ private_key_id_set: nil,
12820
+ private_key_pem: nil,
12821
+ private_key_pem_set: nil,
12822
+ user_lookup: nil
12823
+ )
12824
+ @api_token = api_token == nil ? "" : api_token
12825
+ @api_token_set = api_token_set == nil ? false : api_token_set
12826
+ @auth_mode = auth_mode == nil ? "" : auth_mode
12827
+ @client_id = client_id == nil ? "" : client_id
12828
+ @multidevice_push_enabled = multidevice_push_enabled == nil ? false : multidevice_push_enabled
12829
+ @organization_url = organization_url == nil ? "" : organization_url
12830
+ @private_key_id = private_key_id == nil ? "" : private_key_id
12831
+ @private_key_id_set = private_key_id_set == nil ? false : private_key_id_set
12832
+ @private_key_pem = private_key_pem == nil ? "" : private_key_pem
12833
+ @private_key_pem_set = private_key_pem_set == nil ? false : private_key_pem_set
12834
+ @user_lookup = user_lookup == nil ? "" : user_lookup
12835
+ end
12836
+
12837
+ def to_json(options = {})
12838
+ hash = {}
12839
+ self.instance_variables.each do |var|
12840
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
12841
+ end
12842
+ hash.to_json
12843
+ end
12844
+ end
12845
+
12688
12846
  class Oracle
12689
12847
  # 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.
12690
12848
  attr_accessor :bind_interface
@@ -12990,6 +13148,33 @@ module SDM
12990
13148
  end
12991
13149
  end
12992
13150
 
13151
+ class OrganizationGetMFAResponse
13152
+ # Reserved for future use.
13153
+ attr_accessor :meta
13154
+ # The current MFA configuration.
13155
+ attr_accessor :mfa
13156
+ # Rate limit information.
13157
+ attr_accessor :rate_limit
13158
+
13159
+ def initialize(
13160
+ meta: nil,
13161
+ mfa: nil,
13162
+ rate_limit: nil
13163
+ )
13164
+ @meta = meta == nil ? nil : meta
13165
+ @mfa = mfa == nil ? nil : mfa
13166
+ @rate_limit = rate_limit == nil ? nil : rate_limit
13167
+ end
13168
+
13169
+ def to_json(options = {})
13170
+ hash = {}
13171
+ self.instance_variables.each do |var|
13172
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
13173
+ end
13174
+ hash.to_json
13175
+ end
13176
+ end
13177
+
12993
13178
  # OrganizationHistoryRecord records the state of an Organization at a given point in time,
12994
13179
  # where every change to an Organization produces an OrganizationHistoryRecord.
12995
13180
  class OrganizationHistoryRecord
@@ -13020,6 +13205,48 @@ module SDM
13020
13205
  end
13021
13206
  end
13022
13207
 
13208
+ class OrganizationTestMFAResponse
13209
+ # Rate limit information.
13210
+ attr_accessor :rate_limit
13211
+
13212
+ def initialize(
13213
+ rate_limit: nil
13214
+ )
13215
+ @rate_limit = rate_limit == nil ? nil : rate_limit
13216
+ end
13217
+
13218
+ def to_json(options = {})
13219
+ hash = {}
13220
+ self.instance_variables.each do |var|
13221
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
13222
+ end
13223
+ hash.to_json
13224
+ end
13225
+ end
13226
+
13227
+ class OrganizationUpdateMFAResponse
13228
+ # The updated MFA configuration.
13229
+ attr_accessor :mfa
13230
+ # Rate limit information.
13231
+ attr_accessor :rate_limit
13232
+
13233
+ def initialize(
13234
+ mfa: nil,
13235
+ rate_limit: nil
13236
+ )
13237
+ @mfa = mfa == nil ? nil : mfa
13238
+ @rate_limit = rate_limit == nil ? nil : rate_limit
13239
+ end
13240
+
13241
+ def to_json(options = {})
13242
+ hash = {}
13243
+ self.instance_variables.each do |var|
13244
+ hash[var.id2name.delete_prefix("@")] = self.instance_variable_get var
13245
+ end
13246
+ hash.to_json
13247
+ end
13248
+ end
13249
+
13023
13250
  # PeeringGroups are the building blocks used for explicit network topology making.
13024
13251
  # They may be linked to other peering groups. Sets of PeeringGroupResource and PeeringGroupNode can be attached to a peering group.
13025
13252
  class PeeringGroup
data/lib/strongdm.rb CHANGED
@@ -31,7 +31,7 @@ module SDM #:nodoc:
31
31
  DEFAULT_RETRY_FACTOR = 1.6
32
32
  DEFAULT_RETRY_JITTER = 0.2
33
33
  API_VERSION = "2025-04-14"
34
- USER_AGENT = "strongdm-sdk-ruby/17.2.0"
34
+ USER_AGENT = "strongdm-sdk-ruby/17.4.0"
35
35
  private_constant :DEFAULT_BASE_RETRY_DELAY, :DEFAULT_MAX_RETRY_DELAY, :DEFAULT_RETRY_FACTOR, :DEFAULT_RETRY_JITTER, :API_VERSION, :USER_AGENT
36
36
 
37
37
  # Creates a new strongDM API client.
@@ -102,6 +102,7 @@ module SDM #:nodoc:
102
102
  @nodes = Nodes.new(@channel, self)
103
103
  @nodes_history = NodesHistory.new(@channel, self)
104
104
  @organization_history = OrganizationHistory.new(@channel, self)
105
+ @organizations = Organizations.new(@channel, self)
105
106
  @peering_group_nodes = PeeringGroupNodes.new(@channel, self)
106
107
  @peering_group_peers = PeeringGroupPeers.new(@channel, self)
107
108
  @peering_group_resources = PeeringGroupResources.new(@channel, self)
@@ -430,6 +431,14 @@ module SDM #:nodoc:
430
431
  #
431
432
  # See {OrganizationHistory}.
432
433
  attr_reader :organization_history
434
+ # Organizations exposes organization configuration. Most RPCs remain private to the
435
+ # go_private SDK; public MFA management is exposed to all public SDK targets.
436
+ # The terraform-provider target is opted out at the service level because the
437
+ # provider's data-source generator assumes every service has a List RPC; MFA is
438
+ # instead surfaced via a hand-written resource template.
439
+ #
440
+ # See {Organizations}.
441
+ attr_reader :organizations
433
442
  # PeeringGroupNodes provides the building blocks necessary to obtain attach a node to a peering group.
434
443
  #
435
444
  # See {PeeringGroupNodes}.
@@ -617,6 +626,7 @@ module SDM #:nodoc:
617
626
  @nodes = Nodes.new(@channel, self)
618
627
  @nodes_history = NodesHistory.new(@channel, self)
619
628
  @organization_history = OrganizationHistory.new(@channel, self)
629
+ @organizations = Organizations.new(@channel, self)
620
630
  @peering_group_nodes = PeeringGroupNodes.new(@channel, self)
621
631
  @peering_group_peers = PeeringGroupPeers.new(@channel, self)
622
632
  @peering_group_resources = PeeringGroupResources.new(@channel, self)
data/lib/svc.rb CHANGED
@@ -5245,6 +5245,126 @@ module SDM #:nodoc:
5245
5245
  end
5246
5246
  end
5247
5247
 
5248
+ # Organizations exposes organization configuration. Most RPCs remain private to the
5249
+ # go_private SDK; public MFA management is exposed to all public SDK targets.
5250
+ # The terraform-provider target is opted out at the service level because the
5251
+ # provider's data-source generator assumes every service has a List RPC; MFA is
5252
+ # instead surfaced via a hand-written resource template.
5253
+ #
5254
+ # See {Organization}.
5255
+ class Organizations
5256
+ extend Gem::Deprecate
5257
+
5258
+ def initialize(channel, parent)
5259
+ begin
5260
+ @stub = V1::Organizations::Stub.new(nil, nil, channel_override: channel)
5261
+ rescue => exception
5262
+ raise Plumbing::convert_error_to_porcelain(exception)
5263
+ end
5264
+ @parent = parent
5265
+ end
5266
+
5267
+ # GetMFA gets the organization's MFA configuration.
5268
+ def get_mfa(
5269
+ deadline: nil
5270
+ )
5271
+ req = V1::OrganizationGetMFARequest.new()
5272
+
5273
+ # Execute before interceptor hooks
5274
+ req = @parent.interceptor.execute_before("Organizations.GetMFA", self, req)
5275
+ tries = 0
5276
+ plumbing_response = nil
5277
+ loop do
5278
+ begin
5279
+ plumbing_response = @stub.get_mfa(req, metadata: @parent.get_metadata("Organizations.GetMFA", req), deadline: deadline)
5280
+ rescue => exception
5281
+ if (@parent.shouldRetry(tries, exception, deadline))
5282
+ tries + +sleep(@parent.exponentialBackoff(tries, deadline))
5283
+ next
5284
+ end
5285
+ raise Plumbing::convert_error_to_porcelain(exception)
5286
+ end
5287
+ break
5288
+ end
5289
+
5290
+ # Execute after interceptor hooks
5291
+ plumbing_response = @parent.interceptor.execute_after("Organizations.GetMFA", self, req, plumbing_response)
5292
+
5293
+ resp = OrganizationGetMFAResponse.new()
5294
+ resp.meta = Plumbing::convert_get_response_metadata_to_porcelain(plumbing_response.meta)
5295
+ resp.mfa = Plumbing::convert_mfa_config_to_porcelain(plumbing_response.mfa)
5296
+ resp.rate_limit = Plumbing::convert_rate_limit_metadata_to_porcelain(plumbing_response.rate_limit)
5297
+ resp
5298
+ end
5299
+
5300
+ # UpdateMFA updates the organization's MFA configuration.
5301
+ def update_mfa(
5302
+ mfa,
5303
+ deadline: nil
5304
+ )
5305
+ req = V1::OrganizationUpdateMFARequest.new()
5306
+
5307
+ req.mfa = Plumbing::convert_mfa_config_to_plumbing(mfa)
5308
+ # Execute before interceptor hooks
5309
+ req = @parent.interceptor.execute_before("Organizations.UpdateMFA", self, req)
5310
+ tries = 0
5311
+ plumbing_response = nil
5312
+ loop do
5313
+ begin
5314
+ plumbing_response = @stub.update_mfa(req, metadata: @parent.get_metadata("Organizations.UpdateMFA", req), deadline: deadline)
5315
+ rescue => exception
5316
+ if (@parent.shouldRetry(tries, exception, deadline))
5317
+ tries + +sleep(@parent.exponentialBackoff(tries, deadline))
5318
+ next
5319
+ end
5320
+ raise Plumbing::convert_error_to_porcelain(exception)
5321
+ end
5322
+ break
5323
+ end
5324
+
5325
+ # Execute after interceptor hooks
5326
+ plumbing_response = @parent.interceptor.execute_after("Organizations.UpdateMFA", self, req, plumbing_response)
5327
+
5328
+ resp = OrganizationUpdateMFAResponse.new()
5329
+ resp.mfa = Plumbing::convert_mfa_config_to_porcelain(plumbing_response.mfa)
5330
+ resp.rate_limit = Plumbing::convert_rate_limit_metadata_to_porcelain(plumbing_response.rate_limit)
5331
+ resp
5332
+ end
5333
+
5334
+ # TestMFA validates MFA connectivity without persisting changes.
5335
+ def test_mfa(
5336
+ mfa,
5337
+ deadline: nil
5338
+ )
5339
+ req = V1::OrganizationTestMFARequest.new()
5340
+
5341
+ req.mfa = Plumbing::convert_mfa_config_to_plumbing(mfa)
5342
+ # Execute before interceptor hooks
5343
+ req = @parent.interceptor.execute_before("Organizations.TestMFA", self, req)
5344
+ tries = 0
5345
+ plumbing_response = nil
5346
+ loop do
5347
+ begin
5348
+ plumbing_response = @stub.test_mfa(req, metadata: @parent.get_metadata("Organizations.TestMFA", req), deadline: deadline)
5349
+ rescue => exception
5350
+ if (@parent.shouldRetry(tries, exception, deadline))
5351
+ tries + +sleep(@parent.exponentialBackoff(tries, deadline))
5352
+ next
5353
+ end
5354
+ raise Plumbing::convert_error_to_porcelain(exception)
5355
+ end
5356
+ break
5357
+ end
5358
+
5359
+ # Execute after interceptor hooks
5360
+ plumbing_response = @parent.interceptor.execute_after("Organizations.TestMFA", self, req, plumbing_response)
5361
+
5362
+ resp = OrganizationTestMFAResponse.new()
5363
+ resp.rate_limit = Plumbing::convert_rate_limit_metadata_to_porcelain(plumbing_response.rate_limit)
5364
+ resp
5365
+ end
5366
+ end
5367
+
5248
5368
  # PeeringGroupNodes provides the building blocks necessary to obtain attach a node to a peering group.
5249
5369
  #
5250
5370
  # See {PeeringGroupNode}.
@@ -7289,6 +7409,7 @@ module SDM #:nodoc:
7289
7409
  # {KubernetesServiceAccount}
7290
7410
  # {KubernetesServiceAccountUserImpersonation}
7291
7411
  # {KubernetesUserImpersonation}
7412
+ # {LLM}
7292
7413
  # {Maria}
7293
7414
  # {MCPGatewayNoAuth}
7294
7415
  # {MCPGatewayOAuth}
data/lib/version CHANGED
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
  #
15
15
  module SDM
16
- VERSION = "17.2.0"
16
+ VERSION = "17.4.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 = "17.2.0"
16
+ VERSION = "17.4.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: 17.2.0
4
+ version: 17.4.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: 2026-04-29 00:00:00.000000000 Z
11
+ date: 2026-05-04 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-30219426c4a155662675dfd097c868809b3553a0.idx"
85
- - "./.git/objects/pack/pack-30219426c4a155662675dfd097c868809b3553a0.pack"
84
+ - "./.git/objects/pack/pack-25c93bdf583e394318001c7011476e3b807b6081.idx"
85
+ - "./.git/objects/pack/pack-25c93bdf583e394318001c7011476e3b807b6081.pack"
86
86
  - "./.git/packed-refs"
87
87
  - "./.git/refs/heads/master"
88
88
  - "./.git/refs/remotes/origin/HEAD"
@@ -176,6 +176,8 @@ files:
176
176
  - "./lib/grpc/options_pb.rb"
177
177
  - "./lib/grpc/organization_history_pb.rb"
178
178
  - "./lib/grpc/organization_history_services_pb.rb"
179
+ - "./lib/grpc/organizations_pb.rb"
180
+ - "./lib/grpc/organizations_services_pb.rb"
179
181
  - "./lib/grpc/peering_group_nodes_pb.rb"
180
182
  - "./lib/grpc/peering_group_nodes_services_pb.rb"
181
183
  - "./lib/grpc/peering_group_peers_pb.rb"