oci-logging-analytics-kubernetes-discovery 1.0.2 → 1.1.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/bin/oci-loganalytics-kubernetes-discovery +102 -25
  4. data/lib/config/oci_client_retry_config.rb +11 -8
  5. data/lib/discover/infrastructure.rb +81 -29
  6. data/lib/discover/object.rb +19 -4
  7. data/lib/dto/infra/load_balancer_payload.rb +32 -0
  8. data/lib/dto/infra/node_pool_payload.rb +28 -0
  9. data/lib/dto/infra/{node_pool_entity_payload.rb → resource_payload.rb} +6 -6
  10. data/lib/dto/infra/subnet_payload.rb +34 -0
  11. data/lib/dto/infra_objects_payload.rb +3 -3
  12. data/lib/dto/kubernetes_objects_payload.rb +19 -15
  13. data/lib/dto/state.rb +7 -3
  14. data/lib/enum/auth_type_enum.rb +1 -0
  15. data/lib/enum/infrastructure_resource_discovery.rb +1 -0
  16. data/lib/enum/object_client_mapping_enum.rb +1 -1
  17. data/lib/enum/stack_job_lifecycle_state_enum.rb +14 -0
  18. data/lib/enum/stack_job_operation_enum.rb +10 -0
  19. data/lib/infra_resources.rb +142 -41
  20. data/lib/objects_resources.rb +16 -6
  21. data/lib/oci_loganalytics_resources_discovery.rb +104 -77
  22. data/lib/util/helper.rb +15 -0
  23. data/lib/util/kube_client.rb +1 -0
  24. data/lib/util/kubectl_ops.rb +1 -1
  25. data/lib/util/log_analytics.rb +2 -2
  26. data/lib/util/oci_clients.rb +222 -103
  27. data/lib/util/service_logs.rb +559 -0
  28. data/lib/util/state_manager.rb +12 -2
  29. data/lib/util/string_utils.rb +48 -0
  30. data/lib/version.rb +1 -1
  31. data/oci-logging-analytics-kubernetes-discovery.gemspec +1 -1
  32. metadata +13 -10
  33. data/lib/dto/infra/cluster_entity_payload.rb +0 -22
  34. data/lib/dto/infra/load_balancers_entity_payload.rb +0 -22
  35. data/lib/dto/infra/subnet_entity_payload.rb +0 -22
  36. data/lib/dto/infra/vcn_entity_payload.rb +0 -22
@@ -13,43 +13,129 @@ module Util
13
13
 
14
14
  module_function
15
15
 
16
- attr_accessor :oci_clients, :ce_client, :id_client, :lb_client, :la_client, :rs_client, :vnc_client,
17
- :oci_config, :instance_principals_signer, :auth_type, :endpoint, :auth_config_object
16
+ attr_accessor :oci_clients, :ce_client, :id_client, :lb_client, :la_client, :rs_client,
17
+ :vcn_client, :oci_config, :instance_principals_signer, :la_endpoint,
18
+ :auth_type, :auth_config_object, :oci_domain, :oci_retry_config, :oci_region
18
19
 
19
- def create_clients(auth_object, options)
20
+ # This must be the first method called before any other method
21
+ def initialize(auth_config_hash)
20
22
  begin
21
- @la_client = initialize_la_client(auth_object, nil)
23
+ initialize_auth_config(auth_config_hash)
24
+ rescue StandardError => e
25
+ logger.error("Error occurred in creating authentication object - #{e}")
26
+ raise e
27
+ end
28
+ logger.debug('Successfully loaded the OCI auth config.')
29
+
30
+ begin
31
+ create_clients
32
+ rescue StandardError => e
33
+ logger.error("Error occurred in creating OCI clients - #{e}")
34
+ raise e
35
+ end
36
+ logger.debug('OCI clients created successfully.')
37
+
38
+ set_clients
39
+ end
22
40
 
