kessel-sdk 1.3.0 → 1.4.1

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: 03c1e365bed3b3630e895a51b7dc31ce2ea261df747b13792b27fee2425b1d92
4
- data.tar.gz: 206abbac137b487acdb9d33e30cd0fd597d6bc2a04a7115c718e84a606f17875
3
+ metadata.gz: 9ccc4b051867d0c4284366dc8c276f66ba05e141ca15712153fdf4b14b292cf8
4
+ data.tar.gz: f7748260e977b3f2c79ad531a7c6f265f694aa8ff74722b837eabdc94f1ec35c
5
5
  SHA512:
6
- metadata.gz: 4ff107f891cfa1b12b71908ca3783b9db9064b0695c29de7790462550148ef2c58c2e5e81e90f5a62d2791da7e446335c898b0fa0f155a39b8e6fe875099db04
7
- data.tar.gz: 4e5c268ae1cdcf9db41910b9ccf5ffc812f0e73ce6a8fc5f67e605e4bb54d0edc27f10dc8c3e6f4463f7071f277c077a3b7765d7302b3863888b84ad6349526f
6
+ metadata.gz: 3a7cc81b595aa2bacff372b35410c450b6a3f730e87350b1239f69247ebfdfcb38235c2e7f9c3b1626439dc3758b2082144fe82917154c6d23632ba846889acc
7
+ data.tar.gz: bd02940afd08dce1930974b32909858346dfa4d9546a651bacd28d825ab85670be2ac643338937295d777b6cf91b499f911e9bce4d0b500c7c1c2e83b4cc1650
@@ -3,11 +3,15 @@
3
3
  require 'net/http'
4
4
  require 'uri'
5
5
  require 'json'
6
+ require_relative '../inventory/v1beta2'
6
7
 
7
8
  module Kessel
8
9
  module RBAC
9
10
  module V2
11
+ include Kessel::Inventory::V1beta2
12
+
10
13
  WORKSPACE_ENDPOINT = '/api/rbac/v2/workspaces/'
14
+ DEFAULT_PAGE_LIMIT = 1000
11
15
  Workspace = Struct.new(:id, :name, :type, :description)
12
16
 
13
17
  def fetch_default_workspace(rbac_base_endpoint, org_id, auth: nil, http_client: nil)
@@ -18,17 +22,35 @@ module Kessel
18
22
  fetch_workspace(rbac_base_endpoint, org_id, 'root', auth: auth, http_client: http_client)
19
23
  end
20
24
 
21
- private
22
-
23
- def run_request(uri, org_id, auth, http_client)
24
- request = Net::HTTP::Get.new uri
25
- request['x-rh-rbac-org-id'] = org_id
26
-
27
- auth&.configure_request(request)
28
-
29
- http_client.request(request)
25
+ def list_workspaces(inventory, subject, relation, continuation_token = nil)
26
+ Enumerator.new do |yielder|
27
+ loop do
28
+ request = StreamedListObjectsRequest.new(
29
+ object_type: workspace_type,
30
+ relation: relation,
31
+ subject: subject,
32
+ pagination: RequestPagination.new(
33
+ limit: DEFAULT_PAGE_LIMIT,
34
+ continuation_token: continuation_token
35
+ )
36
+ )
37
+
38
+ has_responses = false
39
+ streamed_response = inventory.streamed_list_objects(request)
40
+ streamed_response.each do |response|
41
+ has_responses = true
42
+ yielder << response
43
+
44
+ continuation_token = response&.pagination&.continuation_token
45
+ end
46
+
47
+ break if !has_responses || !continuation_token
48
+ end
49
+ end
30
50
  end
31
51
 
52
+ private
53
+
32
54
  def process_response(response, workspace_type)
33
55
  unless response.is_a?(Net::HTTPSuccess)
34
56
  raise "Error while fetching the workspace of type #{workspace_type}. " \
@@ -70,12 +92,6 @@ module Kessel
70
92
  response = run_request(uri, org_id, auth, http_client)
71
93
  process_response(response, workspace_type)
72
94
  end
