smart_proxy_pulp 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a589de03d10c70ef21258ae05bd7ffebe546130fc3753d37a1089b5f263807b0
4
- data.tar.gz: cb5be724fabf9e4b27763946e887b1a4076da01ecbe786992a3ea92b7833c1d1
3
+ metadata.gz: c62f3048872a9abdf3004d0d7af57b90ea8612e527f335231a0b25c6de22f86c
4
+ data.tar.gz: 6bfa286ef21e1e00139593e88bfe50360de8866e867920bfefeb03eeeb39227d
5
5
  SHA512:
6
- metadata.gz: 07b5a0cebf7f4da842d2e4b3cffaae1e0a09f4615ed7300af36d7f4b6aea571ac3bea5e94c6f2036bc878680fbbebe92e2490e5e2b38401139aafef240fcf7d6
7
- data.tar.gz: 7678e48278cc9a2e2a01ead73e14204c76b5e736ccd62404ac6fba45b62175f2793d3437402c039994508e9b1200f4ef55de50670800a7584789f152c3fa1ca4
6
+ metadata.gz: 9f0185c2c5daadd9b4bc360c5c83bb5170de105a2d0767eda9653ce574ba7a7c6abc3bc303e63cc22ec76bacae1509207fc0d93d32e940a2bec184f2677e24c8
7
+ data.tar.gz: 8caebd183fbd1f7cdf8eb715a60d3d48813869414fa02ebecf220cc49d5f9746fd389c647a5cb99d35f4fd8d7a58076ec75f2f0f504d1da104a22f19e5983213
data/Gemfile CHANGED
@@ -5,24 +5,5 @@ group :development do
5
5
  gem 'smart_proxy', :git => 'https://github.com/theforeman/smart-proxy', :branch => 'develop'
6
6
  end
7
7
 
8
- group :test do
9
- gem 'webmock'
10
- if RUBY_VERSION < '2.1'
11
- gem 'public_suffix', '< 3'
12
- else
13
- gem 'public_suffix'
14
- end
15
- if RUBY_VERSION < '2.2'
16
- gem 'rack-test', '< 0.8'
17
- else
18
- gem 'rack-test'
19
- end
20
- end
21
-
22
- if RUBY_VERSION < '2.2'
23
- gem 'sinatra', '< 2'
24
- gem 'rack', '>= 1.1', '< 2.0.0'
25
- else
26
- gem 'sinatra'
27
- gem 'rack', '>= 1.1'
28
- end
8
+ gem 'sinatra'
9
+ gem 'rack', '>= 1.1'
@@ -1,4 +1,2 @@
1
1
  require 'smart_proxy_pulp_plugin/version'
2
- require 'smart_proxy_pulp_plugin/pulp_plugin'
3
- require 'smart_proxy_pulp_plugin/pulp_node_plugin'
4
2
  require 'smart_proxy_pulp_plugin/pulpcore_plugin'
@@ -1,6 +1,5 @@
1
1
  require 'sinatra'
2
2
  require 'smart_proxy_pulp_plugin/pulpcore_client'
3
- require 'smart_proxy_pulp_plugin/disk_usage'
4
3
 
5
4
  module PulpProxy
6
5
  class PulpcoreApi < Sinatra::Base
@@ -11,9 +10,9 @@ module PulpProxy
11
10
  begin
12
11
  result = PulpcoreClient.get("/pulp/api/v3/status/")
13
12
  return result.body if result.is_a?(Net::HTTPSuccess)
14
- log_halt result.code, "Pulp server at #{::PulpProxy::Settings.settings.pulp_url} returned an error: '#{result.message}'"
13
+ log_halt result.code, "Pulp server at #{PulpcoreClient.pulp_url} returned an error: '#{result.message}'"
15
14
  rescue SocketError, Errno::ECONNREFUSED => e
16
- log_halt 503, "Communication error with '#{URI.parse(::PulpProxy::Settings.settings.pulp_url.to_s).host}': #{e.message}"
15
+ log_halt 503, "Communication error with '#{URI.parse(PulpcoreClient.pulp_url).host}': #{e.message}"
17
16
  end
18
17
  end
19
18
  end
@@ -1,13 +1,12 @@
1
1
  require 'net/http'
2
2
  require 'net/https'
3
3
  require 'uri'
4
- require 'smart_proxy_pulp_plugin/settings'
5
4
  require 'proxy/log'
6
5
 
7
6
  module PulpProxy
8
7
  class PulpcoreClient