23
- if options[:mode] == 'object'
24
- set_clients
25
- return
41
+ def initialize_auth_config(auth_config_hash)
42
+ @auth_type = auth_config_hash[:auth_type]
43
+ @oci_domain = auth_config_hash[:oci_domain]
44
+ @la_endpoint = auth_config_hash[:endpoint]
45
+
46
+ begin
47
+ if @auth_type == Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
48
+ @oci_config = OCI::Config.new
49
+ if @oci_domain.nil?
50
+ @instance_principals_signer = OCI::Auth::Signers::InstancePrincipalsSecurityTokenSigner.new
51
+ else
52
+ federation_endpoint = "https://auth.#{@oci_domain}/v1/x509"
53
+ logger.info("Federation Endpoint: #{federation_endpoint}")
54
+ @instance_principals_signer = OCI::Auth::Signers::InstancePrincipalsSecurityTokenSigner.new(
55
+ federation_endpoint: federation_endpoint
56
+ )
57
+ end
58
+ @oci_region = @instance_principals_signer.region
59
+ # elsif @auth_type == Enum::AuthTypeEnum::OKE_WORKLOAD_IDENTITY
60
+ # @workload_identity_signer = OCI::Auth::Signers::oke_workload_resource_principal_signer
61
+ elsif @auth_type == Enum::AuthTypeEnum::CONFIG
62
+ @oci_config = OCI::ConfigFileLoader.load_config(config_file_location: auth_config_hash[:config_file_location],
63
+ profile_name: auth_config_hash[:profile_name])
64
+ @oci_region = @oci_config.region
65
+ else
66
+ raise Exception::InvalidOption, "#{@auth_type}"
26
67
  end
68
+ rescue StandardError => e
69
+ logger.error("Error occurred while initializing OCI authentication configuration. Error: #{e}")
70
+ raise e
71
+ end
72
+ set_auth_config_object
73
+ end
27
74
 
28
- @ce_client = initialize_ce_client(auth_object)
29
- @id_client = initialize_id_client(auth_object)
30
- @lb_client = initialize_lb_client(auth_object)
31
- @rs_client = initialize_rs_client(auth_object)
32
- @vnc_client = initialize_vnc_client(auth_object)
75
+ def set_clients
76
+ @oci_clients = {
77
+ ce_client: @ce_client,
78
+ id_client: @id_client,
79
+ lb_client: @lb_client,
80
+ la_client: @la_client,
81
+ rqs_client: @rqs_client,
82
+ vcn_client: @vcn_client,
83
+ rms_client: @rms_client
84
+ }
85
+ end
86
+
87
+ def get_clients
88
+ @oci_clients
89
+ end
90
+
91
+ def get_region
92
+ @oci_region
93
+ end
94
+
95
+ def get_domain
96
+ @oci_domain
97
+ end
98
+
99
+ def create_clients()
100
+ begin
101
+ @oci_retry_config = Config::OCIClientRetryConfig.custom_retry_policy
102
+
103
+ @la_client = initialize_la_client
104
+ @ce_client = initialize_ce_client
105
+ @id_client = initialize_id_client
106
+ @lb_client = initialize_lb_client
107
+ @rqs_client = initialize_rqs_client
108
+ @vcn_client = initialize_vcn_client
109
+ @rms_client = initialize_rms_client
33
110
  rescue StandardError => e
34
111
  logger.error("Error while creating OCI clients. Error: #{e}")
35
112
  raise e
36
113
  end
37
- set_clients
38
- nil
114
+ logger.info('OCI clients created.')
39
115
  end
40
116
 
41
- def initialize_ce_client(auth_object)
117
+ def initialize_ce_client()
42
118
  client = nil
43
- logger.debug("Creating container engine client with auth_type: #{auth_object[:auth_type]}")
119
+ endpoint = nil
120
+ retry_config = Config::OCIClientRetryConfig.oci_default_retry_config if @oci_retry_config.nil?
121
+ unless @oci_domain.nil?
122
+ endpoint = "https://containerengine.#{@oci_domain}"
123
+ logger.info("CE Client endpoint: #{endpoint}")
124
+ end
125
+ logger.debug("Creating container engine client with auth_type: #{@auth_type}")
44
126
  begin
