oci-logging-analytics-kubernetes-discovery 1.0.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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +40 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +7 -0
  5. data/LICENSE.txt +36 -0
  6. data/README.md +83 -0
  7. data/Rakefile +15 -0
  8. data/bin/console +17 -0
  9. data/bin/oci-loganalytics-kubernetes-discovery +184 -0
  10. data/bin/setup +12 -0
  11. data/lib/config/oci_client_retry_config.rb +34 -0
  12. data/lib/discover/infrastructure.rb +122 -0
  13. data/lib/discover/object.rb +347 -0
  14. data/lib/dto/infra/cluster_entity_payload.rb +22 -0
  15. data/lib/dto/infra/load_balancers_entity_payload.rb +22 -0
  16. data/lib/dto/infra/node_pool_entity_payload.rb +24 -0
  17. data/lib/dto/infra/subnet_entity_payload.rb +22 -0
  18. data/lib/dto/infra/vcn_entity_payload.rb +22 -0
  19. data/lib/dto/infra_objects_payload.rb +40 -0
  20. data/lib/dto/kubernetes_objects_payload.rb +58 -0
  21. data/lib/dto/payload/log_events.rb +26 -0
  22. data/lib/dto/payload/log_events_json.rb +22 -0
  23. data/lib/dto/state.rb +19 -0
  24. data/lib/enum/auth_type_enum.rb +9 -0
  25. data/lib/enum/infrastructure_resource_discovery.rb +9 -0
  26. data/lib/enum/kubernetes_objects_enum.rb +22 -0
  27. data/lib/enum/object_client_mapping_enum.rb +21 -0
  28. data/lib/infra_resources.rb +91 -0
  29. data/lib/objects_resources.rb +174 -0
  30. data/lib/oci_loganalytics_resources_discovery.rb +293 -0
  31. data/lib/util/kube_client.rb +141 -0
  32. data/lib/util/kubectl_ops.rb +229 -0
  33. data/lib/util/log_analytics.rb +154 -0
  34. data/lib/util/logging.rb +96 -0
  35. data/lib/util/oci_clients.rb +228 -0
  36. data/lib/util/state_manager.rb +61 -0
  37. data/lib/util/string_utils.rb +16 -0
  38. data/lib/version.rb +6 -0
  39. data/oci-logging-analytics-kubernetes-discovery.gemspec +45 -0
  40. metadata +324 -0