9
8
  def self.get(path)
10
- uri = URI.parse(::PulpProxy::PulpcorePlugin.settings.pulp_url.to_s)
9
+ uri = URI.parse(pulp_url)
11
10
  req = Net::HTTP::Get.new(URI.join(uri.to_s.chomp('/') + '/', path))
12
11
  req.add_field('Accept', 'application/json')
13
12
  self.http.request(req)
@@ -26,10 +25,14 @@ module PulpProxy
26
25
  end
27
26
 
28
27
  def self.http
29
- uri = URI.parse(::PulpProxy::PulpcorePlugin.settings.pulp_url.to_s)
28
+ uri = URI.parse(pulp_url)
30
29
  http = Net::HTTP.new(uri.host, uri.port)
31
30
  http.use_ssl = uri.scheme == 'https'
32
31
  http
33
32
  end
33
+
34
+ def self.pulp_url
35
+ ::PulpProxy::PulpcorePlugin.settings.pulp_url.to_s
36
+ end
34
37
  end
35
38
  end
@@ -1,5 +1,3 @@
1
- require 'smart_proxy_pulp_plugin/validators/pulp_url_validator'
2
-
3
1
  module PulpProxy
4
2
  class PulpcorePlugin < ::Proxy::Plugin
5
3
  plugin "pulpcore", ::PulpProxy::VERSION
@@ -7,7 +5,6 @@ module PulpProxy
7
5
  :content_app_url => 'https://localhost:24816/',
8
6
  :mirror => false
9
7
 
10
- load_validators :url => ::PulpProxy::Validators::PulpUrlValidator
11
8
  validate :pulp_url, :url => true
12
9
  validate :content_app_url, :url => true
13
10
 
@@ -16,10 +13,7 @@ module PulpProxy
16
13
  expose_setting :content_app_url
17
14
  expose_setting :username
18
15
  expose_setting :password
19
- capability( lambda do ||
20
- PulpcoreClient.capabilities
21
- end)
22
- http_rackup_path File.expand_path("pulpcore_http_config.ru", File.expand_path("../", __FILE__))
23
- https_rackup_path File.expand_path("pulpcore_http_config.ru", File.expand_path("../", __FILE__))
16
+ capability -> { PulpcoreClient.capabilities }
17
+ rackup_path File.expand_path('pulpcore_http_config.ru', __dir__)
24
18
  end
25
19
  end
@@ -1,3 +1,3 @@
1
1
  module PulpProxy
2
- VERSION = "2.1.0"
2
+ VERSION = "3.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_proxy_pulp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitri Dolguikh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-19 00:00:00.000000000 Z
11
+ date: 2021-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-unit
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2'
19
+ version: '3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2'
26
+ version: '3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mocha
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1'
47
+ version: '3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1'
54
+ version: '3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rack-test
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '10'
75
+ version: '13'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '10'
82
+ version: '13'
83
83
  description: " Basic Pulp support for Foreman Smart-Proxy\n"
84
84
  email:
85
85
  - dmitri@redhat.com
@@ -91,44 +91,33 @@ files:
91
91
  - LICENSE
92
92
  - bundler.d/pulp.rb
93
93
  - lib/smart_proxy_pulp.rb
94
- - lib/smart_proxy_pulp_plugin/disk_usage.rb
95
- - lib/smart_proxy_pulp_plugin/pulp_api.rb
96
- - lib/smart_proxy_pulp_plugin/pulp_client.rb
97
- - lib/smart_proxy_pulp_plugin/pulp_http_config.ru
98
- - lib/smart_proxy_pulp_plugin/pulp_node_http_config.ru
99
- - lib/smart_proxy_pulp_plugin/pulp_node_plugin.rb
100
- - lib/smart_proxy_pulp_plugin/pulp_plugin.rb
101
94
  - lib/smart_proxy_pulp_plugin/pulpcore_api.rb
102
95
  - lib/smart_proxy_pulp_plugin/pulpcore_client.rb
103
96
  - lib/smart_proxy_pulp_plugin/pulpcore_http_config.ru
104
97
  - lib/smart_proxy_pulp_plugin/pulpcore_plugin.rb
105
- - lib/smart_proxy_pulp_plugin/settings.rb
106
- - lib/smart_proxy_pulp_plugin/validators/pulp_url_validator.rb
107
98
  - lib/smart_proxy_pulp_plugin/version.rb
108
- - settings.d/pulp.yml.example
109
99
  - settings.d/pulpcore.yml.example
