topological_inventory-providers-common 2.1.4 → 3.0.2

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: 9c17638d4fd82db196de0019069a765bf1c6becdb20498765507ae35a02727eb
4
- data.tar.gz: a395cd7243591bc3dab9f841e491bb978a2502d2ba1cfec3fdb004de784523dd
3
+ metadata.gz: ecc26cbace6fd3e43de690666e17f8c7d27e153efb05a2d48fb281712f073e8c
4
+ data.tar.gz: 0221166156a11b5f75da12b3fc1bb861b8594a058823fa2771c62a529ea165f5
5
5
  SHA512:
6
- metadata.gz: ba2b33ec9748ef58b4ca7dc30f14d34443c17026e7915fb2bd9aef2a4ec95c4c287a8149a371b91cab88974a0341f7dfd362a987ca55ea644a5b67646adafde6
7
- data.tar.gz: 41edf911fa71ef7dcdaa220a417a236e8a593a01e227ab4f0f88e70318141f8736ad8bd9bff7e642d6cef1134d017baa8aea0c1c194987b08770a721a7a2ff00
6
+ metadata.gz: ce5b60dd2047b2b316fa8e0add3b114664f707feae697afd45febf1abd265af96990b89c32ba53e6084f5abfb0a177cdc5ea2eb8c1f9437fdd3791e2dd19b2f0
7
+ data.tar.gz: d5ebb51170ffb18b7aaba271f5361742c1a2d849c96b181274b7f2562e67e4cb29bf94f83067ca41e26c51ff01a5ccf595fa4c776135a3b4cd1b154a7b3fea97
data/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file.
3
3
 
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+ ## [3.0.2] - 2021-08-24
7
+ Support PSK headers in sources api client #78
8
+
9
+ ## [3.0.1] - 2021-04-30
10
+ More generic activesupport dependency #77
11
+
12
+ ## [3.0.0] - 2021-03-08
13
+ Clowder migration #75
14
+
15
+ ## [2.1.5] - 2021-01-07
16
+ Include x-rh-id header in Kafka Availability-Status message #73
17
+
6
18
  ## [2.1.4] - 2020-12-14
7
19
  Common Counter metrics init #71
8
20
 
@@ -81,12 +93,18 @@ manageiq-loggers to >= 0.4.2 #20
81
93
  ## [1.0.0] - 2020-03-19
82
94
  ### Initial release to rubygems.org
83
95
 
84
- [Unreleased]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.3...HEAD
85
- [2.1.3]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.2...v2.1.3
86
- [2.1.2]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.1...v2.1.2
87
- [2.1.1]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.0...v2.1.1
88
- [2.1.0]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.0.0...v2.1.0
89
- [2.0.0]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v1.0.12...v2.0.0
96
+ [Unreleased]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v3.0.2.freeze...HEAD
97
+ [3.0.2]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v3.0.1.freeze...v3.0.2.freeze
98
+ [3.0.1]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v3.0.0.freeze...v3.0.1.freeze
99
+ [3.0.0]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.5.freeze...v3.0.0.freeze
100
+ [2.1.5]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.4.freeze...v2.1.5.freeze
101
+ [2.1.5]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.4.freeze...v2.1.5.freeze
102
+ [2.1.4]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.3.freeze...v2.1.4.freeze
103
+ [2.1.3]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.2.freeze...v2.1.3.freeze
104
+ [2.1.2]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.1.freeze...v2.1.2.freeze
105
+ [2.1.1]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.1.0.freeze...v2.1.1.freeze
106
+ [2.1.0]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v2.0.0.freeze...v2.1.0.freeze
107
+ [2.0.0]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v1.0.12...v2.0.0.freeze
90
108
  [1.0.12]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v1.0.11...v1.0.12
91
109
  [1.0.11]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v1.0.10...v1.0.11
92
110
  [1.0.10]: https://github.com/RedHatInsights/topological_inventory-providers-common/compare/v1.0.9...v1.0.10