45
- case auth_object[:auth_type]
127
+ case @auth_type
46
128
  when Enum::AuthTypeEnum::CONFIG
47
- client = OCI::ContainerEngine::ContainerEngineClient.new(config: auth_object[:oci_config])
129
+ client = OCI::ContainerEngine::ContainerEngineClient.new(config: @oci_config, endpoint: endpoint, retry_config: retry_config)
48
130
  when Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
49
- client = OCI::ContainerEngine::ContainerEngineClient.new(config: auth_object[:oci_config], signer: auth_object[:instance_principals_signer])
131
+ client = OCI::ContainerEngine::ContainerEngineClient.new(
132
+ config: @oci_config, endpoint: endpoint,
133
+ signer: @instance_principals_signer,
134
+ retry_config: retry_config)
50
135
  else
51
- logger.warn("Unknown auth_type '#{auth_object[:auth_type]}' provided for container engine client.")
136
+ logger.warn("Unknown auth_type '#{@auth_type}' provided for container engine client.")
52
137
  end
138
+ logger.debug('CE Client created.')
53
139
  @ce_client = client
54
140
  rescue StandardError => e
55
141
  logger.error("Error while creating container engine client: #{e}")
@@ -58,20 +144,25 @@ module Util
58
144
  client
59
145
  end
60
146
 
61
- def initialize_id_client(auth_object)
147
+ def initialize_id_client()
62
148
  client = nil
63
- logger.debug("Creating identity client with auth_type: #{auth_object[:auth_type]}")
149
+ endpoint = nil
150
+ retry_config = Config::OCIClientRetryConfig.oci_default_retry_config if @oci_retry_config.nil?
151
+ unless @oci_domain.nil?
152
+ endpoint = "https://identity.#{@oci_domain}"
153
+ logger.info("ID Client endpoint: #{endpoint}")
154
+ end
155
+ logger.debug("Creating identity client with auth_type: #{@auth_type}")
64
156
  begin
65
- case auth_object[:auth_type]
157
+ case @auth_type
66
158
  when Enum::AuthTypeEnum::CONFIG
67
- client = OCI::Identity::IdentityClient.new(config: auth_object[:oci_config])
68
- when Enum::AuthTypeEnum::ENDPOINT
69
- client = OCI::Identity::IdentityClient.new(config: auth_object[:oci_config], endpoint: auth_object[:endpoint])
70
- when Enum::AuthTypeEnum::PRINCIPAL
71
- client = OCI::Identity::IdentityClient.new(config: auth_object[:oci_config], signer: auth_object[:instance_principals_signer])
159
+ client = OCI::Identity::IdentityClient.new(config: @oci_config, endpoint: endpoint, retry_config: retry_config)
160
+ when Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
161
+ client = OCI::Identity::IdentityClient.new(config: @oci_config, endpoint: endpoint, signer: @instance_principals_signer, retry_config: retry_config)
72
162
  else
73
- logger.warn("Unknown auth_type '#{auth_object[:auth_type]}' provided for identity client.")
163
+ logger.warn("Unknown auth_type '#{@auth_type}' provided for identity client.")
74
164
  end
165
+ logger.debug('ID Client created.')
75
166
  @id_client = client
76
167
  rescue StandardError => e
77
168
  logger.error("Error while creating identity client: #{e}")
@@ -80,20 +171,25 @@ module Util
80
171
  @id_client
81
172
  end
82
173
 
83
- def initialize_lb_client(auth_object)
174
+ def initialize_lb_client()
84
175
  client = nil
85
- logger.debug("Creating load balancer client with auth_type: #{auth_object[:auth_type]}")
176
+ endpoint = nil
177
+ retry_config = Config::OCIClientRetryConfig.oci_default_retry_config if @oci_retry_config.nil?
178
+ unless @oci_domain.nil?
179
+ endpoint = "https://iaas.#{@oci_domain}"
180
+ logger.info("LB Client endpoint: #{endpoint}")
181
+ end
182
+ logger.debug("Creating load balancer client with auth_type: #{@auth_type}")
86
183
  begin