110
- - settings.d/pulpnode.yml.example
111
100
  homepage: https://github.com/theforeman/smart-proxy-pulp-plugin
112
101
  licenses:
113
102
  - GPL-3.0
114
103
  metadata: {}
115
- post_install_message:
104
+ post_install_message:
116
105
  rdoc_options: []
117
106
  require_paths:
118
107
  - lib
119
108
  required_ruby_version: !ruby/object:Gem::Requirement
120
109
  requirements:
121
- - - ">="
110
+ - - "~>"
122
111
  - !ruby/object:Gem::Version
123
- version: '0'
112
+ version: '2.5'
124
113
  required_rubygems_version: !ruby/object:Gem::Requirement
125
114
  requirements:
126
115
  - - ">="
127
116
  - !ruby/object:Gem::Version
128
117
  version: '0'
129
118
  requirements: []
130
- rubygems_version: 3.0.3
131
- signing_key:
119
+ rubygems_version: 3.1.4
120
+ signing_key:
132
121
  specification_version: 4
133
122
  summary: Basic Pulp support for Foreman Smart-Proxy
134
123
  test_files: []
@@ -1,120 +0,0 @@
1
- module PulpProxy
2
- class DiskUsage
3
- include ::Proxy::Util
4
- include ::Proxy::Log
5
- SIZE = { :byte => 1, :kilobyte => 1_024, :megabyte => 1_048_576, :gigabyte => 1_073_741_824, :terabyte => 1_099_511_627_776 }
6
-
7
- attr_reader :path, :stat, :size
8
-
9
- def initialize(opts ={})
10
- raise(::Proxy::Error::ConfigurationError, 'Unable to continue - must provide a path.') if opts[:path].nil?
11
- @paths_hash = validate_path(path_hash(opts[:path]))
12
- @path = @paths_hash.values
13
- @size_format = opts[:size] || :kilobyte
14
- @size = SIZE[@size_format]
15
- @stat = {}
16
- find_df
17
- get_stat
18
- end
19
-
20
- def to_json
21
- stat.to_json
22
- end
23
-
24
- private
25
-
26
- attr_reader :command_path
27
-
28
- def find_df
29
- @command_path = which('df') || raise(::Proxy::Error::ConfigurationError, 'df command was not found unable to retrieve usage information.')
30
- end
31
-
32
- def command
33
- [command_path, "-P", "-B", "#{size}", *path]
34
- end
35
-
36
- # Inspired and copied from Facter
37
- # @ https://github.com/puppetlabs/facter/blob/2.x/lib/facter/core/execution/base.rb
38
- # @TODO: Refactor http://projects.theforeman.org/issues/15235 when removing support for 1.8.7
39
- def with_env(values)
40
- old = {}
41
- values.each do |var, value|
42
- # save the old value if it exists
43
- if old_val = ENV[var]
44
- old[var] = old_val
45
- end
46
- # set the new (temporary) value for the environment variable
47
- ENV[var] = value
48
- end
49
- # execute the caller's block, capture the return value
50
- rv = yield
51
- # use an ensure block to make absolutely sure we restore the variables
52
- ensure
53
- # restore the old values
54
- values.each do |var, value|
55
- if old.include?(var)
56
- ENV[var] = old[var]
57
- else
58
- # if there was no old value, delete the key from the current environment variables hash
59
- ENV.delete(var)
60
- end
61
- end
62
- # return the captured return value
63
- rv
64
- end
65
-
66
- def get_stat
67
- with_env 'LC_ALL' => 'C' do
68
- raw = Open3::popen3(*command) do |stdin, stdout, stderr, thread|
69
- unless stderr.read.empty?
70
- error_line = stderr.read
71
- logger.error "[#{command_path}] #{error_line}"
72
- raise(::Proxy::Error::ConfigurationError, "#{command_path} raised an error: #{error_line}")
73
- end
74
- stdout.read.split("\n")
75
- end
76
-
77
- logger.debug "[#{command_path}] #{raw.to_s}"
78
-
79
- titles = normalize_titles(raw)
80
- raw.each_with_index do |line, index|
81
- mount_path = path[index]
82
- values = normalize_values(line.split)
83
- @stat[hash_key_for(mount_path)] = Hash[titles.zip(values)].merge({:path => mount_path, :size => @size_format})
84
- end
85
- end
86
- end
87
-
88
- def path_hash(path)
89
- path.is_a?(Hash) ? path : Hash[path, path]
90
- end
91
-
92
- def hash_key_for(path)
93
- @paths_hash.select { |k,v| v == path}.first[0]
94
- end
95
-
96
-
97
- def normalize_titles(raw)
98
- replacers = {"mounted on" => :mounted, "capacity" => :percent, "1024-blocks" => :"1k-blocks" }
99
- raw.shift.downcase.gsub(/(capacity|mounted on|1024-blocks)/) { |m| replacers.fetch(m,m)}.split.map(&:to_sym)
100
- end
101
-
102
- def normalize_values(values)
103
- values.each_with_index do |value, index|
104
- is_int = Integer(value) rescue false
105
- values[index] = is_int if is_int
106
- end
107
- values
108
- end
109
-
110
- def validate_path(path_hash)
111
- path_hash.each do |key, value|
112
- unless File.readable?(value)
113
- logger.warn "File at #{value} defined in #{key} parameter doesn't exist or is unreadable"
114
- path_hash.delete(key)
115
- end
116
- end
117
- path_hash
118
- end
119
- end
120
- end
@@ -1,41 +0,0 @@
1
- require 'sinatra'
2
- require 'smart_proxy_pulp_plugin/pulp_client'
3
- require 'smart_proxy_pulp_plugin/disk_usage'
4
- require 'smart_proxy_pulp_plugin/settings'
5
-
6
- module PulpProxy
7
- class Api < Sinatra::Base
8
- helpers ::Proxy::Helpers
9
- authorize_with_trusted_hosts
10
- authorize_with_ssl_client
11
-
12
- get "/status" do
13
- content_type :json
14
- begin
15
- result = PulpClient.get("api/v2/status/")
16
- return result.body if result.is_a?(Net::HTTPSuccess)
17
- log_halt result.code, "Pulp server at #{::PulpProxy::Settings.settings.pulp_url} returned an error: '#{result.message}'"
18
- rescue Errno::ECONNREFUSED => e
19
- log_halt 503, "Pulp server at #{::PulpProxy::Settings.settings.pulp_url} is not responding"
20
- rescue SocketError => e
21
- log_halt 503, "Pulp server '#{URI.parse(::PulpProxy::Settings.settings.pulp_url.to_s).host}' is unknown"
22
- end
23
- end
24
-
25
- get '/status/disk_usage' do
26
- size = (params[:size] && DiskUsage::SIZE.keys.include?(params[:size].to_sym)) ? params[:size].to_sym : :kilobyte
27
- monitor_dirs = Hash[::PulpProxy::Settings.settings.marshal_dump.select { |key, _| key == :pulp_dir || key == :pulp_content_dir || key == :mongodb_dir }]
28
- begin
29
- pulp_disk = DiskUsage.new({:path => monitor_dirs, :size => size})
30
- pulp_disk.to_json
31
- rescue ::Proxy::Error::ConfigurationError
32
- log_halt 500, 'Could not find df command to evaluate disk space'
33
- end
34
- end
35
-
36
- get '/status/puppet' do
37
- content_type :json
38
- {:puppet_content_dir => ::PulpProxy::Settings.settings.puppet_content_dir}.to_json
39
- end
40
- end
41
- end
@@ -1,36 +0,0 @@
1
- require 'net/http'
2
- require 'net/https'
3
- require 'uri'
4
- require 'smart_proxy_pulp_plugin/settings'
5
-
6
- module PulpProxy
7
- class PulpClient
8
- def self.get(path)
9
- uri = URI.parse(::PulpProxy::Settings.settings.pulp_url.to_s)
10
- req = Net::HTTP::Get.new(URI.join(uri.to_s.chomp('/') + '/', path))
11
- req.add_field('Accept', 'application/json')
12
- req.content_type = 'application/json'
13
- response = self.http.request(req)
14
- end
15
-
16
- def self.http
17
- uri = URI.parse(::PulpProxy::Settings.settings.pulp_url.to_s)
18
- http = Net::HTTP.new(uri.host, uri.port)
19
- http.use_ssl = uri.scheme == 'https'
20
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
21
-
22
- if http.use_ssl?
23
- if Proxy::SETTINGS.ssl_ca_file && !Proxy::SETTINGS.ssl_ca_file.to_s.empty?
24
- http.ca_file = Proxy::SETTINGS.ssl_ca_file
25
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
26
- end
27
-
28
- if Proxy::SETTINGS.ssl_certificate && !Proxy::SETTINGS.ssl_certificate.to_s.empty? && Proxy::SETTINGS.ssl_private_key && !Proxy::SETTINGS.ssl_private_key.to_s.empty?
29
- http.cert = OpenSSL::X509::Certificate.new(File.read(Proxy::SETTINGS.ssl_certificate))
30
- http.key = OpenSSL::PKey::RSA.new(File.read(Proxy::SETTINGS.ssl_private_key), nil)
31
- end
32
- end
33
- http
34
- end
35
- end
36
- end
@@ -1,5 +0,0 @@
1
- require 'smart_proxy_pulp_plugin/pulp_api'
2
-
3
- map "/pulp" do
4
- run PulpProxy::Api
5
- end
@@ -1,5 +0,0 @@
1
- require 'smart_proxy_pulp_plugin/pulp_api'
2
-
3
- map "/pulpnode" do
4
- run PulpProxy::Api
5
- end
@@ -1,14 +0,0 @@
1
- module PulpNodeProxy
2
- class Plugin < ::Proxy::Plugin
3
- plugin "pulpnode", ::PulpProxy::VERSION
4
- default_settings :pulp_url => 'https://localhost/pulp',
5
- :pulp_dir => '/var/lib/pulp',
6
- :pulp_content_dir => '/var/lib/pulp/content',
7
- :puppet_content_dir => '/etc/puppet/environments',
8
- :mongodb_dir => '/var/lib/mongodb'
9
-
10
- expose_setting :pulp_url
11
- http_rackup_path File.expand_path("pulp_node_http_config.ru", File.expand_path("../", __FILE__))
12
- https_rackup_path File.expand_path("pulp_node_http_config.ru", File.expand_path("../", __FILE__))
13
- end
14
- end
@@ -1,15 +0,0 @@
1
- module PulpProxy
2
- class Plugin < ::Proxy::Plugin
3
- plugin "pulp", ::PulpProxy::VERSION
4
- default_settings :pulp_url => 'https://localhost/pulp',
5
- :pulp_dir => '/var/lib/pulp',
6
- :pulp_content_dir => '/var/lib/pulp/content',
7
- :puppet_content_dir => '/etc/puppet/environments',
8
- :mongodb_dir => '/var/lib/mongodb'
9
-
10
- expose_setting :pulp_url
11
-
12
- http_rackup_path File.expand_path("pulp_http_config.ru", File.expand_path("../", __FILE__))
13
- https_rackup_path File.expand_path("pulp_http_config.ru", File.expand_path("../", __FILE__))
14
- end
15
- end
@@ -1,12 +0,0 @@
1
- require 'sinatra'
2
- require 'smart_proxy_pulp_plugin/pulp_node_plugin'
3
- require 'smart_proxy_pulp_plugin/pulp_plugin'
4
-
5
- module PulpProxy
6
- class Settings
7
- def self.settings
8
- # work around until pulp node settings are no longer needed by foreman proxy, as pulp nodes have been removed
9
- ::PulpProxy::Plugin.settings.pulp_url ? ::PulpProxy::Plugin.settings : ::PulpNodeProxy::Plugin.settings
10
- end
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- module PulpProxy
2
- module Validators
3
- class PulpUrlValidator < ::Proxy::PluginValidators::Base
4
- def validate!(settings)
5
- raise ::Proxy::Error::ConfigurationError, "Setting 'pulp_url' is expected to contain a url for pulp server" if settings[:pulp_url].to_s.empty?
6
- URI.parse(settings[:pulp_url])
7
- rescue URI::InvalidURIError
8
- raise ::Proxy::Error::ConfigurationError.new("Setting 'pulp_url' contains an invalid url for pulp server")
9
- end
10
- end
11
- end
12
- end
@@ -1,8 +0,0 @@
1
- ---
2
- :enabled: true
3
- #:pulp_url: https://localhost/pulp
4
- # Path to pulp, pulp content and mongodb directories
5
- #:pulp_dir: /var/lib/pulp
6
- #:pulp_content_dir: /var/lib/pulp/content
7
- #:puppet_content_dir: /etc/pupppet/environments
8
- #:mongodb_dir: /var/lib/mongodb
@@ -1,8 +0,0 @@
1
- ---
2
- :enabled: true
3
- #:pulp_url: https://localhost/pulp
4
- # Path to pulp, pulp content and mongodb directories
5
- #:pulp_dir: /var/lib/pulp
6
- #:pulp_content_dir: /var/lib/pulp/content
7
- #:puppet_content_dir: /etc/puppet/environments
8
- #:mongodb_dir: /var/lib/mongodb