omnijack 0.2.0 → 1.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +16 -15
- data/Rakefile +1 -1
- data/features/step_definitions/project.rb +5 -6
- data/lib/omnijack/config.rb +10 -10
- data/lib/omnijack/endpoint/list.rb +29 -0
- data/lib/omnijack/endpoint/metadata.rb +189 -0
- data/lib/omnijack/endpoint/platforms.rb +29 -0
- data/lib/omnijack/{platforms.rb → endpoint.rb} +34 -12
- data/lib/omnijack/project.rb +4 -6
- data/lib/omnijack/version.rb +1 -1
- data/lib/omnijack.rb +2 -24
- data/omnijack.gemspec +1 -2
- data/spec/omnijack/config_spec.rb +1 -1
- data/spec/omnijack/endpoint/list_spec.rb +33 -0
- data/spec/omnijack/{metadata_spec.rb → endpoint/metadata_spec.rb} +62 -208
- data/spec/omnijack/endpoint/platforms_spec.rb +33 -0
- data/spec/omnijack/{list_spec.rb → endpoint_spec.rb} +88 -9
- data/spec/omnijack/project_spec.rb +9 -5
- data/spec/omnijack_spec.rb +8 -44
- data/spec/support/real_test_data.json +12 -12
- data/vendor/chef/lib/chef/exceptions.rb +19 -13
- metadata +17 -28
- data/lib/omnijack/list.rb +0 -94
- data/lib/omnijack/metadata.rb +0 -238
- data/spec/omnijack/platforms_spec.rb +0 -132
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9da3ed386e954d9cec3fe7af1ed98ffd922293f6
|
4
|
+
data.tar.gz: 557a27f54cda7880d16735dd6e342dc5d21a1a8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ba750e4a5473fc133617fc87476c20e95025246de83b08b461313e9cbbe7ee284b70c790f86c7db5509adfe42a48bf4987a27ff99bb2ee270545264e87cf1f7
|
7
|
+
data.tar.gz: 2768872e886d0369fdce3b58e7f018c0a95fe2f26c32419d73f878a3c6202a5a67b1287c1df646f4f23c6687606948ec8613b17c702c063f47dc80e0ffb3fc65
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
Omnijack Gem CHANGELOG
|
2
2
|
======================
|
3
3
|
|
4
|
+
v1.0.0 (????-??-??)
|
5
|
+
-------------------
|
6
|
+
- Remove dependency on `ohai`; require platform arguments for metadata
|
7
|
+
- Swap out `json` dependency for `multi_json`
|
8
|
+
|
4
9
|
v0.2.0 (2014-09-19)
|
5
10
|
-------------------
|
6
11
|
- Calculate and expose version and build numbers as part of metadata
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@ Omnijack
|
|
3
3
|
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/omnijack.png)][fury]
|
5
5
|
[![Build Status](http://img.shields.io/travis/RoboticCheese/omnijack-ruby.svg)][travis]
|
6
|
-
[![Code Climate](http://img.shields.io/codeclimate/github/
|
6
|
+
[![Code Climate](http://img.shields.io/codeclimate/github/RoboticCheese/omnijack-ruby.svg)][codeclimate]
|
7
7
|
[![Coverage Status](http://img.shields.io/coveralls/RoboticCheese/omnijack-ruby.svg)][coveralls]
|
8
8
|
[![Dependency Status](http://img.shields.io/gemnasium/RoboticCheese/omnijack-ruby.svg)][gemnasium]
|
9
9
|
|
@@ -36,12 +36,21 @@ Or install it yourself as:
|
|
36
36
|
Usage
|
37
37
|
-----
|
38
38
|
|
39
|
-
Getting Chef-DK
|
39
|
+
Getting Chef-DK project data from the official Chef API:
|
40
40
|
|
41
41
|
```ruby
|
42
42
|
require 'omnijack'
|
43
43
|
|
44
44
|
chef_dk = Omnijack::Project::ChefDk.new
|
45
|
+
```
|
46
|
+
|
47
|
+
Getting Chef-DK package metadata (requires additional target platform
|
48
|
+
information):
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
chef_dk = Omnijack::Project::ChefDk.new(platform: 'ubuntu',
|
52
|
+
platform_version: '14.04',
|
53
|
+
machine_arch: 'x86_64')
|
45
54
|
metadata = chef_dk.metadata
|
46
55
|
|
47
56
|
puts metadata
|
@@ -62,6 +71,7 @@ puts metadata[:yolo]
|
|
62
71
|
puts metadata[:version]
|
63
72
|
puts metadata[:build]
|
64
73
|
```
|
74
|
+
|
65
75
|
Getting Chef-DK project data from an unofficial Omnitruck API:
|
66
76
|
|
67
77
|
```ruby
|
@@ -80,16 +90,6 @@ Omnijack::Project::ChefDk.new(
|
|
80
90
|
)
|
81
91
|
```
|
82
92
|
|
83
|
-
Getting Chef-DK project data for a platform other than the one running:
|
84
|
-
|
85
|
-
```ruby
|
86
|
-
Omnijack::Project::ChefDk.new(
|
87
|
-
platform: 'ubuntu',
|
88
|
-
platform_version: '14.04',
|
89
|
-
machine_arch: 'x86_64'
|
90
|
-
)
|
91
|
-
```
|
92
|
-
|
93
93
|
Getting the Chef project's list of packages:
|
94
94
|
|
95
95
|
```ruby
|
@@ -132,6 +132,7 @@ Contributing
|
|
132
132
|
|
133
133
|
1. Fork it ( https://github.com/[my-github-username]/omnijack/fork )
|
134
134
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
135
|
-
3.
|
136
|
-
4.
|
137
|
-
5.
|
135
|
+
3. Add tests for any new code and ensure all tests pass (`rake`)
|
136
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
137
|
+
5. Push to the branch (`git push origin my-new-feature`)
|
138
|
+
6. Create a new Pull Request
|
data/Rakefile
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
# Encoding: UTF-8
|
2
2
|
|
3
3
|
Given(/^a(n)? ([\w ]+) ([0-9\.]+) node$/) do |_, platform, version|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
allow_any_instance_of(Omnijack::Metadata).to receive(:node).and_return(node)
|
4
|
+
@args = { platform: platform.split.join('_').downcase,
|
5
|
+
platform_version: version,
|
6
|
+
machine_arch: 'x86_64' }
|
8
7
|
end
|
9
8
|
|
10
9
|
Given(/^no special arguments$/) do
|
11
|
-
@args
|
10
|
+
@args ||= {}
|
12
11
|
end
|
13
12
|
|
14
13
|
Given(/^nightlies enabled$/) do
|
15
|
-
@args
|
14
|
+
@args.merge!(nightlies: true)
|
16
15
|
end
|
17
16
|
|
18
17
|
When(/^I create a(n)? (\w+) project$/) do |_, project|
|
data/lib/omnijack/config.rb
CHANGED
@@ -26,36 +26,36 @@ class Omnijack
|
|
26
26
|
angry_chef: {
|
27
27
|
endpoints: {
|
28
28
|
metadata: '/metadata-angrychef',
|
29
|
-
|
30
|
-
|
29
|
+
list: '/full_angrychef_list',
|
30
|
+
platforms: '/angrychef_platform_names'
|
31
31
|
}
|
32
32
|
},
|
33
33
|
chef: {
|
34
34
|
endpoints: {
|
35
35
|
metadata: '/metadata',
|
36
|
-
|
37
|
-
|
36
|
+
list: '/full_client_list',
|
37
|
+
platforms: '/chef_platform_names'
|
38
38
|
}
|
39
39
|
},
|
40
40
|
chef_dk: {
|
41
41
|
endpoints: {
|
42
42
|
metadata: '/metadata-chefdk',
|
43
|
-
|
44
|
-
|
43
|
+
list: '/full_chefdk_list',
|
44
|
+
platforms: '/chefdk_platform_names'
|
45
45
|
}
|
46
46
|
},
|
47
47
|
chef_container: {
|
48
48
|
endpoints: {
|
49
49
|
metadata: '/metadata-container',
|
50
|
-
|
51
|
-
|
50
|
+
list: '/full_container_list',
|
51
|
+
platforms: '/chef_container_platform_names'
|
52
52
|
}
|
53
53
|
},
|
54
54
|
chef_server: {
|
55
55
|
endpoints: {
|
56
56
|
metadata: '/metadata-server',
|
57
|
-
|
58
|
-
|
57
|
+
list: '/full_server_list',
|
58
|
+
platforms: '/chef_server_platform_names'
|
59
59
|
}
|
60
60
|
}
|
61
61
|
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
4
|
+
#
|
5
|
+
# Copyright (C) 2014, Jonathan Hartman
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
|
19
|
+
require_relative '../endpoint'
|
20
|
+
|
21
|
+
class Omnijack
|
22
|
+
class Endpoint < Omnijack
|
23
|
+
# A class for representing an Omnitruck full list object
|
24
|
+
#
|
25
|
+
# @author Jonathan Hartman <j@p4nt5.com>
|
26
|
+
class List < Endpoint
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
4
|
+
#
|
5
|
+
# Copyright (C) 2014, Jonathan Hartman
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
|
19
|
+
require 'open-uri'
|
20
|
+
require_relative '../config'
|
21
|
+
require_relative '../endpoint'
|
22
|
+
|
23
|
+
class Omnijack
|
24
|
+
class Endpoint < Omnijack
|
25
|
+
# A class for representing an Omnitruck metadata object
|
26
|
+
#
|
27
|
+
# @author Jonathan Hartman <j@p4nt5.com>
|
28
|
+
class Metadata < Endpoint
|
29
|
+
include ::Chef::Mixin::ParamsValidate
|
30
|
+
include Config
|
31
|
+
|
32
|
+
def initialize(name, args)
|
33
|
+
super
|
34
|
+
[:platform, :platform_version, :machine_arch].each do |i|
|
35
|
+
send(i, args[i])
|
36
|
+
args.delete(i)
|
37
|
+
end
|
38
|
+
args.each { |k, v| send(k, v) unless v.nil? } unless args.nil?
|
39
|
+
to_h
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Set up an accessor method for each piece of metadata
|
44
|
+
#
|
45
|
+
METADATA_ATTRIBUTES.each do |a|
|
46
|
+
define_method(a) { to_h[a] }
|
47
|
+
end
|
48
|
+
define_method(:filename) { to_h[:filename] }
|
49
|
+
define_method(:build) { to_h[:build] }
|
50
|
+
|
51
|
+
#
|
52
|
+
# Offer a hash representation of the metadata
|
53
|
+
#
|
54
|
+
# @return [Hash]
|
55
|
+
#
|
56
|
+
def to_h
|
57
|
+
raw_data.split("\n").each_with_object({}) do |line, hsh|
|
58
|
+
key = line.split[0].to_sym
|
59
|
+
val = line.split[1]
|
60
|
+
val = true if val == 'true'
|
61
|
+
val = false if val == 'false'
|
62
|
+
hsh[key] = val
|
63
|
+
key == :url && hsh.merge!(parse_url_data(val)) && \
|
64
|
+
version(hsh[:version])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# The version of the project
|
70
|
+
#
|
71
|
+
# @param [String, NilClass] arg
|
72
|
+
# @return [String]
|
73
|
+
#
|
74
|
+
def version(arg = nil)
|
75
|
+
set_or_return(:version, arg, kind_of: String, default: 'latest')
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# Whether to enable prerelease and/or nightly packages
|
80
|
+
#
|
81
|
+
# @param [TrueClass, FalseClass, NilClass] arg
|
82
|
+
# @return [TrueClass, FalseClass]
|
83
|
+
#
|
84
|
+
[:prerelease, :nightlies].each do |m|
|
85
|
+
define_method(m) do |arg = nil|
|
86
|
+
set_or_return(m,
|
87
|
+
arg,
|
88
|
+
kind_of: [TrueClass, FalseClass],
|
89
|
+
default: false)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
#
|
94
|
+
# The name of the desired platform
|
95
|
+
#
|
96
|
+
# @param [String, NilClass]
|
97
|
+
# @return [String]
|
98
|
+
#
|
99
|
+
def platform(arg = nil)
|
100
|
+
set_or_return(:platform, arg, kind_of: String, required: true)
|
101
|
+
end
|
102
|
+
|
103
|
+
#
|
104
|
+
# The version of the desired platform
|
105
|
+
#
|
106
|
+
# @param [String, NilClass] arg
|
107
|
+
# @return [String]
|
108
|
+
#
|
109
|
+
def platform_version(arg = nil)
|
110
|
+
!arg.nil? && arg = case platform
|
111
|
+
when 'mac_os_x' then platform_version_mac_os_x(arg)
|
112
|
+
when 'windows' then platform_version_windows(arg)
|
113
|
+
else arg
|
114
|
+
end
|
115
|
+
set_or_return(:platform_version, arg, kind_of: String, required: true)
|
116
|
+
end
|
117
|
+
|
118
|
+
#
|
119
|
+
# The machine architecture of the desired platform
|
120
|
+
#
|
121
|
+
# @param [String, NilClass]
|
122
|
+
# @return [String]
|
123
|
+
#
|
124
|
+
def machine_arch(arg = nil)
|
125
|
+
set_or_return(:machine_arch, arg, kind_of: String, required: true)
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
#
|
131
|
+
# Construct the full API query URL from base + endpoint + params
|
132
|
+
#
|
133
|
+
# @return [URI::HTTP, URI::HTTPS]
|
134
|
+
#
|
135
|
+
def api_url
|
136
|
+
@api_url ||= URI.parse("#{super}?#{URI.encode_www_form(query_params)}")
|
137
|
+
end
|
138
|
+
|
139
|
+
#
|
140
|
+
# Convert all the metadata attrs into params Omnitruck understands
|
141
|
+
#
|
142
|
+
# @return [Hash]
|
143
|
+
#
|
144
|
+
def query_params
|
145
|
+
{ v: version, prerelease: prerelease, nightlies: nightlies,
|
146
|
+
p: platform, pv: platform_version, m: machine_arch }
|
147
|
+
end
|
148
|
+
|
149
|
+
#
|
150
|
+
# Apply special logic for the version of an OS X platform
|
151
|
+
#
|
152
|
+
# @param [String] arg
|
153
|
+
# @return [String]
|
154
|
+
#
|
155
|
+
def platform_version_mac_os_x(arg)
|
156
|
+
arg.match(/^[0-9]+\.[0-9]+/).to_s
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# Apply special logic for the version of a Windows platform
|
161
|
+
#
|
162
|
+
# @param [String] arg
|
163
|
+
# @return [String]
|
164
|
+
#
|
165
|
+
def platform_version_windows(arg)
|
166
|
+
# Make a best guess and assume a server OS
|
167
|
+
# See: http://msdn.microsoft.com/en-us/library/windows/
|
168
|
+
# desktop/ms724832(v=vs.85).aspx
|
169
|
+
{
|
170
|
+
'6.3' => '2012r2', '6.2' => '2012', '6.1' => '2008r2',
|
171
|
+
'6.0' => '2008', '5.2' => '2003r2', '5.1' => 'xp', '5.0' => '2000'
|
172
|
+
}[arg.match(/^[0-9]+\.[0-9]+/).to_s]
|
173
|
+
end
|
174
|
+
|
175
|
+
#
|
176
|
+
# Extract a filename, package version, and build from a package URL
|
177
|
+
#
|
178
|
+
# @param [String] url
|
179
|
+
# @return [[String] filename, [String] version, [String] build]
|
180
|
+
#
|
181
|
+
def parse_url_data(url)
|
182
|
+
filename = URI.decode(url).split('/')[-1]
|
183
|
+
{ filename: filename,
|
184
|
+
version: filename.split('-')[-2].split('_')[-1],
|
185
|
+
build: filename.split('-')[-1].split('.')[0].split('_')[0] }
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
4
|
+
#
|
5
|
+
# Copyright (C) 2014, Jonathan Hartman
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
|
19
|
+
require_relative '../endpoint'
|
20
|
+
|
21
|
+
class Omnijack
|
22
|
+
class Endpoint < Omnijack
|
23
|
+
# A class for representing an Omnitruck list of platform names
|
24
|
+
#
|
25
|
+
# @author Jonathan Hartman <j@p4nt5.com>
|
26
|
+
class Platforms < Endpoint
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -16,22 +16,32 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
|
-
require '
|
19
|
+
require 'multi_json'
|
20
20
|
require 'open-uri'
|
21
|
-
|
21
|
+
unless Module.const_defined?(:Chef)
|
22
|
+
require_relative '../../vendor/chef/lib/chef/exceptions'
|
23
|
+
require_relative '../../vendor/chef/lib/chef/mixin/params_validate'
|
24
|
+
end
|
22
25
|
require_relative '../omnijack'
|
26
|
+
require_relative 'endpoint/list'
|
27
|
+
require_relative 'endpoint/metadata'
|
28
|
+
require_relative 'endpoint/platforms'
|
23
29
|
|
24
30
|
class Omnijack
|
25
|
-
# A class for
|
31
|
+
# A parent class for Omnijack API endpoints
|
26
32
|
#
|
27
33
|
# @author Jonathan Hartman <j@p4nt5.com>
|
28
|
-
class
|
34
|
+
class Endpoint < Omnijack
|
35
|
+
include ::Chef::Mixin::ParamsValidate
|
29
36
|
include Config
|
30
37
|
|
31
|
-
|
38
|
+
def initialize(name, args = {})
|
39
|
+
super
|
40
|
+
base_url(args[:base_url])
|
41
|
+
end
|
32
42
|
|
33
43
|
#
|
34
|
-
# Make
|
44
|
+
# Make class items accessible via methods
|
35
45
|
#
|
36
46
|
# @param [Symbol] method_id
|
37
47
|
#
|
@@ -40,9 +50,9 @@ class Omnijack
|
|
40
50
|
end
|
41
51
|
|
42
52
|
#
|
43
|
-
# Make
|
53
|
+
# Make class items accessible via hash keys
|
44
54
|
#
|
45
|
-
# @param
|
55
|
+
# @param[Symbol] key
|
46
56
|
# @return [String, NilClass]
|
47
57
|
#
|
48
58
|
def [](key)
|
@@ -50,13 +60,13 @@ class Omnijack
|
|
50
60
|
end
|
51
61
|
|
52
62
|
#
|
53
|
-
# Offer a hash representation of the
|
63
|
+
# Offer a hash representation of the object
|
54
64
|
#
|
55
65
|
# @return [Hash]
|
56
66
|
#
|
57
67
|
def to_h
|
58
68
|
# TODO: Use a Mash -- some keys are better off addressed as strings
|
59
|
-
|
69
|
+
MultiJson.load(raw_data, symbolize_names: true)
|
60
70
|
end
|
61
71
|
|
62
72
|
#
|
@@ -64,10 +74,21 @@ class Omnijack
|
|
64
74
|
#
|
65
75
|
define_method(:to_s) { raw_data }
|
66
76
|
|
77
|
+
#
|
78
|
+
# The base URL of the Omnitruck API
|
79
|
+
#
|
80
|
+
# @param [String, NilClass] arg
|
81
|
+
# @return [String]
|
82
|
+
#
|
83
|
+
def base_url(arg = nil)
|
84
|
+
# TODO: Better URL validation
|
85
|
+
set_or_return(:base_url, arg, kind_of: String, default: DEFAULT_BASE_URL)
|
86
|
+
end
|
87
|
+
|
67
88
|
private
|
68
89
|
|
69
90
|
#
|
70
|
-
# Fetch the raw
|
91
|
+
# Fetch the raw data from the configured URI
|
71
92
|
#
|
72
93
|
# @return [String]
|
73
94
|
#
|
@@ -90,7 +111,8 @@ class Omnijack
|
|
90
111
|
# @return [String]
|
91
112
|
#
|
92
113
|
def endpoint
|
93
|
-
|
114
|
+
cl = self.class.to_s.split(':')[-1].downcase.to_sym
|
115
|
+
OMNITRUCK_PROJECTS[name][:endpoints][cl]
|
94
116
|
end
|
95
117
|
end
|
96
118
|
end
|
data/lib/omnijack/project.rb
CHANGED
@@ -18,9 +18,7 @@
|
|
18
18
|
|
19
19
|
require_relative '../omnijack'
|
20
20
|
require_relative 'config'
|
21
|
-
require_relative '
|
22
|
-
require_relative 'metadata'
|
23
|
-
require_relative 'platforms'
|
21
|
+
require_relative 'endpoint'
|
24
22
|
require_relative 'project/metaprojects'
|
25
23
|
|
26
24
|
class Omnijack
|
@@ -37,7 +35,7 @@ class Omnijack
|
|
37
35
|
#
|
38
36
|
def metadata
|
39
37
|
# TODO: This requires too much knowledge of the Metadata class
|
40
|
-
@metadata ||= Metadata.new(name, args)
|
38
|
+
@metadata ||= Endpoint::Metadata.new(name, args)
|
41
39
|
end
|
42
40
|
|
43
41
|
#
|
@@ -46,7 +44,7 @@ class Omnijack
|
|
46
44
|
# @return [Omnijack::List]
|
47
45
|
#
|
48
46
|
def list
|
49
|
-
@list ||= List.new(name, args)
|
47
|
+
@list ||= Endpoint::List.new(name, args)
|
50
48
|
end
|
51
49
|
|
52
50
|
#
|
@@ -55,7 +53,7 @@ class Omnijack
|
|
55
53
|
# @return [Omnijack::Platforms]
|
56
54
|
#
|
57
55
|
def platforms
|
58
|
-
@platforms ||= Platforms.new(name, args)
|
56
|
+
@platforms ||= Endpoint::Platforms.new(name, args)
|
59
57
|
end
|
60
58
|
end
|
61
59
|
end
|
data/lib/omnijack/version.rb
CHANGED
data/lib/omnijack.rb
CHANGED
@@ -16,41 +16,19 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
|
-
|
20
|
-
require_relative '../vendor/chef/lib/chef/exceptions'
|
21
|
-
require_relative '../vendor/chef/lib/chef/mixin/params_validate'
|
22
|
-
end
|
19
|
+
require 'open-uri'
|
23
20
|
require_relative 'omnijack/config'
|
21
|
+
require_relative 'omnijack/endpoint'
|
24
22
|
require_relative 'omnijack/project'
|
25
|
-
require_relative 'omnijack/list'
|
26
|
-
require_relative 'omnijack/metadata'
|
27
|
-
require_relative 'omnijack/platforms'
|
28
23
|
require_relative 'omnijack/version'
|
29
24
|
|
30
25
|
# Provide a base class with some commons everyone can inherit
|
31
26
|
#
|
32
27
|
# @author Jonathan Hartman <j@p4nt5.com>
|
33
28
|
class Omnijack
|
34
|
-
include ::Chef::Mixin::ParamsValidate
|
35
|
-
include Config
|
36
|
-
|
37
29
|
def initialize(name, args = {})
|
38
30
|
@name = name.to_sym
|
39
31
|
@args = args
|
40
|
-
base_url(args[:base_url]) if args && args[:base_url]
|
41
32
|
end
|
42
33
|
attr_reader :name, :args
|
43
|
-
|
44
|
-
#
|
45
|
-
# The base URL of the Omnitruck API
|
46
|
-
#
|
47
|
-
# @param [String, NilClass] arg
|
48
|
-
# @return [String]
|
49
|
-
#
|
50
|
-
def base_url(arg = nil)
|
51
|
-
# TODO: Better URL validation
|
52
|
-
set_or_return(:base_url, arg, kind_of: String, default: DEFAULT_BASE_URL)
|
53
|
-
end
|
54
|
-
|
55
|
-
# TODO: Every class' `endpoint` method is similar enough they could go here
|
56
34
|
end
|
data/omnijack.gemspec
CHANGED
@@ -21,8 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.required_ruby_version = '>= 1.9.3'
|
23
23
|
|
24
|
-
spec.add_dependency '
|
25
|
-
spec.add_dependency 'json'
|
24
|
+
spec.add_dependency 'multi_json'
|
26
25
|
|
27
26
|
spec.add_development_dependency 'bundler'
|
28
27
|
spec.add_development_dependency 'rake'
|
@@ -41,7 +41,7 @@ describe Omnijack::Config do
|
|
41
41
|
|
42
42
|
# Some endpoints aren't available on Chef's public Omnitruck API
|
43
43
|
if [:angry_chef, :chef_dk, :chef_container].include?(project) && \
|
44
|
-
[:
|
44
|
+
[:list, :platforms].include?(name)
|
45
45
|
expected = 301
|
46
46
|
else
|
47
47
|
expected = 200
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Author:: Jonathan Hartman (<j@p4nt5.com>)
|
4
|
+
#
|
5
|
+
# Copyright (C) 2014, Jonathan Hartman
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
|
19
|
+
require_relative '../../spec_helper'
|
20
|
+
require_relative '../../../lib/omnijack/endpoint/list'
|
21
|
+
|
22
|
+
describe Omnijack::Endpoint::List do
|
23
|
+
let(:name) { :chef_dk }
|
24
|
+
let(:obj) { described_class.new(name) }
|
25
|
+
|
26
|
+
describe '#endpoint' do
|
27
|
+
let(:name) { :chef_container }
|
28
|
+
|
29
|
+
it 'returns the appropriate metadata endpoint' do
|
30
|
+
expect(obj.send(:endpoint)).to eq('/full_container_list')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|