runcible 1.2.0 → 1.3.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.
- data/Gemfile +2 -1
- data/README.md +1 -1
- data/Rakefile +16 -10
- data/lib/runcible.rb +1 -1
- data/lib/runcible/base.rb +24 -29
- data/lib/runcible/extensions/consumer.rb +25 -26
- data/lib/runcible/extensions/consumer_group.rb +10 -13
- data/lib/runcible/extensions/distribution.rb +0 -2
- data/lib/runcible/extensions/docker_image.rb +0 -1
- data/lib/runcible/extensions/errata.rb +0 -3
- data/lib/runcible/extensions/package_category.rb +0 -3
- data/lib/runcible/extensions/package_group.rb +0 -2
- data/lib/runcible/extensions/puppet_module.rb +0 -3
- data/lib/runcible/extensions/repository.rb +88 -72
- data/lib/runcible/extensions/rpm.rb +3 -5
- data/lib/runcible/extensions/unit.rb +10 -13
- data/lib/runcible/extensions/yum_repo_metadata_file.rb +0 -3
- data/lib/runcible/instance.rb +22 -28
- data/lib/runcible/models/distributor.rb +4 -5
- data/lib/runcible/models/docker_distributor.rb +4 -4
- data/lib/runcible/models/docker_importer.rb +2 -2
- data/lib/runcible/models/export_distributor.rb +1 -1
- data/lib/runcible/models/importer.rb +3 -6
- data/lib/runcible/models/iso_distributor.rb +3 -3
- data/lib/runcible/models/iso_importer.rb +1 -1
- data/lib/runcible/models/nodes_http_distributor.rb +0 -1
- data/lib/runcible/models/puppet_distributor.rb +2 -2
- data/lib/runcible/models/yum_clone_distributor.rb +3 -4
- data/lib/runcible/models/yum_distributor.rb +7 -7
- data/lib/runcible/models/yum_importer.rb +17 -17
- data/lib/runcible/resources/consumer.rb +17 -20
- data/lib/runcible/resources/consumer_group.rb +13 -15
- data/lib/runcible/resources/content.rb +10 -10
- data/lib/runcible/resources/event_notifier.rb +5 -9
- data/lib/runcible/resources/repository.rb +23 -23
- data/lib/runcible/resources/repository_group.rb +5 -7
- data/lib/runcible/resources/repository_schedule.rb +5 -7
- data/lib/runcible/resources/role.rb +5 -8
- data/lib/runcible/resources/task.rb +10 -13
- data/lib/runcible/resources/unit.rb +3 -6
- data/lib/runcible/resources/user.rb +7 -10
- data/lib/runcible/version.rb +1 -1
- metadata +2 -2
@@ -21,15 +21,12 @@
|
|
21
21
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
|
24
|
-
|
25
24
|
module Runcible
|
26
25
|
module Extensions
|
27
26
|
class YumRepoMetadataFile < Runcible::Extensions::Unit
|
28
|
-
|
29
27
|
def self.content_type
|
30
28
|
'yum_repo_metadata_file'
|
31
29
|
end
|
32
|
-
|
33
30
|
end
|
34
31
|
end
|
35
32
|
end
|
data/lib/runcible/instance.rb
CHANGED
@@ -23,14 +23,14 @@
|
|
23
23
|
|
24
24
|
module Runcible
|
25
25
|
class Instance
|
26
|
-
|
26
|
+
# rubocop:disable Style/ClassVars
|
27
27
|
def self.resource_classes
|
28
|
-
@@resource_classes ||= gather_classes(
|
28
|
+
@@resource_classes ||= gather_classes('resources')
|
29
29
|
@@resource_classes
|
30
30
|
end
|
31
31
|
|
32
32
|
def self.extension_classes
|
33
|
-
@@extension_classes ||= gather_classes(
|
33
|
+
@@extension_classes ||= gather_classes('extensions')
|
34
34
|
@@extension_classes
|
35
35
|
end
|
36
36
|
|
@@ -46,22 +46,22 @@ module Runcible
|
|
46
46
|
# @option config [String] :url Scheme and hostname for the pulp server e.g. https://localhost/
|
47
47
|
# @option config [String] :api_path URL path for the api e.g. pulp/api/v2/
|
48
48
|
# @option config [String] :timeout Timeout in seconds for the connection (defaults to rest client's default)
|
49
|
-
# @option config [String] :open_timeout timeout in seconds for the connection
|
49
|
+
# @option config [String] :open_timeout timeout in seconds for the connection
|
50
|
+
# to open(defaults to rest client's default)
|
50
51
|
# @option config [Hash] :http_auth Needed when using simple http auth
|
51
52
|
# @option http_auth [String] :password The password to use for simple auth
|
52
|
-
def initialize(config={})
|
53
|
+
def initialize(config = {})
|
53
54
|
@config = {
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
initialize_wrappers(config)
|
55
|
+
:api_path => '/pulp/api/v2/',
|
56
|
+
:url => 'https://localhost',
|
57
|
+
:user => '',
|
58
|
+
:http_auth => {:password => {} },
|
59
|
+
:headers => {:content_type => 'application/json',
|
60
|
+
:accept => 'application/json'},
|
61
|
+
:logging => {}
|
62
|
+
}.merge(config).with_indifferent_access
|
63
|
+
|
64
|
+
initialize_wrappers
|
65
65
|
end
|
66
66
|
|
67
67
|
# Update an existing config value
|
@@ -71,13 +71,11 @@ module Runcible
|
|
71
71
|
@config[key] = value
|
72
72
|
end
|
73
73
|
|
74
|
-
|
75
|
-
@config
|
76
|
-
end
|
74
|
+
attr_reader :config
|
77
75
|
|
78
76
|
private
|
79
77
|
|
80
|
-
def initialize_wrappers
|
78
|
+
def initialize_wrappers
|
81
79
|
self.resources = Wrapper.new('resources')
|
82
80
|
self.extensions = Wrapper.new('extensions')
|
83
81
|
|
@@ -95,22 +93,20 @@ module Runcible
|
|
95
93
|
def accessible_class(class_object)
|
96
94
|
#converts a class (Runcible::Resources::ConsumerGroup) to a user friendly name:
|
97
95
|
# (e.g. consumer_group)
|
98
|
-
class_object.name.split(
|
96
|
+
class_object.name.split('::').last.underscore
|
99
97
|
end
|
100
98
|
|
101
99
|
def self.gather_classes(type)
|
102
100
|
const = Runcible
|
103
101
|
const = const.const_get(type.camelize)
|
104
102
|
path = File.dirname(__FILE__) + "/#{type}/*.rb"
|
105
|
-
base_names = Dir.glob(path).
|
106
|
-
|
103
|
+
base_names = Dir.glob(path).map { |f| File.basename(f, '.rb') }
|
104
|
+
base_names.map { |name| const.const_get(name.camelize) }
|
107
105
|
end
|
108
|
-
|
109
106
|
end
|
110
107
|
|
111
108
|
#Wrapper class to provide access to instances
|
112
109
|
class Wrapper
|
113
|
-
|
114
110
|
def initialize(name)
|
115
111
|
@name = name
|
116
112
|
@methods = []
|
@@ -122,9 +118,7 @@ module Runcible
|
|
122
118
|
end
|
123
119
|
|
124
120
|
def to_s
|
125
|
-
"#{@name} - #{@methods.uniq.sort
|
121
|
+
"#{@name} - #{@methods.uniq.sort}"
|
126
122
|
end
|
127
123
|
end
|
128
|
-
|
129
124
|
end
|
130
|
-
|
@@ -29,10 +29,10 @@ module Runcible
|
|
29
29
|
class Distributor
|
30
30
|
attr_accessor 'auto_publish', 'id'
|
31
31
|
|
32
|
-
def initialize(params={})
|
32
|
+
def initialize(params = {})
|
33
33
|
@auto_publish = false
|
34
|
-
id = params[:id] || SecureRandom.hex(10)
|
35
|
-
params.each{|k,v| send("#{k
|
34
|
+
self.id = params[:id] || SecureRandom.hex(10)
|
35
|
+
params.each { |k, v| send("#{k}=", v) }
|
36
36
|
end
|
37
37
|
|
38
38
|
# Distributor Type id
|
@@ -43,9 +43,8 @@ module Runcible
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def self.type_id
|
46
|
-
|
46
|
+
fail NotImplementedError('self.type_id')
|
47
47
|
end
|
48
|
-
|
49
48
|
end
|
50
49
|
end
|
51
50
|
end
|
@@ -28,10 +28,10 @@ module Runcible
|
|
28
28
|
module Models
|
29
29
|
class DockerDistributor < Distributor
|
30
30
|
#optional
|
31
|
-
attr_accessor
|
32
|
-
|
31
|
+
attr_accessor 'docker_publish_directory', 'protected',
|
32
|
+
'redirect_url', 'repo_registry_id'
|
33
33
|
|
34
|
-
def initialize(params={})
|
34
|
+
def initialize(params = {})
|
35
35
|
super(params)
|
36
36
|
end
|
37
37
|
|
@@ -47,4 +47,4 @@ module Runcible
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
50
|
-
end
|
50
|
+
end
|
@@ -27,8 +27,8 @@ module Runcible
|
|
27
27
|
ID = 'docker_importer'
|
28
28
|
REPO_TYPE = 'docker-repo'
|
29
29
|
|
30
|
-
attr_accessor 'feed', 'max_speed','max_downloads', 'upstream_name',
|
31
|
-
'proxy_port', 'proxy_password', 'proxy_username',
|
30
|
+
attr_accessor 'feed', 'max_speed', 'max_downloads', 'upstream_name',
|
31
|
+
'proxy_port', 'proxy_password', 'proxy_username', 'mask_id'
|
32
32
|
|
33
33
|
def id
|
34
34
|
DockerImporter::ID
|
@@ -24,17 +24,14 @@
|
|
24
24
|
require 'active_support/core_ext/hash'
|
25
25
|
require 'active_support/json'
|
26
26
|
|
27
|
-
|
28
27
|
module Runcible
|
29
28
|
module Models
|
30
|
-
|
31
|
-
# Generic class to represent Pulp Importers
|
29
|
+
# Generic class to represent Pulp Importers
|
32
30
|
# Child classes should supply id & config methods
|
33
31
|
class Importer
|
34
|
-
def initialize(params={})
|
35
|
-
params.each{|k,v| send("#{k
|
32
|
+
def initialize(params = {})
|
33
|
+
params.each { |k, v| send("#{k}=", v) }
|
36
34
|
end
|
37
35
|
end
|
38
|
-
|
39
36
|
end
|
40
37
|
end
|
@@ -28,17 +28,17 @@ module Runcible
|
|
28
28
|
module Models
|
29
29
|
class IsoDistributor < Distributor
|
30
30
|
#required
|
31
|
-
attr_accessor
|
31
|
+
attr_accessor 'serve_http', 'serve_https'
|
32
32
|
|
33
33
|
# Instantiates an iso distributor
|
34
34
|
#
|
35
35
|
# @param [boolean] http serve the contents over http
|
36
36
|
# @param [boolean] https serve the contents over https
|
37
37
|
# @return [Runcible::Extensions::IsoDistributor]
|
38
|
-
def initialize(http, https)
|
38
|
+
def initialize(http, https, options = {})
|
39
39
|
@serve_http = http
|
40
40
|
@serve_https = https
|
41
|
-
super(
|
41
|
+
super(options)
|
42
42
|
end
|
43
43
|
|
44
44
|
# Distributor Type id
|
@@ -29,7 +29,7 @@ module Runcible
|
|
29
29
|
class PuppetDistributor < Distributor
|
30
30
|
attr_accessor 'serve_http', 'serve_https', 'http_dir', 'https_dir', 'absolute_path'
|
31
31
|
|
32
|
-
def initialize(absolute_path, http, https, params={})
|
32
|
+
def initialize(absolute_path, http, https, params = {})
|
33
33
|
@absolute_path = absolute_path
|
34
34
|
@serve_http = http
|
35
35
|
@serve_https = https
|
@@ -48,4 +48,4 @@ module Runcible
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
51
|
-
end
|
51
|
+
end
|
@@ -29,11 +29,10 @@ module Runcible
|
|
29
29
|
# Requires the pulp-katello-plugins
|
30
30
|
# https://github.com/Katello/pulp-katello-plugins
|
31
31
|
class YumCloneDistributor < Distributor
|
32
|
-
|
33
32
|
#optional
|
34
|
-
attr_accessor
|
33
|
+
attr_accessor 'source_repo_id', 'source_distributor_id', 'destination_distributor_id'
|
35
34
|
|
36
|
-
def initialize(params={})
|
35
|
+
def initialize(params = {})
|
37
36
|
super(params)
|
38
37
|
end
|
39
38
|
|
@@ -49,4 +48,4 @@ module Runcible
|
|
49
48
|
end
|
50
49
|
end
|
51
50
|
end
|
52
|
-
end
|
51
|
+
end
|
@@ -28,14 +28,14 @@ module Runcible
|
|
28
28
|
module Models
|
29
29
|
class YumDistributor < Distributor
|
30
30
|
#required
|
31
|
-
attr_accessor
|
31
|
+
attr_accessor 'relative_url', 'http', 'https'
|
32
32
|
#optional
|
33
|
-
attr_accessor
|
34
|
-
|
35
|
-
|
33
|
+
attr_accessor 'protected', 'auth_cert', 'auth_ca',
|
34
|
+
'https_ca', 'gpgkey', 'generate_metadata',
|
35
|
+
'checksum_type', 'skip', 'https_publish_dir', 'http_publish_dir'
|
36
36
|
|
37
|
-
def initialize(relative_url, http, https, params={})
|
38
|
-
@relative_url=relative_url
|
37
|
+
def initialize(relative_url, http, https, params = {})
|
38
|
+
@relative_url = relative_url
|
39
39
|
@http = http
|
40
40
|
@https = https
|
41
41
|
super(params)
|
@@ -53,4 +53,4 @@ module Runcible
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
|
-
end
|
56
|
+
end
|
@@ -24,26 +24,26 @@
|
|
24
24
|
module Runcible
|
25
25
|
module Models
|
26
26
|
class YumImporter < Importer
|
27
|
-
|
28
|
-
|
27
|
+
ID = 'yum_importer'
|
28
|
+
REPO_TYPE = 'rpm-repo'
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
30
|
+
#https://github.com/pulp/pulp/blob/master/rpm-support/plugins/importers/yum_importer/importer.py
|
31
|
+
attr_accessor 'feed', 'ssl_verify', 'ssl_ca_cert', 'ssl_client_cert', 'ssl_client_key',
|
32
|
+
'proxy_url', 'proxy_port', 'proxy_pass', 'proxy_user',
|
33
|
+
'max_speed', 'verify_size', 'verify_checksum', 'num_threads',
|
34
|
+
'newest', 'remove_old', 'num_old_packages', 'purge_orphaned', 'skip', 'checksum_type',
|
35
|
+
'num_retries', 'retry_delay'
|
36
|
+
def id
|
37
|
+
YumImporter::ID
|
38
|
+
end
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
def repo_type
|
41
|
+
YumImporter::REPO_TYPE
|
42
|
+
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
end
|
44
|
+
def config
|
45
|
+
as_json
|
47
46
|
end
|
47
|
+
end
|
48
48
|
end
|
49
49
|
end
|
@@ -21,18 +21,16 @@
|
|
21
21
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
|
24
|
-
|
25
24
|
module Runcible
|
26
25
|
module Resources
|
27
26
|
# @see https://pulp-dev-guide.readthedocs.org/en/latest/rest-api/consumer/index.html
|
28
27
|
class Consumer < Runcible::Base
|
29
|
-
|
30
28
|
# Generates the API path for Consumers
|
31
29
|
#
|
32
30
|
# @param [String] id the ID of the consumer
|
33
31
|
# @return [String] the consumer path, may contain the id if passed
|
34
|
-
def self.path(id=nil)
|
35
|
-
(id
|
32
|
+
def self.path(id = nil)
|
33
|
+
(id.nil?) ? 'consumers/' : "consumers/#{id}/"
|
36
34
|
end
|
37
35
|
|
38
36
|
# Creates a consumer
|
@@ -40,7 +38,7 @@ module Runcible
|
|
40
38
|
# @param [String] id the ID of the consumer
|
41
39
|
# @param [Hash] optional container for all optional parameters
|
42
40
|
# @return [RestClient::Response]
|
43
|
-
def create(id, optional={})
|
41
|
+
def create(id, optional = {})
|
44
42
|
required = required_params(binding.send(:local_variables), binding)
|
45
43
|
call(:post, path, :payload => { :required => required, :optional => optional })
|
46
44
|
end
|
@@ -58,7 +56,7 @@ module Runcible
|
|
58
56
|
# @param [String] id the ID of the consumer
|
59
57
|
# @param [Hash] optional container for all optional parameters
|
60
58
|
# @return [RestClient::Response]
|
61
|
-
def update(id, optional={})
|
59
|
+
def update(id, optional = {})
|
62
60
|
call(:put, path(id), :payload => { :delta => optional })
|
63
61
|
end
|
64
62
|
|
@@ -77,7 +75,7 @@ module Runcible
|
|
77
75
|
# @param [Hash] profile hash representing the consumer profile
|
78
76
|
# @return [RestClient::Response]
|
79
77
|
def upload_profile(id, content_type, profile)
|
80
|
-
required = required_params(binding.send(:local_variables), binding, [
|
78
|
+
required = required_params(binding.send(:local_variables), binding, ['id'])
|
81
79
|
call(:post, path("#{id}/profiles/"), :payload => { :required => required })
|
82
80
|
end
|
83
81
|
|
@@ -115,9 +113,9 @@ module Runcible
|
|
115
113
|
# @param [String] distributor_id the ID of the distributor
|
116
114
|
# @param [Hash] optional optional parameters
|
117
115
|
# @return [RestClient::Response]
|
118
|
-
def bind(id, repo_id, distributor_id, optional={})
|
119
|
-
required = required_params(binding.send(:local_variables), binding, [
|
120
|
-
call(:post, path("#{id}/bindings/"), :payload => { :required => required, :optional=>optional })
|
116
|
+
def bind(id, repo_id, distributor_id, optional = {})
|
117
|
+
required = required_params(binding.send(:local_variables), binding, ['id'])
|
118
|
+
call(:post, path("#{id}/bindings/"), :payload => { :required => required, :optional => optional })
|
121
119
|
end
|
122
120
|
|
123
121
|
# Unbind a consumer to a repository for a given distributor
|
@@ -136,8 +134,8 @@ module Runcible
|
|
136
134
|
# @param [Array] units array of units to install
|
137
135
|
# @param [Hash] options hash of install options
|
138
136
|
# @return [RestClient::Response]
|
139
|
-
def install_units(id, units, options={})
|
140
|
-
required = required_params(binding.send(:local_variables), binding, [
|
137
|
+
def install_units(id, units, options = {})
|
138
|
+
required = required_params(binding.send(:local_variables), binding, ['id'])
|
141
139
|
call(:post, path("#{id}/actions/content/install/"), :payload => { :required => required })
|
142
140
|
end
|
143
141
|
|
@@ -147,8 +145,8 @@ module Runcible
|
|
147
145
|
# @param [Array] units array of units to update
|
148
146
|
# @param [Hash] options hash of update options
|
149
147
|
# @return [RestClient::Response]
|
150
|
-
def update_units(id, units, options={})
|
151
|
-
required = required_params(binding.send(:local_variables), binding, [
|
148
|
+
def update_units(id, units, options = {})
|
149
|
+
required = required_params(binding.send(:local_variables), binding, ['id'])
|
152
150
|
call(:post, path("#{id}/actions/content/update/"), :payload => { :required => required })
|
153
151
|
end
|
154
152
|
|
@@ -158,8 +156,8 @@ module Runcible
|
|
158
156
|
# @param [Array] units array of units to uninstall
|
159
157
|
# @param [Hash] options hash of uninstall options
|
160
158
|
# @return [RestClient::Response]
|
161
|
-
def uninstall_units(id, units, options={})
|
162
|
-
required = required_params(binding.send(:local_variables), binding, [
|
159
|
+
def uninstall_units(id, units, options = {})
|
160
|
+
required = required_params(binding.send(:local_variables), binding, ['id'])
|
163
161
|
call(:post, path("#{id}/actions/content/uninstall/"), :payload => { :required => required })
|
164
162
|
end
|
165
163
|
|
@@ -168,17 +166,16 @@ module Runcible
|
|
168
166
|
# @param [Hash] options payload representing criteria
|
169
167
|
# @return [RestClient::Response]
|
170
168
|
def regenerate_applicability(options = {})
|
171
|
-
call(:post, path(
|
169
|
+
call(:post, path('actions/content/regenerate_applicability/'), :payload => { :required => options})
|
172
170
|
end
|
173
171
|
|
174
172
|
# retrieve the applicability for some set of consumers
|
175
173
|
#
|
176
174
|
# @param [Hash] options hash representing criteria
|
177
175
|
# @return [RestClient::Response]
|
178
|
-
def applicability(options={})
|
179
|
-
call(:post, path +
|
176
|
+
def applicability(options = {})
|
177
|
+
call(:post, path + 'content/applicability/', :payload => { :required => options })
|
180
178
|
end
|
181
|
-
|
182
179
|
end
|
183
180
|
end
|
184
181
|
end
|