runcible 1.7.2 → 1.8.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 +4 -4
- data/Gemfile +3 -2
- data/README.md +3 -2
- data/lib/runcible/base.rb +12 -12
- data/lib/runcible/extensions/consumer.rb +8 -8
- data/lib/runcible/extensions/file.rb +9 -0
- data/lib/runcible/extensions/repository.rb +25 -7
- data/lib/runcible/instance.rb +23 -19
- data/lib/runcible/models/docker_distributor.rb +1 -1
- data/lib/runcible/models/docker_importer.rb +2 -2
- data/lib/runcible/models/iso_importer.rb +1 -1
- data/lib/runcible/models/ostree_importer.rb +2 -2
- data/lib/runcible/models/puppet_importer.rb +2 -2
- data/lib/runcible/models/python_importer.rb +2 -2
- data/lib/runcible/models/yum_importer.rb +5 -5
- data/lib/runcible/resources/consumer.rb +1 -1
- data/lib/runcible/resources/content.rb +1 -1
- data/lib/runcible/resources/event_notifier.rb +6 -6
- data/lib/runcible/resources/repository.rb +1 -1
- data/lib/runcible/resources/repository_schedule.rb +1 -1
- data/lib/runcible/resources/role.rb +1 -1
- data/lib/runcible/resources/task.rb +1 -1
- data/lib/runcible/resources/task_group.rb +1 -1
- data/lib/runcible/resources/user.rb +1 -1
- data/lib/runcible/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fddef47151b53308fce3a4a103f5a082e657f47
|
4
|
+
data.tar.gz: 149ff0d3f758d5289c95e771f3056c567de70bc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb888ca430e0d85510c0c3116d673e762acf837eb23b4d79dffe0dccd6a74a362639303384dba25110670ad8cfb9adb60838e20f83c338318ff931219d70ad14
|
7
|
+
data.tar.gz: ca48cd2e29a30c0c2fbddb5ad85c9d4273a95f9227b14d01ca22752ac093af9ed444bdcaec6172b774390fc9575ab197b22da1d47018652f2717866419dce197
|
data/Gemfile
CHANGED
@@ -6,9 +6,10 @@ gemspec
|
|
6
6
|
group :test do
|
7
7
|
gem 'rake', '0.9.2.2'
|
8
8
|
gem 'vcr'
|
9
|
-
gem 'webmock'
|
9
|
+
gem 'webmock', '< 2.0.0' # https://github.com/vcr/vcr/issues/570
|
10
10
|
gem 'minitest', '~> 4.7'
|
11
11
|
gem 'parseconfig'
|
12
12
|
gem 'mocha', "~> 0.14.0"
|
13
|
-
gem 'rubocop', "0.
|
13
|
+
gem 'rubocop', "0.39.0"
|
14
|
+
gem 'coveralls'
|
14
15
|
end
|
data/README.md
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
# Runcible
|
2
2
|
|
3
3
|
[](http://travis-ci.org/Katello/runcible)
|
4
|
+
[](https://coveralls.io/github/Katello/runcible?branch=master)
|
4
5
|
|
5
6
|
Exposing Pulp's juiciest parts. http://www.pulpproject.org/
|
6
7
|
|
7
|
-
Latest Live Tested Version: **pulp-server-2.8.
|
8
|
+
Latest Live Tested Version: **pulp-server-2.8.3-0.1.beta.el7.noarch**
|
8
9
|
|
9
10
|
Current stable Runcible: https://github.com/Katello/runcible/tree/0.3
|
10
11
|
|
11
12
|
For in-depth class and method documentation: http://katello.github.com/runcible/
|
12
13
|
|
13
|
-
Please file new issues here: [
|
14
|
+
Please file new issues here: [Redmine](http://projects.theforeman.org/projects/runcible/issues/new)
|
14
15
|
|
15
16
|
## Installation
|
16
17
|
|
data/lib/runcible/base.rb
CHANGED
@@ -31,16 +31,16 @@ module Runcible
|
|
31
31
|
#on occation path will already have prefix (sync cancel)
|
32
32
|
path = clone_config[:api_path] + path unless path.start_with?(clone_config[:api_path])
|
33
33
|
|
34
|
-
RestClient.log
|
34
|
+
RestClient.log = []
|
35
35
|
headers = clone_config[:headers].clone
|
36
36
|
|
37
37
|
get_params = options[:params] if options[:params]
|
38
38
|
path = combine_get_params(path, get_params) if get_params
|
39
39
|
|
40
40
|
client_options = {}
|
41
|
-
client_options[:timeout] =
|
42
|
-
client_options[:open_timeout] =
|
43
|
-
client_options[:verify_ssl] =
|
41
|
+
client_options[:timeout] = clone_config[:timeout] if clone_config[:timeout]
|
42
|
+
client_options[:open_timeout] = clone_config[:open_timeout] if clone_config[:open_timeout]
|
43
|
+
client_options[:verify_ssl] = clone_config[:verify_ssl] unless clone_config[:verify_ssl].nil?
|
44
44
|
|
45
45
|
if clone_config[:oauth]
|
46
46
|
headers = add_oauth_header(method, path, headers)
|
@@ -52,7 +52,7 @@ module Runcible
|
|
52
52
|
client_options[:ssl_client_cert] = clone_config[:cert_auth][:ssl_client_cert]
|
53
53
|
client_options[:ssl_client_key] = clone_config[:cert_auth][:ssl_client_key]
|
54
54
|
else
|
55
|
-
client_options[:user] =
|
55
|
+
client_options[:user] = clone_config[:user]
|
56
56
|
client_options[:password] = config[:http_auth][:password]
|
57
57
|
end
|
58
58
|
|
@@ -83,7 +83,7 @@ module Runcible
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def combine_get_params(path, params)
|
86
|
-
query_string
|
86
|
+
query_string = params.map do |k, v|
|
87
87
|
if v.is_a? Array
|
88
88
|
v.map { |y| "#{k}=#{y}" }.join('&')
|
89
89
|
else
|
@@ -105,11 +105,11 @@ module Runcible
|
|
105
105
|
def format_payload_json(payload_hash)
|
106
106
|
if payload_hash
|
107
107
|
if payload_hash[:optional]
|
108
|
-
if payload_hash[:required]
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
108
|
+
payload = if payload_hash[:required]
|
109
|
+
payload_hash[:required].merge(payload_hash[:optional])
|
110
|
+
else
|
111
|
+
payload_hash[:optional]
|
112
|
+
end
|
113
113
|
elsif payload_hash[:delta]
|
114
114
|
payload = payload_hash
|
115
115
|
else
|
@@ -128,7 +128,7 @@ module Runcible
|
|
128
128
|
if body.respond_to? :with_indifferent_access
|
129
129
|
body = body.with_indifferent_access
|
130
130
|
elsif body.is_a? Array
|
131
|
-
body = body.map
|
131
|
+
body = body.map do |i|
|
132
132
|
i.respond_to?(:with_indifferent_access) ? i.with_indifferent_access : i
|
133
133
|
end
|
134
134
|
end
|
@@ -114,12 +114,12 @@ module Runcible
|
|
114
114
|
units.each do |unit|
|
115
115
|
content_unit = {}
|
116
116
|
content_unit[:type_id] = type_id
|
117
|
-
if unit.is_a?(Hash)
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
117
|
+
content_unit[:unit_key] = if unit.is_a?(Hash)
|
118
|
+
#allow user to pass in entire unit
|
119
|
+
unit
|
120
|
+
else
|
121
|
+
{ unit_key => unit }
|
122
|
+
end
|
123
123
|
|
124
124
|
content.push(content_unit)
|
125
125
|
end
|
@@ -132,7 +132,7 @@ module Runcible
|
|
132
132
|
# @param [String, Array] ids array of consumer ids
|
133
133
|
# @return [RestClient::Response]
|
134
134
|
def regenerate_applicability_by_ids(ids)
|
135
|
-
criteria
|
135
|
+
criteria = {
|
136
136
|
'consumer_criteria' => { 'filters' => { 'id' => { '$in' => ids } } }
|
137
137
|
}
|
138
138
|
regenerate_applicability(criteria)
|
@@ -149,7 +149,7 @@ module Runcible
|
|
149
149
|
def applicable_errata(ids)
|
150
150
|
ids = [ids] if ids.is_a? String
|
151
151
|
|
152
|
-
criteria
|
152
|
+
criteria = {
|
153
153
|
'criteria' => { 'filters' => { 'id' => { '$in' => ids } } },
|
154
154
|
'content_types' => [Runcible::Extensions::Errata.content_type]
|
155
155
|
}
|
@@ -31,20 +31,18 @@ module Runcible
|
|
31
31
|
# @param [Hash] optional container for all optional parameters
|
32
32
|
# @return [RestClient::Response] the created repository
|
33
33
|
def create_with_importer_and_distributors(id, importer, distributors = [], optional = {})
|
34
|
-
if importer.is_a?(Runcible::Models::Importer)
|
34
|
+
if importer && importer.is_a?(Runcible::Models::Importer)
|
35
35
|
optional[:importer_type_id] = importer.id
|
36
36
|
optional[:importer_config] = importer.config
|
37
|
-
|
37
|
+
elsif importer
|
38
38
|
optional[:importer_type_id] = importer.delete('id') || importer.delete(:id)
|
39
39
|
optional[:importer_config] = importer
|
40
|
-
end
|
40
|
+
end
|
41
41
|
|
42
42
|
repo_type = if importer.methods.include?(:repo_type)
|
43
43
|
importer.repo_type
|
44
44
|
elsif importer.is_a?(Hash) && importer.key?(:repo_type)
|
45
45
|
importer[:repo_type]
|
46
|
-
else
|
47
|
-
nil
|
48
46
|
end
|
49
47
|
|
50
48
|
if optional.key?(:importer_type_id) && repo_type
|
@@ -326,7 +324,27 @@ module Runcible
|
|
326
324
|
# the [{:image_id => <image hash>, :tag =>"value"}]
|
327
325
|
# @return [RestClient::Response]
|
328
326
|
def update_docker_tags(id, tags)
|
329
|
-
update(id, :scratchpad => {:tags =>
|
327
|
+
update(id, :scratchpad => {:tags => tags})
|
328
|
+
end
|
329
|
+
|
330
|
+
# Retrieves the file IDs for a single repository
|
331
|
+
#
|
332
|
+
# @param [String] id the ID of the repository
|
333
|
+
# @return [RestClient::Response] the set of repository file IDs
|
334
|
+
def file_ids(id)
|
335
|
+
criteria = {:type_ids => [Runcible::Extensions::File.content_type],
|
336
|
+
:fields => {:unit => [], :association => ['unit_id']}}
|
337
|
+
|
338
|
+
unit_search(id, criteria).map { |i| i['unit_id'] }
|
339
|
+
end
|
340
|
+
|
341
|
+
# Retrieves the files for a single repository
|
342
|
+
#
|
343
|
+
# @param [String] id the ID of the repository
|
344
|
+
# @return [RestClient::Response] the set of repository files
|
345
|
+
def files(id)
|
346
|
+
criteria = {:type_ids => [Runcible::Extensions::File.content_type]}
|
347
|
+
unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
|
330
348
|
end
|
331
349
|
|
332
350
|
# Creates or updates a sync schedule for a repository
|
@@ -387,7 +405,7 @@ module Runcible
|
|
387
405
|
# False is the default option.
|
388
406
|
# @return [RestClient::Response]
|
389
407
|
def regenerate_applicability_by_ids(ids, parallel = false)
|
390
|
-
criteria
|
408
|
+
criteria = {
|
391
409
|
'parallel' => parallel,
|
392
410
|
'repo_criteria' => { 'filters' => { 'id' => { '$in' => ids } } }
|
393
411
|
}
|
data/lib/runcible/instance.rb
CHANGED
@@ -1,16 +1,5 @@
|
|
1
1
|
module Runcible
|
2
2
|
class Instance
|
3
|
-
# rubocop:disable Style/ClassVars
|
4
|
-
def self.resource_classes
|
5
|
-
@@resource_classes ||= gather_classes('resources')
|
6
|
-
@@resource_classes
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.extension_classes
|
10
|
-
@@extension_classes ||= gather_classes('extensions')
|
11
|
-
@@extension_classes
|
12
|
-
end
|
13
|
-
|
14
3
|
attr_accessor :resources
|
15
4
|
attr_accessor :extensions
|
16
5
|
|
@@ -50,6 +39,29 @@ module Runcible
|
|
50
39
|
|
51
40
|
attr_reader :config
|
52
41
|
|
42
|
+
class << self
|
43
|
+
# rubocop:disable Style/ClassVars
|
44
|
+
def resource_classes
|
45
|
+
@@resource_classes ||= gather_classes('resources')
|
46
|
+
@@resource_classes
|
47
|
+
end
|
48
|
+
|
49
|
+
def extension_classes
|
50
|
+
@@extension_classes ||= gather_classes('extensions')
|
51
|
+
@@extension_classes
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def gather_classes(type)
|
57
|
+
const = Runcible
|
58
|
+
const = const.const_get(type.camelize)
|
59
|
+
path = File.dirname(__FILE__) + "/#{type}/*.rb"
|
60
|
+
base_names = Dir.glob(path).map { |f| File.basename(f, '.rb') }
|
61
|
+
base_names.map { |name| const.const_get(name.camelize) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
53
65
|
private
|
54
66
|
|
55
67
|
def initialize_wrappers
|
@@ -72,14 +84,6 @@ module Runcible
|
|
72
84
|
# (e.g. consumer_group)
|
73
85
|
class_object.name.split('::').last.underscore
|
74
86
|
end
|
75
|
-
|
76
|
-
def self.gather_classes(type)
|
77
|
-
const = Runcible
|
78
|
-
const = const.const_get(type.camelize)
|
79
|
-
path = File.dirname(__FILE__) + "/#{type}/*.rb"
|
80
|
-
base_names = Dir.glob(path).map { |f| File.basename(f, '.rb') }
|
81
|
-
base_names.map { |name| const.const_get(name.camelize) }
|
82
|
-
end
|
83
87
|
end
|
84
88
|
|
85
89
|
#Wrapper class to provide access to instances
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Runcible
|
2
2
|
module Models
|
3
3
|
class YumImporter < Importer
|
4
|
-
ID = 'yum_importer'
|
5
|
-
REPO_TYPE = 'rpm-repo'
|
6
|
-
DOWNLOAD_IMMEDIATE = 'immediate'
|
7
|
-
DOWNLOAD_ON_DEMAND = 'on_demand'
|
8
|
-
DOWNLOAD_BACKGROUND = 'background'
|
4
|
+
ID = 'yum_importer'.freeze
|
5
|
+
REPO_TYPE = 'rpm-repo'.freeze
|
6
|
+
DOWNLOAD_IMMEDIATE = 'immediate'.freeze
|
7
|
+
DOWNLOAD_ON_DEMAND = 'on_demand'.freeze
|
8
|
+
DOWNLOAD_BACKGROUND = 'background'.freeze
|
9
9
|
DOWNLOAD_POLICIES = [DOWNLOAD_IMMEDIATE, DOWNLOAD_ON_DEMAND, DOWNLOAD_BACKGROUND].freeze
|
10
10
|
|
11
11
|
attr_accessor 'download_policy'
|
@@ -7,7 +7,7 @@ module Runcible
|
|
7
7
|
# @param [String] id the ID of the consumer
|
8
8
|
# @return [String] the consumer path, may contain the id if passed
|
9
9
|
def self.path(id = nil)
|
10
|
-
|
10
|
+
id.nil? ? 'consumers/' : "consumers/#{id}/"
|
11
11
|
end
|
12
12
|
|
13
13
|
# Creates a consumer
|
@@ -9,7 +9,7 @@ module Runcible
|
|
9
9
|
# @param [String] upload_id the id of the upload_request
|
10
10
|
# @return [String] the content path, may contain the upload_id if passed
|
11
11
|
def upload_path(upload_id = nil)
|
12
|
-
|
12
|
+
upload_id.nil? ? 'content/uploads/' : "content/uploads/#{upload_id}/"
|
13
13
|
end
|
14
14
|
|
15
15
|
# Creates an Upload Request
|
@@ -3,14 +3,14 @@ module Runcible
|
|
3
3
|
# @see https://pulp-dev-guide.readthedocs.org/en/latest/events/index.html
|
4
4
|
class EventNotifier < Runcible::Base
|
5
5
|
class EventTypes
|
6
|
-
REPO_SYNC_COMPLETE = 'repo.sync.finish'
|
7
|
-
REPO_SYNC_START = 'repo.sync.start'
|
8
|
-
REPO_PUBLISH_COMPLETE = 'repo.publish.finish'
|
9
|
-
REPO_PUBLISH_START = 'repo.publish.start'
|
6
|
+
REPO_SYNC_COMPLETE = 'repo.sync.finish'.freeze
|
7
|
+
REPO_SYNC_START = 'repo.sync.start'.freeze
|
8
|
+
REPO_PUBLISH_COMPLETE = 'repo.publish.finish'.freeze
|
9
|
+
REPO_PUBLISH_START = 'repo.publish.start'.freeze
|
10
10
|
end
|
11
11
|
|
12
12
|
class NotifierTypes
|
13
|
-
REST_API = 'http'
|
13
|
+
REST_API = 'http'.freeze
|
14
14
|
end
|
15
15
|
|
16
16
|
# Generates the API path for Event Notifiers
|
@@ -18,7 +18,7 @@ module Runcible
|
|
18
18
|
# @param [String] id the ID of the event notifier
|
19
19
|
# @return [String] the event notifier path, may contain the ID if passed
|
20
20
|
def self.path(id = nil)
|
21
|
-
|
21
|
+
id.nil? ? 'events/' : "events/#{id}/"
|
22
22
|
end
|
23
23
|
|
24
24
|
# Creates an Event Notification
|
@@ -9,7 +9,7 @@ module Runcible
|
|
9
9
|
# @param [String] id the id of the repository
|
10
10
|
# @return [String] the repository path, may contain the id if passed
|
11
11
|
def self.path(id = nil)
|
12
|
-
|
12
|
+
id.nil? ? 'repositories/' : "repositories/#{id}/"
|
13
13
|
end
|
14
14
|
|
15
15
|
# Creates a repository
|
@@ -13,7 +13,7 @@ module Runcible
|
|
13
13
|
def self.path(repo_id, importer_id, schedule_id = nil)
|
14
14
|
repo_path = Runcible::Resources::Repository.path(repo_id)
|
15
15
|
path = "#{repo_path}importers/#{importer_id}/schedules/sync/"
|
16
|
-
|
16
|
+
schedule_id.nil? ? path : "#{path}#{schedule_id}/"
|
17
17
|
end
|
18
18
|
|
19
19
|
# List the schedules for a repository for a given importer type
|
@@ -7,7 +7,7 @@ module Runcible
|
|
7
7
|
# @param [String] id the ID of the role
|
8
8
|
# @return [String] the role path, may contain the ID if passed
|
9
9
|
def self.path(id = nil)
|
10
|
-
|
10
|
+
id.nil? ? 'roles/' : "roles/#{id}/"
|
11
11
|
end
|
12
12
|
|
13
13
|
# Adds a user to a role
|
@@ -7,7 +7,7 @@ module Runcible
|
|
7
7
|
# @param [String] id the id of the task
|
8
8
|
# @return [String] the task path, may contain the id if passed
|
9
9
|
def self.path(id = nil)
|
10
|
-
|
10
|
+
id.nil? ? 'tasks/' : "tasks/#{id}/"
|
11
11
|
end
|
12
12
|
|
13
13
|
# Polls for the status of a task
|
@@ -7,7 +7,7 @@ module Runcible
|
|
7
7
|
# @param [String] id the id of the task
|
8
8
|
# @return [String] the task path, may contain the id if passed
|
9
9
|
def self.path(id = nil)
|
10
|
-
|
10
|
+
id.nil? ? 'task_groups/' : "task_groups/#{id}/"
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.summary_path(id)
|
@@ -7,7 +7,7 @@ module Runcible
|
|
7
7
|
# @param [String] login the user's login
|
8
8
|
# @return [String] the user path, may contain the login if passed
|
9
9
|
def self.path(login = nil)
|
10
|
-
|
10
|
+
login.nil? ? 'users/' : "users/#{login}/"
|
11
11
|
end
|
12
12
|
|
13
13
|
# Retrieves all users
|
data/lib/runcible/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runcible
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric D Helms, Justin Sherrill
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- lib/runcible/extensions/docker_manifest.rb
|
136
136
|
- lib/runcible/extensions/docker_tag.rb
|
137
137
|
- lib/runcible/extensions/errata.rb
|
138
|
+
- lib/runcible/extensions/file.rb
|
138
139
|
- lib/runcible/extensions/ostree_branch.rb
|
139
140
|
- lib/runcible/extensions/package_category.rb
|
140
141
|
- lib/runcible/extensions/package_group.rb
|
@@ -196,8 +197,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
197
|
version: '0'
|
197
198
|
requirements: []
|
198
199
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.
|
200
|
+
rubygems_version: 2.4.6
|
200
201
|
signing_key:
|
201
202
|
specification_version: 4
|
202
203
|
summary: ''
|
203
204
|
test_files: []
|
205
|
+
has_rdoc:
|