87
- case auth_object[:auth_type]
184
+ case @auth_type
88
185
  when Enum::AuthTypeEnum::CONFIG
89
- client = OCI::LoadBalancer::LoadBalancerClient.new(config: auth_object[:oci_config])
90
- when Enum::AuthTypeEnum::ENDPOINT
91
- client = OCI::LoadBalancer::LoadBalancerClient.new(config: auth_object[:oci_config], endpoint: auth_object[:endpoint])
92
- when Enum::AuthTypeEnum::PRINCIPAL
93
- client = OCI::LoadBalancer::LoadBalancerClient.new(config: auth_object[:oci_config], signer: auth_object[:instance_principals_signer])
186
+ client = OCI::LoadBalancer::LoadBalancerClient.new(config: @oci_config, endpoint: endpoint, retry_config: retry_config)
187
+ when Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
188
+ client = OCI::LoadBalancer::LoadBalancerClient.new(config: @oci_config, endpoint: endpoint, signer: @instance_principals_signer, retry_config: retry_config)
94
189
  else
95
- logger.warn("Unknown auth_type '#{auth_object[:auth_type]}' provided for load balancer client.")
190
+ logger.warn("Unknown auth_type '#{@auth_type}' provided for load balancer client.")
96
191
  end
192
+ logger.debug('LB Client created.')
97
193
  @lb_client = client
98
194
  rescue StandardError => e
99
195
  logger.error("Error while creating load balancer client: #{e}")
@@ -102,26 +198,34 @@ module Util
102
198
  @lb_client
103
199
  end
104
200
 
105
- def initialize_la_client(auth_object, custom_retry_config)
201
+ def initialize_la_client()
106
202
  client = nil
107
- logger.debug("Creating log analytics client with auth_type: #{auth_object[:auth_type]}")
108
- Config::OCIClientRetryConfig.set_custom_retry_config(custom_retry_config) unless custom_retry_config.nil?
203
+ retry_config = Config::OCIClientRetryConfig.oci_default_retry_config if @oci_retry_config.nil?
204
+
205
+ logger.debug("Creating log analytics client with auth_type: #{@auth_type}")
206
+
207
+ endpoint = @la_endpoint
208
+ if endpoint.nil? && !@oci_domain.nil?
209
+ endpoint = "https://loganalytics.#{@oci_domain}"
210
+ logger.info("LA Client endpoint: #{endpoint}")
211
+ end
109
212
 
110
213
  begin
111
- case auth_object[:auth_type]
214
+ case @auth_type
112
215
  when Enum::AuthTypeEnum::CONFIG
113
- client = OCI::LogAnalytics::LogAnalyticsClient.new(config: auth_object[:oci_config],
114
- endpoint: auth_object[:endpoint],
115
- retry_config: Config::OCIClientRetryConfig.get_retry_config)
216
+ client = OCI::LogAnalytics::LogAnalyticsClient.new(config: @oci_config,
217
+ endpoint: endpoint,
218
+ retry_config: retry_config)
116
219
  when Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
117
- client = OCI::LogAnalytics::LogAnalyticsClient.new(config: auth_object[:oci_config],
118
- endpoint: auth_object[:endpoint],
119
- signer: auth_object[:instance_principals_signer],
120
- retry_config: Config::OCIClientRetryConfig.get_retry_config)
220
+ client = OCI::LogAnalytics::LogAnalyticsClient.new(config: @oci_config,
221
+ endpoint: endpoint,
222
+ signer: @instance_principals_signer,
223
+ retry_config: retry_config)
121
224
  else
122
- logger.warn("Unknown auth_type while creating log analytics client: #{auth_object[:auth_type]}")
225
+ logger.warn("Unknown auth_type while creating log analytics client: #{@auth_type}")
123
226
  raise StandardError, 'Unknown auth_type for log analytics client.'
124
227
  end
228
+ logger.debug('LA Client created.')
125
229
  @la_client = client
126
230
  rescue StandardError => e
127
231
  logger.error("Error while creating log analytics client: #{e}")