@@ -0,0 +1,68 @@
1
+ require 'clowder-common-ruby'
2
+ require 'singleton'
3
+
4
+ module TopologicalInventory
5
+ module Providers
6
+ module Common
7
+ class ClowderConfig
8
+ include Singleton
9
+
10
+ def self.clowder_enabled?
11
+ ::ClowderCommonRuby::Config.clowder_enabled?
12
+ end
13
+
14
+ def self.instance
15
+ @instance ||= {}.tap do |options|
16
+ if clowder_enabled?
17
+ config = ::ClowderCommonRuby::Config.load
18
+ options["awsAccessKeyId"] = config.logging.cloudwatch.accessKeyId
19
+ options["awsRegion"] = config.logging.cloudwatch.region
20
+ options["awsSecretAccessKey"] = config.logging.cloudwatch.secretAccessKey
21
+ broker = config.kafka.brokers.first
22
+ options["kafkaHost"] = broker.hostname
23
+ options["kafkaPort"] = broker.port
24
+
25
+ options["kafkaTopics"] = {}.tap do |topics|
26
+ config.kafka.topics.each do |topic|
27
+ topics[topic.requestedName.to_s] = topic.name.to_s
28
+ end
29
+ end
30
+ options["logGroup"] = config.logging.cloudwatch.logGroup
31
+ options["metricsPort"] = config.metricsPort
32
+ options["metricsPath"] = config.metricsPath # not supported by PrometheusExporter
33
+ else
34
+ options["awsAccessKeyId"] = ENV['CW_AWS_ACCESS_KEY_ID']
35
+ options["awsRegion"] = 'us-east-1'
36
+ options["awsSecretAccessKey"] = ENV['CW_AWS_SECRET_ACCESS_KEY']
37
+ options["kafkaBrokers"] = ["#{ENV['QUEUE_HOST']}:#{ENV['QUEUE_PORT']}"]
38
+ options["kafkaHost"] = ENV['QUEUE_HOST'] || 'localhost'
39
+ options["kafkaPort"] = (ENV['QUEUE_PORT'] || '9092').to_i
40
+ options["kafkaTopics"] = {}
41
+ options["logGroup"] = 'platform-dev'
42
+ options["metricsPort"] = (ENV['METRICS_PORT'] || 9394).to_i
43
+ end
44
+ end
45
+ end
46
+
47
+ def self.fill_args_operations(args)
48
+ args[:metrics_port] = instance['metricsPort']
49
+ args[:queue_host] = instance['kafkaHost']
50
+ args[:queue_port] = instance['kafkaPort']
51
+ args
52
+ end
53
+
54
+ def self.kafka_topic(name)
55
+ instance["kafkaTopics"][name] || name
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ # ManageIQ Message Client depends on these variables
63
+ ENV["QUEUE_HOST"] = TopologicalInventory::Providers::Common::ClowderConfig.instance["kafkaHost"]
64
+ ENV["QUEUE_PORT"] = TopologicalInventory::Providers::Common::ClowderConfig.instance["kafkaPort"].to_s
65
+
66
+ # ManageIQ Logger depends on these variables
67
+ ENV['CW_AWS_ACCESS_KEY_ID'] = TopologicalInventory::Providers::Common::ClowderConfig.instance["awsAccessKeyId"]
68
+ ENV['CW_AWS_SECRET_ACCESS_KEY'] = TopologicalInventory::Providers::Common::ClowderConfig.instance["awsSecretAccessKey"]
@@ -1,5 +1,6 @@
1
1
  require "more_core_extensions/core_ext/module/cache_with_timeout"
2
2
  require "manageiq-messaging"
3
+ require "topological_inventory/providers/common/clowder_config"
3
4
 
4
5
  module TopologicalInventory
5
6
  module Providers