@@ -0,0 +1,347 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ require_relative '../util/logging'
5
+ require_relative '../util/kubectl_ops'
6
+
7
+ # Util
8
+ require_relative '../util/kube_client'
9
+
10
+ # Enum
11
+ require_relative '../enum/kubernetes_objects_enum'
12
+
13
+ module Discover
14
+ module Object
15
+ extend Util::Logging
16
+
17
+ module_function
18
+
19
+ Controller = Struct.new(:kind, :name, :uid)
20
+ Generic_object = Struct.new(:name, :namespace, :uid)
21
+ End_point_slice = Struct.new(:name, :namespace, :uid, :endpoints, :ports)
22
+ Job = Struct.new(:name, :namespace, :uid, :controller)
23
+ Node = Struct.new(:name, :displayName, :uid, :internalIP, :externalIP)
24
+ Pod = Struct.new(:name, :namespace, :uid, :podIP, :hostIP, :nodeIP, :controller)
25
+ Replica_set = Struct.new(:name, :namespace, :uid, :controller)
26
+ Service = Struct.new(:name, :namespace, :uid, :clusterIP, :externalIP, :loadBalancerIP, :ports)
27
+ Namespace = Struct.new(:name, :uid)
28
+
29
+ def get_generic_object_details(item, object_type)
30
+ if item.nil? || item[:metadata].nil?
31
+ logger.debug("Null or empty object detected, skipping the processing for object '#{object_type}'.")
32
+ return nil
33
+ end
34
+ name = item[:metadata][:name]
35
+ namespace = item[:metadata][:namespace]
36
+ uid = item[:metadata][:uid]
37
+ Generic_object.new(name, namespace, uid)
38
+ end
39
+
40
+ def get_cron_jobs
41
+ processed_data = []
42
+ resource_name = Enum::KubernetesObjectsEnum::CRON_JOBS.to_s
43
+ response = Util::KubectlOps.get_objects(resource_name)
44
+ begin
45
+ response[:parsed_symbolized][:items].each do |item|
46
+ cron_job = get_generic_object_details(item, resource_name)
47
+ processed_data << cron_job unless cron_job.nil?
48
+ end
49
+ rescue StandardError => e
50
+ logger.error("Unable to parse '#{resource_name}'")
51
+ raise e
52
+ end
53
+ { processed: processed_data, raw: response[:raw] }
54
+ end
55
+
56
+ def get_daemon_sets
57
+ processed_data = []
58
+ resource_name = Enum::KubernetesObjectsEnum::DAEMON_SETS.to_s
59
+ response = Util::KubectlOps.get_objects(resource_name)
60
+ begin
61
+ response[:parsed_symbolized][:items].each do |item|
62
+ daemon_set = get_generic_object_details(item, resource_name)
63
+ processed_data << daemon_set unless daemon_set.nil?
64
+ end
65
+ rescue StandardError => e
66
+ logger.error("Unable to parse '#{resource_name}'")
67
+ raise e
68
+ end
69
+ { processed: processed_data, raw: response[:raw] }
70
+ end
71
+
72
+ def get_deployments
73
+ processed_data = []
74
+ resource_name = Enum::KubernetesObjectsEnum::DEPLOYMENTS.to_s
75
+ response = Util::KubectlOps.get_objects(resource_name)
76
+ begin
77
+ response[:parsed_symbolized][:items].each do |item|
78
+ deployment = get_generic_object_details(item, resource_name)
79
+ processed_data << deployment unless deployment.nil?
80
+ end
81
+ rescue StandardError => e
82
+ logger.error("Unable to parse '#{resource_name}'")
83
+ raise e
84
+ end
85
+ { processed: processed_data, raw: response[:raw] }
86
+ end
87
+
88
+ def get_endpoint_slices
89
+ processed_data = []
90
+ resource_name = Enum::KubernetesObjectsEnum::ENDPOINT_SLICES.to_s
91
+ response = Util::KubectlOps.get_objects(resource_name)
92
+
93
+ begin
94
+ response[:parsed_symbolized][:items].each do |item|
95
+ generic_object = get_generic_object_details(item, resource_name)
96
+ next if generic_object.nil?
97
+
98
+ endpoints = item[:endpoints]
99
+ endpoint_arr = []
100
+ if !endpoints.nil? && !endpoints.empty?
101
+ endpoints.each do |endpoint_item|
102
+ next if endpoint_item.nil?
103
+
104
+ endpoint_arr.push(endpoint_item.to_h)
105
+ end
106
+ end
107
+
108
+ ports = item[:ports]
109
+ port_arr = []
110
+ if !ports.nil? && !ports.empty?
111
+ ports.each do |port_item|
112
+ next if port_item.nil?
113
+
114
+ port_arr.push(port_item.to_h)
115
+ end
116
+ end
117
+ processed_data.push(End_point_slice.new(generic_object[:name], generic_object[:namespace], generic_object[:uid], endpoint_arr, port_arr))
118
+ end
119
+ rescue StandardError => e
120
+ logger.error("Unable to fetch '#{resource_name}'")
121
+ raise e
122
+ end
123
+ { processed: processed_data, raw: response[:raw] }
124
+ end
125
+
126
+ def get_jobs
127
+ processed_data = []
128
+ resource_name = Enum::KubernetesObjectsEnum::JOBS.to_s
129
+ response = Util::KubectlOps.get_objects(resource_name)
130
+ begin
131
+ response[:parsed_symbolized][:items].each do |item|
132
+ generic_object = get_generic_object_details(item, resource_name)
133
+ next if generic_object.nil?
134
+
135
+ controller = nil
136
+ if !item[:metadata][:ownerReferences].nil? && !item[:metadata][:ownerReferences].empty?
137
+ item[:metadata][:ownerReferences].each do |owner_reference|
138
+ next if owner_reference.nil?
139
+
140
+ if owner_reference[:controller]
141
+ controller = Controller.new(owner_reference[:kind], owner_reference[:name], owner_reference[:uid])
142
+ end
143
+ end
144
+ end
145
+ processed_data.push(Job.new(generic_object[:name], generic_object[:namespace], generic_object[:uid], controller.to_h))
146
+ end
147
+ rescue StandardError => e
148
+ logger.error("Unable to fetch '#{resource_name}'")
149
+ raise e
150
+ end
151
+ { processed: processed_data, raw: response[:raw] }
152
+ end
153
+
154
+ def get_nodes
155
+ processed_data = []
156
+ resource_name = Enum::KubernetesObjectsEnum::NODES.to_s
157
+ response = Util::KubectlOps.get_objects(resource_name)
158
+ begin
159
+ response[:parsed_symbolized][:items].each do |item|
160
+ next if item.nil? || item.empty?
161
+
162
+ name = item[:metadata][:name]
163
+
164
+ displayName = nil
165
+ if !item[:metadata][:labels].nil? || !item[:metadata][:labels].empty?
166
+ displayName = item[:metadata][:labels][:displayName].nil? ? nil : item[:metadata][:labels][:displayName]
167
+ end
168
+
169
+ uid = item[:metadata][:uid]
170
+ addresses = item[:status][:addresses]
171
+ internalIP = nil
172
+ externalIP = nil
173
+ addresses.each do |address|
174
+ next if address.nil?
175
+
176
+ if address.to_h[:type].eql?('InternalIP')
177
+ internalIP = address.to_hash[:address]
178
+ elsif address.to_h[:type].eql?('ExternalIP')
179
+ externalIP = address.to_hash[:address]
180
+ end
181
+ end
182
+ processed_data.push(Node.new(name, displayName, uid, internalIP, externalIP))
183
+ end
184
+ rescue StandardError => e
185
+ logger.error("Unable to fetch '#{resource_name}'")
186
+ raise e
187
+ end
188
+ { processed: processed_data, raw: response[:raw] }
189
+ end
190
+
191
+ def get_pods
192
+ processed_data = []
193
+ resource_name = Enum::KubernetesObjectsEnum::PODS.to_s
194
+ response = Util::KubectlOps.get_objects(resource_name)
195
+ begin
196
+ response[:parsed_symbolized][:items].each do |item|
197
+ generic_object = get_generic_object_details(item, resource_name)
198
+ next if generic_object.nil?
199
+
200
+ podIP = item[:status][:podIP]
201
+ hostIP = item[:status][:hostIP]
202
+ nodeIP = item[:status][:nodeIP]
203
+ controller = nil
204
+ if !item[:metadata][:ownerReferences].nil? && !item[:metadata][:ownerReferences].empty?
205
+ item[:metadata][:ownerReferences].each do |owner_reference|
206
+ next if owner_reference.nil?
207
+
208
+ if owner_reference[:controller]
209
+ controller = Controller.new(owner_reference[:kind], owner_reference[:name], owner_reference[:uid])
210
+ end
211
+ end
212
+ end
213
+ processed_data.push(Pod.new(generic_object[:name], generic_object[:namespace], generic_object[:uid], podIP, hostIP, nodeIP, controller.to_h))
214
+ end
215
+ rescue StandardError => e
216
+ logger.error("Unable to fetch '#{resource_name}'")
217
+ raise e
218
+ end
219
+ { processed: processed_data, raw: response[:raw] }
220
+ end
221
+
222
+ def get_replica_sets
223
+ processed_data = []
224
+ resource_name = Enum::KubernetesObjectsEnum::REPLICA_SETS.to_s
225
+ response = Util::KubectlOps.get_objects(resource_name)
226
+ begin
227
+ response[:parsed_symbolized][:items].each do |item|
228
+ generic_object = get_generic_object_details(item, resource_name)
229
+ next if generic_object.nil?
230
+
231
+ controller = nil
232
+ if !item[:metadata][:ownerReferences].nil? && !item[:metadata][:ownerReferences].empty?
233
+ item[:metadata][:ownerReferences].each do |owner_reference|
234
+ next if owner_reference.nil?
235
+
236
+ if owner_reference[:controller]
237
+ controller = Controller.new(owner_reference[:kind], owner_reference[:name], owner_reference[:uid])
238
+ end
239
+ end
240
+ end
241
+ processed_data.push(Replica_set.new(generic_object[:name], generic_object[:namespace], generic_object[:uid], controller.to_h))
242
+ end
243
+ rescue StandardError => e
244
+ logger.error "Unable to fetch '#{resource_name}'"
245
+ raise e
246
+ end
247
+ { processed: processed_data, raw: response[:raw] }
248
+ end
249
+
250
+ def get_services
251
+ processed_data = []
252
+ resource_name = Enum::KubernetesObjectsEnum::SERVICES.to_s
253
+ response = Util::KubectlOps.get_objects(resource_name)
254
+ begin
255
+ response[:parsed_symbolized][:items].each do |item|
256
+ generic_object = get_generic_object_details(item, resource_name)
257
+ next if generic_object.nil?
258
+
259
+ clusterIP = item[:spec][:clusterIP]
260
+ externalIP = item[:spec][:externalIP]
261
+ loadBalancerIP = item[:status][:loadBalancer][:ingress].nil? ? nil : item[:status][:loadBalancer][:ingress][0][:ip]
262
+ ports = item[:spec][:ports]
263
+ ports_arr = []
264
+ if !ports.nil? && !ports.empty?
265
+ ports.each do |port_item|
266
+ next if port_item.nil? || port_item.empty?
267
+
268
+ ports_arr.push(port_item.to_h)
269
+ end
270
+ end
271
+ processed_data.push(Service.new(generic_object[:name], generic_object[:namespace], generic_object[:uid], clusterIP, externalIP, loadBalancerIP, ports_arr))
272
+ end
273
+ rescue StandardError => e
274
+ logger.error("Unable to fetch '#{resource_name}'")
275
+ raise e
276
+ end
277
+ { processed: processed_data, raw: response[:raw] }
278
+ end
279
+
280
+ def get_stateful_sets
281
+ processed_data = []
282
+ resource_name = Enum::KubernetesObjectsEnum::STATEFUL_SETS.to_s
283
+ response = Util::KubectlOps.get_objects(resource_name)
284
+ begin
285
+ response[:parsed_symbolized][:items].each do |item|
286
+ stateful_set = get_generic_object_details(item, resource_name)
287
+ processed_data << stateful_set unless stateful_set.nil?
288
+ end
289
+ rescue StandardError => e
290
+ logger.error("Unable to fetch '#{resource_name}'")
291
+ raise e
292
+ end
293
+ { processed: processed_data, raw: response[:raw] }
294
+ end
295
+
296
+ def get_events
297
+ # Note - only collects warning logs for processed/discovery data
298
+ # - collects all events (incl. warning) in raw paylaod
299
+ processed_data = []
300
+ resource_name = Enum::KubernetesObjectsEnum::EVENTS.to_s
301
+ response = Util::KubectlOps.get_objects(resource_name)
302
+ begin
303
+ response[:parsed_symbolized][:items].each do |event|
304
+ # filter out empty and warning events
305
+ next if event.nil? || event.empty? || event[:type] != 'Warning'
306
+
307
+ processed_data.push(event)
308
+ end
309
+ rescue StandardError => e
310
+ logger.error("Unable to fetch '#{resource_name}'")
311
+ raise e
312
+ end
313
+ { processed: processed_data, raw: response[:raw] }
314
+ end
315
+
316
+ def get_namespaces
317
+ processed_data = []
318
+ resource_name = Enum::KubernetesObjectsEnum::NAMESPACES.to_s
319
+ response = Util::KubectlOps.get_objects(resource_name)
320
+ begin
321
+ response[:parsed_symbolized][:items].each do |item|
322
+ next if item.nil? || item.empty?
323
+
324
+ processed_data.push(Namespace.new(item[:metadata][:name], item[:metadata][:uid]))
325
+ end
326
+ rescue StandardError => e
327
+ logger.error("Unable to fetch '#{resource_name}'")
328
+ raise e
329
+ end
330
+ { processed: processed_data, raw: response[:raw] }
331
+ end
332
+
333
+ def get_persistent_volumes
334
+ processed_data = nil
335
+ resource_name = Enum::KubernetesObjectsEnum::PERSISTENT_VOLUMES.to_s
336
+ response = Util::KubectlOps.get_objects(resource_name)
337
+ { processed: processed_data, raw: response[:raw] }
338
+ end
339
+
340
+ def get_persistent_volume_claims
341
+ processed_data = nil
342
+ resource_name = Enum::KubernetesObjectsEnum::PERSISTENT_VOLUME_CLAIMS.to_s
343
+ response = Util::KubectlOps.get_objects(resource_name)
344
+ { processed: processed_data, raw: response[:raw] }
345
+ end
346
+ end
347
+ end
@@ -0,0 +1,22 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Dto
5
+ module Infra
6
+ class ClusterEntityPayload
7
+ attr_accessor :name, :id
8
+
9
+ def initialize(name, id)
10
+ @name = name
11
+ @id = id
12
+ end
13
+
14
+ def to_hash
15
+ {
16
+ name: @name,
17
+ id: @id
18
+ }.compact
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Dto
5
+ module Infra
6
+ class LoadBalancerEntityPayload
7
+ attr_accessor :name, :id
8
+
9
+ def initialize(name, id)
10
+ @name = name
11
+ @id = id
12
+ end
13
+
14
+ def to_hash
15
+ {
16
+ name: @name,
17
+ id: @id
18
+ }.compact
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Dto
5
+ module Infra
6
+ class NodePoolEntityPayload
7
+ attr_accessor :name, :id, :compartment_id
8
+
9
+ def initialize(name, id, compartment_id)
10
+ @name = name
11
+ @id = id
12
+ @compartment_id = compartment_id
13
+ end
14
+
15
+ def to_hash
16
+ {
17
+ name: @name,
18
+ id: @id,
19
+ compartment_id: @compartment_id
20
+ }.compact
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Dto
5
+ module Infra
6
+ class SubnetEntityPayload
7
+ attr_accessor :name, :id
8
+
9
+ def initialize(name, id)
10
+ @name = name
11
+ @id = id
12
+ end
13
+
14
+ def to_hash
15
+ {
16
+ name: @name,
17
+ id: @id
18
+ }.compact
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Dto
5
+ module Infra
6
+ class VcnEntityPayload
7
+ attr_accessor :name, :id
8
+
9
+ def initialize(name, id)
10
+ @name = name
11
+ @id = id
12
+ end
13
+
14
+ def to_hash
15
+ {
16
+ name: @name,
17
+ id: @id
18
+ }.compact
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,40 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ require_relative '../enum/infrastructure_resource_discovery'
5
+
6
+ module Dto
7
+ class InfraObjectsPayLoad
8
+ include Enum::InfrastructureResourceDiscovery
9
+ extend Util::Logging
10
+
11
+ attr_accessor :cluster, :vcn, :subnet, :load_balancer, :node_pools
12
+
13
+ def initialize(cluster, vcn, subnet, load_balancer, node_pools)
14
+ @cluster = cluster
15
+ @vcn = vcn
16
+ @subnet = subnet
17
+ @load_balancer = load_balancer
18
+ @node_pools = node_pools
19
+ end
20
+
21
+ def get_hash(obj, obj_name)
22
+ if !obj.nil?
23
+ obj.map(&:to_hash)
24
+ else
25
+ Util::Logging.logger.error("Cannot generate hash for #{obj_name}: as obj is nil")
26
+ nil
27
+ end
28
+ end
29
+
30
+ def to_hash
31
+ {
32
+ cluster: @cluster.to_hash,
33
+ vcn: @vcn.to_hash,
34
+ subnet: get_hash(@subnet, SUBNET.to_s),
35
+ load_balancer: @load_balancer.to_hash,
36
+ node_pools: get_hash(@node_pools, NODE_POOLS.to_s)
37
+ }.compact
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,58 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ require_relative '../enum/kubernetes_objects_enum'
5
+
6
+ module Dto
7
+ class KubernetesObjectsPayLoad
8
+ include Enum::KubernetesObjectsEnum
9
+ extend Util::Logging
10
+
11
+ attr_accessor :cluster, :nodes, :pods, :services, :endPointSlices, :deployments,
12
+ :replicaSets, :daemonSets, :cronJobs, :jobs, :statefulSets, :events, :namespaces
13
+
14
+ def initialize(cluster, nodes, pods, services, endPointSlices, deployments,
15
+ replicaSets, daemonSets, cronJobs, jobs, statefulSets, events, namespaces)
16
+ @cluster = cluster
17
+ @nodes = nodes
18
+ @pods = pods
19
+ @services = services
20
+ @endPointSlices = endPointSlices
21
+ @deployments = deployments
22
+ @replicaSets = replicaSets
23
+ @daemonSets = daemonSets
24
+ @cronJobs = cronJobs
25
+ @jobs = jobs
26
+ @statefulSets = statefulSets
27
+ @events = events
28
+ @namespaces = namespaces
29
+ end
30
+
31
+ def get_hash(obj, obj_name)
32
+ if !obj.nil?
33
+ obj.map(&:to_h)
34
+ else
35
+ Util::Logging.logger.error("Could not generate hash for #{obj_name}: as obj is nil")
36
+ nil
37
+ end
38
+ end
39
+
40
+ def to_hash
41
+ {
42
+ cluster: @cluster.nil? ? nil : @cluster.to_h,
43
+ nodes: get_hash(@nodes, NODES.to_s),
44
+ pods: get_hash(@pods, PODS.to_s),
45
+ services: get_hash(@services, SERVICES.to_s),
46
+ endpointslices: get_hash(@endPointSlices, ENDPOINT_SLICES.to_s),
47
+ deployments: get_hash(@deployments, DEPLOYMENTS.to_s),
48
+ replicasets: get_hash(@replicaSets, REPLICA_SETS.to_s),
49
+ daemonsets: get_hash(@daemonSets, DAEMON_SETS.to_s),
50
+ cronjobs: get_hash(@cronJobs, CRON_JOBS.to_s),
51
+ jobs: get_hash(@jobs, JOBS.to_s),
52
+ statefulsets: get_hash(@statefulSets, STATEFUL_SETS.to_s),
53
+ events: get_hash(@events, EVENTS.to_s),
54
+ namespaces: get_hash(@namespaces, NAMESPACES.to_s)
55
+ }.compact
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,26 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Dto
5
+ module Payload
6
+ class LogEvents
7
+ attr_accessor :metadata, :logSourceName, :logPath, :logRecords
8
+
9
+ def initialize(metadata, log_source_name, log_path, records)
10
+ @metadata = metadata
11
+ @logSourceName = log_source_name
12
+ @logPath = log_path
13
+ @logRecords = Array.new(1, records['message'])
14
+ end
15
+
16
+ def to_hash
17
+ {
18
+ metadata: @metadata,
19
+ logSourceName: @logSourceName,
20
+ logPath: @logPath,
21
+ logRecords: @logRecords
22
+ }.compact
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ require_relative './log_events'
5
+
6
+ module Dto
7
+ module Payload
8
+ class LogEventsJson
9
+ attr_accessor :LogEvents
10
+
11
+ def initialize(logEvents)
12
+ @LogEvents = Array.new(1, logEvents)
13
+ end
14
+
15
+ def to_hash
16
+ {
17
+ logEvents: @LogEvents.map(&:to_hash)
18
+ }.compact
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/dto/state.rb ADDED
@@ -0,0 +1,19 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Dto
5
+ class State
6
+ attr_accessor :last_timestamp
7
+
8
+ def initialize(last_timestamp = nil)
9
+ @last_timestamp = last_timestamp unless last_timestamp.nil?
10
+ end
11
+
12
+ # make sure all values are strings
13
+ def to_hash
14
+ {
15
+ last_timestamp: @last_timestamp.to_s
16
+ }.compact
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Enum
5
+ module AuthTypeEnum
6
+ CONFIG = 'config'.freeze
7
+ INSTANCE_PRINCIPAL = 'instance_principal'.freeze
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Enum
5
+ module InfrastructureResourceDiscovery
6
+ SUBNET = 'subnet'.freeze
7
+ NODE_POOLS = 'node_pools'.freeze
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ ## Copyright (c) 2024 Oracle and/or its affiliates.
2
+ ## The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/
3
+
4
+ module Enum
5
+ module KubernetesObjectsEnum
6
+ CLUSTER = 'cluster'.freeze
7
+ NODES = 'nodes'.freeze
8
+ PODS = 'pods'.freeze
9
+ SERVICES = 'services'.freeze
10
+ ENDPOINT_SLICES = 'endpoint_slices'.freeze
11
+ DEPLOYMENTS = 'deployments'.freeze
12
+ REPLICA_SETS = 'replica_sets'.freeze
13
+ DAEMON_SETS = 'daemon_sets'.freeze
14
+ CRON_JOBS = 'cron_jobs'.freeze
15
+ JOBS = 'jobs'.freeze
16
+ STATEFUL_SETS = 'stateful_sets'.freeze
17
+ EVENTS = 'events'.freeze
18
+ NAMESPACES = 'namespaces'.freeze
19
+ PERSISTENT_VOLUMES = 'persistent_volumes'.freeze
20
+ PERSISTENT_VOLUME_CLAIMS = 'persistent_volume_claims'.freeze
21
+ end
22
+ end