@@ -130,86 +234,99 @@ module Util
130
234
  @la_client
131
235
  end
132
236
 
133
- def initialize_rs_client(auth_object)
237
+ def initialize_rqs_client()
134
238
  client = nil
135
- logger.debug("Creating resource search client with auth_type: #{auth_object[:auth_type]}")
239
+ endpoint = nil
240
+ retry_config = Config::OCIClientRetryConfig.oci_default_retry_config if @oci_retry_config.nil?
241
+
242
+ unless @oci_domain.nil?
243
+ endpoint = "https://query.#{@oci_domain}"
244
+ logger.info("RQS Client endpoint: #{endpoint}")
245
+ end
246
+
247
+ logger.debug("Creating resource search client with auth_type: #{@auth_type}")
248
+
136
249
  begin
137
- case auth_object[:auth_type]
250
+ case @auth_type
138
251
  when Enum::AuthTypeEnum::CONFIG
139
- client = OCI::ResourceSearch::ResourceSearchClient.new(config: auth_object[:oci_config])
140
- when Enum::AuthTypeEnum::ENDPOINT
141
- client = OCI::ResourceSearch::ResourceSearchClient.new(config: auth_object[:oci_config], endpoint: auth_object[:endpoint])
142
- when Enum::AuthTypeEnum::PRINCIPAL
143
- client = OCI::ResourceSearch::ResourceSearchClient.new(config: auth_object[:oci_config], signer: auth_object[:instance_principals_signer])
252
+ client = OCI::ResourceSearch::ResourceSearchClient.new(config: @oci_config, endpoint: endpoint, retry_config: retry_config)
253
+ when Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
254
+ client = OCI::ResourceSearch::ResourceSearchClient.new(config: @oci_config, endpoint: endpoint, signer: @instance_principals_signer, retry_config: retry_config)
144
255
  else
145
- logger.warn("Unknown auth_type '#{auth_object[:auth_type]}' provided for resource search client.")
256
+ logger.warn("Unknown auth_type '#{@auth_type}' provided for resource search client.")
146
257
  end
147
- @rs_client = client
258
+ logger.debug('RQS Client created.')
259
+ @rqs_client = client
148
260
  rescue StandardError => e
149
261
  logger.error("Error while creating resource search client: #{e}")
150
262
  raise e
151
263
  end
152
- @rs_client
264
+ @rqs_client
153
265
  end
154
266
 
155
- def initialize_vnc_client(auth_object)
267
+ def initialize_vcn_client()
156
268
  client = nil
157
- logger.debug("Creating virtual network client with auth_type: #{auth_object[:auth_type]}")
269
+ endpoint = nil
270
+ retry_config = Config::OCIClientRetryConfig.oci_default_retry_config if @oci_retry_config.nil?
271
+
272
+ unless @oci_domain.nil?
273
+ # NOTE: Dec 3rd, 2024
274
+ # VCN endpoint does not support region.oci.domain template hence converting to region.domain template
275
+ endpoint = "https://iaas.#{@oci_domain.gsub('.oci', '')}"
276
+ logger.info("VCN Client endpoint: #{endpoint}")
277
+ end
278
+
279
+ logger.debug("Creating virtual network client with auth_type: #{@auth_type}")
280
+
158
281
  begin
159
- case auth_object[:auth_type]
282
+ case @auth_type
160
283
  when Enum::AuthTypeEnum::CONFIG
161
- client = OCI::Core::VirtualNetworkClient.new(config: auth_object[:oci_config])
162
- when Enum::AuthTypeEnum::ENDPOINT
163
- client = OCI::Core::VirtualNetworkClient.new(config: auth_object[:oci_config], endpoint: auth_object[:endpoint])
164
- when Enum::AuthTypeEnum::PRINCIPAL
165
- client = OCI::Core::VirtualNetworkClient.new(config: auth_object[:oci_config], signer: auth_object[:instance_principals_signer])
284
+ client = OCI::Core::VirtualNetworkClient.new(config: @oci_config, endpoint: endpoint, retry_config: retry_config)
285
+ when Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
286
+ client = OCI::Core::VirtualNetworkClient.new(config: @oci_config, endpoint: endpoint, signer: @instance_principals_signer, retry_config: retry_config)
166
287
  else