73
-
74
- def check_http_client(http_client, uri)
75
- return if uri.host == http_client.address && uri.port == http_client.port
76
-
77
- raise 'http client host and port do not match rbac_base_endpoint'
78
- end
79
95
  end
80
96
  end
81
97
  end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'v2'
4
+
5
+ module Kessel
6
+ module RBAC
7
+ module V2
8
+ include Kessel::Inventory::V1beta2
9
+
10
+ def workspace_type
11
+ RepresentationType.new(
12
+ resource_type: 'workspace',
13
+ reporter_type: 'rbac'
14
+ )
15
+ end
16
+
17
+ def role_type
18
+ RepresentationType.new(
19
+ resource_type: 'role',
20
+ reporter_type: 'rbac'
21
+ )
22
+ end
23
+
24
+ def principal_resource(id, domain)
25
+ ResourceReference.new(
26
+ resource_type: 'principal',
27
+ resource_id: "#{domain}/#{id}",
28
+ reporter: ReporterReference.new(
29
+ type: 'rbac'
30
+ )
31
+ )
32
+ end
33
+
34
+ def role_resource(resource_id)
35
+ ResourceReference.new(
36
+ resource_type: 'role',
37
+ resource_id: resource_id,
38
+ reporter: ReporterReference.new(
39
+ type: 'rbac'
40
+ )
41
+ )
42
+ end
43
+
44
+ def workspace_resource(resource_id)
45
+ ResourceReference.new(
46
+ resource_type: 'workspace',
47
+ resource_id: resource_id,
48
+ reporter: ReporterReference.new(
49
+ type: 'rbac'
50
+ )
51
+ )
52
+ end
53
+
54
+ def principal_subject(id, domain)
55
+ SubjectReference.new(
56
+ resource: principal_resource(id, domain)
57
+ )
58
+ end
59
+
60
+ def subject(resource_ref, relation = nil)
61
+ SubjectReference.new(
62
+ resource: resource_ref,
63
+ relation: relation
64
+ )
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'v2'
4
+
5
+ module Kessel
6
+ module RBAC
7
+ module V2
8
+ private
9
+
10
+ def run_request(uri, org_id, auth, http_client)
11
+ request = Net::HTTP::Get.new uri
12
+ request['x-rh-rbac-org-id'] = org_id
13
+
14
+ auth&.configure_request(request)
15
+
16
+ http_client.request(request)
17
+ end
18
+
19
+ def check_http_client(http_client, uri)
20
+ return if uri.host == http_client.address && uri.port == http_client.port
21
+
22
+ raise 'http client host and port do not match rbac_base_endpoint'
23
+ end
24
+ end
25
+ end
26
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Kessel
4
4
  module Inventory
5
- VERSION = '1.3.0'
5
+ VERSION = '1.4.1'
6
6
  end
7
7
  end
data/lib/kessel-sdk.rb CHANGED
@@ -4,6 +4,8 @@ require 'kessel/version'
4
4
  require 'kessel/grpc'
5
5
  require 'kessel/auth'
6
6
  require 'kessel/rbac/v2'
7
+ require 'kessel/rbac/v2_helpers'
8
+ require 'kessel/rbac/v2_http'
7
9
 
8
10
  require 'kessel/inventory/v1'
9
11
  require 'kessel/inventory/v1beta1'
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kessel-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Project Kessel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-01 00:00:00.000000000 Z
11
+ date: 2025-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.73.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.73.0
27
27
  - !ruby/object:Gem::Dependency
@@ -261,6 +261,8 @@ files:
261
261
  - lib/kessel/inventory/v1beta2/subject_reference_pb.rb
262
262
  - lib/kessel/inventory/v1beta2/write_visibility_pb.rb
263
263
  - lib/kessel/rbac/v2.rb
264
+ - lib/kessel/rbac/v2_helpers.rb
265
+ - lib/kessel/rbac/v2_http.rb
264
266
  - lib/kessel/version.rb
265
267
  homepage: https://github.com/project-kessel/kessel-sdk-ruby
266
268
  licenses: