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.
- checksums.yaml +7 -0
- data/.gitignore +40 -0
- data/.travis.yml +6 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +36 -0
- data/README.md +83 -0
- data/Rakefile +15 -0
- data/bin/console +17 -0
- data/bin/oci-loganalytics-kubernetes-discovery +184 -0
- data/bin/setup +12 -0
- data/lib/config/oci_client_retry_config.rb +34 -0
- data/lib/discover/infrastructure.rb +122 -0
- data/lib/discover/object.rb +347 -0
- data/lib/dto/infra/cluster_entity_payload.rb +22 -0
- data/lib/dto/infra/load_balancers_entity_payload.rb +22 -0
- data/lib/dto/infra/node_pool_entity_payload.rb +24 -0
- data/lib/dto/infra/subnet_entity_payload.rb +22 -0
- data/lib/dto/infra/vcn_entity_payload.rb +22 -0
- data/lib/dto/infra_objects_payload.rb +40 -0
- data/lib/dto/kubernetes_objects_payload.rb +58 -0
- data/lib/dto/payload/log_events.rb +26 -0
- data/lib/dto/payload/log_events_json.rb +22 -0
- data/lib/dto/state.rb +19 -0
- data/lib/enum/auth_type_enum.rb +9 -0
- data/lib/enum/infrastructure_resource_discovery.rb +9 -0
- data/lib/enum/kubernetes_objects_enum.rb +22 -0
- data/lib/enum/object_client_mapping_enum.rb +21 -0
- data/lib/infra_resources.rb +91 -0
- data/lib/objects_resources.rb +174 -0
- data/lib/oci_loganalytics_resources_discovery.rb +293 -0
- data/lib/util/kube_client.rb +141 -0
- data/lib/util/kubectl_ops.rb +229 -0
- data/lib/util/log_analytics.rb +154 -0
- data/lib/util/logging.rb +96 -0
- data/lib/util/oci_clients.rb +228 -0
- data/lib/util/state_manager.rb +61 -0
- data/lib/util/string_utils.rb +16 -0
- data/lib/version.rb +6 -0
- data/oci-logging-analytics-kubernetes-discovery.gemspec +45 -0
- 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
|