167
- logger.warn("Unknown auth_type '#{auth_object[:auth_type]}' provided for virtual network client.")
288
+ logger.warn("Unknown auth_type '#{@auth_type}' provided for virtual network client.")
168
289
  end
169
- @vnc_client = client
290
+ logger.debug('VCN Client created.')
291
+ @vcn_client = client
170
292
  rescue StandardError => e
171
293
  logger.error("Error while creating virtual network client: #{e}")
172
294
  raise e
173
295
  end
174
- @vnc_client
296
+ @vcn_client
175
297
  end
176
298
 
177
- def initialize_auth_config(auth_config_hash)
178
- @endpoint = auth_config_hash[:endpoint]
299
+ def initialize_rms_client()
300
+ client = nil
301
+ endpoint = nil
302
+ retry_config = Config::OCIClientRetryConfig.oci_default_retry_config if @oci_retry_config.nil?
179
303
 
180
- begin
181
- if !auth_config_hash[:config_file_location].nil? && !auth_config_hash[:profile_name].nil?
182
- @oci_config = OCI::ConfigFileLoader.load_config(config_file_location: auth_config_hash[:config_file_location],
183
- profile_name: auth_config_hash[:profile_name])
184
- end
304
+ unless @oci_domain.nil?
305
+ endpoint = "https://resourcemanager.#{@oci_domain}"
306
+ logger.info("VCN Client endpoint: #{endpoint}")
307
+ end
185
308
 
186
- if !@oci_config.nil?
187
- @auth_type = Enum::AuthTypeEnum::CONFIG
309
+ begin
310
+ case @auth_type
311
+ when Enum::AuthTypeEnum::CONFIG
312
+ client = OCI::ResourceManager::ResourceManagerClient.new(config: @oci_config,
313
+ endpoint: endpoint,
314
+ retry_config: retry_config)
315
+ when Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
316
+ client = OCI::ResourceManager::ResourceManagerClient.new(config: @oci_config,
317
+ endpoint: endpoint,
318
+ signer: @instance_principals_signer,
319
+ retry_config: retry_config)
188
320
  else
189
- @oci_config = OCI::Config.new
190
- @instance_principals_signer = instance_principals_signer = OCI::Auth::Signers::InstancePrincipalsSecurityTokenSigner.new
191
- @auth_type = Enum::AuthTypeEnum::INSTANCE_PRINCIPAL
321
+ logger.warn("Unknown auth_type '#{auth_object[:auth_type]}' provided for resource manager client.")
192
322
  end
323
+ logger.debug('RMS Client created.')
324
+ @rms_client = client
193
325
  rescue StandardError => e
194
- logger.error("Error occurred while initializing OCI authentication configuration. Error: #{e}")
326
+ logger.error("Error while creating resource manager client: #{e}")
195
327
  raise e
196
328
  end
197
- set_auth_config_object
198
- end
199
-
200
- def get_clients
201
- @oci_clients
202
- end
203
-
204
- def set_clients
205
- @oci_clients = {
206
- ce_client: @ce_client,
207
- id_client: @id_client,
208
- lb_client: @lb_client,
209
- la_client: @la_client,
210
- rs_client: @rs_client,
211
- vnc_client: @vnc_client
212
- }
329
+ @rms_client
213
330
  end
214
331
 
215
332
  def get_auth_config_object
@@ -219,9 +336,11 @@ module Util
219
336
  def set_auth_config_object
220
337
  @auth_object = {
221
338
  oci_config: @oci_config,
222
- endpoint: @endpoint,
339
+ la_endpoint: @la_endpoint,
223
340
  instance_principals_signer: @instance_principals_signer,
224
- auth_type: @auth_type
341
+ # workload_identity_signer: @workload_identity_signer,
342
+ auth_type: @auth_type,
343
+ oci_domain: @oci_domain
225
344
  }.compact
226
345
  end
227
346
  end