@@ -11,8 +12,8 @@ module TopologicalInventory
11
12
  attr_accessor :queue_port
12
13
 
13
14
  def initialize
14
- self.queue_host = ENV['QUEUE_HOST'] || 'localhost'
15
- self.queue_port = (ENV['QUEUE_PORT'] || 9092).to_i
15
+ self.queue_host = TopologicalInventory::Providers::Common::ClowderConfig.instance["kafkaHost"]
16
+ self.queue_port = TopologicalInventory::Providers::Common::ClowderConfig.instance["kafkaPort"].to_i
16
17
  end
17
18
 
18
19
  def self.default
@@ -17,7 +17,7 @@ module TopologicalInventory
17
17
 
18
18
  STATUS_AVAILABLE, STATUS_UNAVAILABLE = %w[available unavailable].freeze
19
19
  EVENT_AVAILABILITY_STATUS = "availability_status".freeze
20
- SERVICE_NAME = "platform.sources.status".freeze
20
+ KAFKA_TOPIC_NAME = "platform.sources.status".freeze
21
21
 
22
22
  ERROR_MESSAGES = {
23
23
  :authentication_not_found => "Authentication not found in Sources API",
@@ -209,9 +209,10 @@ module TopologicalInventory
209
209
 
210
210
  def availability_status_message(payload)
211
211
  messaging_client.publish_topic(
212
- :service => SERVICE_NAME,
212
+ :service => TopologicalInventory::Providers::Common::ClowderConfig.kafka_topic(KAFKA_TOPIC_NAME),
213
213
  :event => EVENT_AVAILABILITY_STATUS,
214
- :payload => payload.to_json
214
+ :payload => payload.to_json,
215
+ :headers => identity
215
216
  )
216
217
  rescue => err
217
218
  logger.availability_check("Failed to update #{payload[:resource_type]} id: #{payload[:resource_id]} - #{err.message}", :error)
@@ -15,10 +15,27 @@ module TopologicalInventory
15
15
  end
16
16
 
17
17
  def init_default_api
18
- default_headers.merge!(identity) if identity.present?
18
+ # TODO: remove this once PSK is set up everywhere.
19
+ if identity.present?
20
+ if psk
21
+ parsed_identity = JSON.parse(Base64.decode64(identity.fetch('x-rh-identity')))
22
+
23
+ default_headers.merge!(
24
+ "x-rh-sources-psk" => psk,
25
+ "x-rh-sources-account-number" => parsed_identity['identity']['account_number']
26
+ )
27
+ else
28
+ default_headers.merge!(identity)
29
+ end
30
+ end
31
+
19
32
  ::SourcesApiClient::DefaultApi.new(self)
20
33
  end
21
34
 
35
+ def psk
36
+ @psk ||= ENV.fetch("SOURCES_PSK", nil)
37
+ end
38
+
22
39
  def fetch_default_endpoint(source_id)
23
40
  endpoints = api.list_source_endpoints(source_id)&.data || []
24
41
  endpoints.find(&:default)
@@ -1,7 +1,7 @@
1
1
  module TopologicalInventory
2
2
  module Providers
3
3
  module Common
4
- VERSION = "2.1.4".freeze
4
+ VERSION = "3.0.2".freeze
5
5
  end
6
6
  end
7
7
  end
@@ -9,7 +9,8 @@ RSpec.shared_examples "availability_check" do
9
9
  let(:external_tenant) { '11001' }
10
10
  let(:kafka_client) { TopologicalInventory::Providers::Common::MessagingClient.default.client }
11
11
  let(:identity) { {'x-rh-identity' => Base64.strict_encode64({'identity' => {'account_number' => external_tenant, 'user' => {'is_org_admin' => true}}}.to_json)} }
12
- let(:headers) { {'Content-Type' => 'application/json'}.merge(identity) }
12
+ let(:identity_with_psk) { { "x-rh-sources-account-number" => external_tenant, "x-rh-sources-psk" => '1234' } }
13
+ let(:headers) { ENV['SOURCES_PSK'] ? {'Content-Type' => 'application/json'}.merge(identity_with_psk) : {'Content-Type' => 'application/json'}.merge(identity) }
13
14
  let(:status_available) { described_class::STATUS_AVAILABLE }
14
15
  let(:status_unavailable) { described_class::STATUS_UNAVAILABLE }
15
16
  let(:error_message) { 'error_message' }
@@ -38,12 +39,15 @@ RSpec.shared_examples "availability_check" do
38
39
 
39
40
  def kafka_message(resource_type, resource_id, status, error_message = nil)
40
41
  res = {
41
- :service => described_class::SERVICE_NAME,
42
+ :service => described_class::KAFKA_TOPIC_NAME,
42
43
  :event => described_class::EVENT_AVAILABILITY_STATUS,
43
44
  :payload => {
44
45
  :resource_type => resource_type,
45
46
  :resource_id => resource_id,
46
47
  :status => status
48
+ },
49
+ :headers => {
50
+ "x-rh-identity" => "eyJpZGVudGl0eSI6eyJhY2NvdW50X251bWJlciI6IjExMDAxIiwidXNlciI6eyJpc19vcmdfYWRtaW4iOnRydWV9fX0="
47
51
  }
48
52
  }
49
53
  res[:payload][:error] = error_message if error_message
@@ -1,5 +1,15 @@
1
1
  require "topological_inventory/providers/common/operations/source"
2
2
 
3
3
  RSpec.describe TopologicalInventory::Providers::Common::Operations::Source do
4
+ context "PSK" do
5
+ around do |example|
6
+ ENV['SOURCES_PSK'] = '1234'
7
+ example.run
8
+ ENV['SOURCES_PSK'] = nil
9
+ end
10
+
11
+ it_behaves_like "availability_check"
12
+ end
13
+
4
14
  it_behaves_like "availability_check"
5
15
  end
@@ -23,7 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  spec.require_paths = ["lib"]
25
25
 
26
- spec.add_runtime_dependency 'activesupport', '~> 5.2.4.3'
26
+ spec.add_runtime_dependency 'activesupport', '~> 5.2', '>= 5.2.4.3'
27
+ spec.add_runtime_dependency 'clowder-common-ruby', '~> 0.2.1'
27
28
  spec.add_runtime_dependency 'config', '~> 1.7', '>= 1.7.2'
28
29
  spec.add_runtime_dependency 'json', '~> 2.3'
29
30
  spec.add_runtime_dependency 'manageiq-loggers', '>= 0.4.2'
metadata CHANGED
@@ -1,20 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: topological_inventory-providers-common
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.4
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Slemr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-14 00:00:00.000000000 Z
11
+ date: 2021-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.2'
20
+ - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 5.2.4.3
20
23
  type: :runtime
@@ -22,8 +25,25 @@ dependencies:
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.2'
30
+ - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 5.2.4.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: clowder-common-ruby
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.2.1
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.2.1
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: config
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -304,6 +324,7 @@ files:
304
324
  - bin/console
305
325
  - bin/setup
306
326
  - lib/topological_inventory/providers/common.rb
327
+ - lib/topological_inventory/providers/common/clowder_config.rb
307
328
  - lib/topological_inventory/providers/common/collector.rb
308
329
  - lib/topological_inventory/providers/common/collector/inventory_collection_storage.rb
309
330
  - lib/topological_inventory/providers/common/collector/inventory_collection_wrapper.rb
@@ -358,7 +379,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
358
379
  - !ruby/object:Gem::Version
359
380
  version: '0'
360
381
  requirements: []
361
- rubygems_version: 3.0.3
382
+ rubygems_version: 3.0.3.1
362
383
  signing_key:
363
384
  specification_version: 4
364
385
  summary: Common classes for topological-inventory collectors/operations