spice 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -1
- data/lib/spice.rb +29 -19
- data/lib/spice/authentication.rb +1 -2
- data/lib/spice/core_ext/hash.rb +11 -0
- data/lib/spice/search.rb +19 -16
- data/lib/spice/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spice.gemspec +1 -1
- metadata +5 -4
data/README.md
CHANGED
@@ -17,6 +17,7 @@ Spice has five configuration variables:
|
|
17
17
|
Spice.host # default: localhost
|
18
18
|
Spice.port # default: 4000
|
19
19
|
Spice.scheme # default: http
|
20
|
+
Spice.chef_version # default: 0.9.14. Should be set to the version you have
|
20
21
|
Spice.client_name # default: nil. Must be set to a valid admin Chef client
|
21
22
|
Spice.key_file # default: nil. Must be set to a file path
|
22
23
|
|
@@ -28,7 +29,7 @@ To connect to a Chef server at https://chef.example.com:5000 with the "admin" AP
|
|
28
29
|
Spice.client_name = "admin"
|
29
30
|
Spice.key_file = "/path/to/keyfile.pem"
|
30
31
|
|
31
|
-
Say you had a Chef server (or Chef solo) running locally on port 4000 over HTTP, you only need to set your `client_name` and `key_file` path:
|
32
|
+
Say you had a Chef server v0.9.14 (or Chef solo) running locally on port 4000 over HTTP, you only need to set your `client_name` and `key_file` path:
|
32
33
|
|
33
34
|
Spice.client_name = "admin"
|
34
35
|
Spice.key_file = "/path/to/keyfile.pem"
|
data/lib/spice.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'rest-client'
|
2
2
|
require 'mixlib/authentication'
|
3
3
|
require 'yajl'
|
4
|
+
require 'cgi'
|
4
5
|
|
5
6
|
require 'spice/authentication'
|
6
7
|
require 'spice/chef'
|
7
8
|
|
9
|
+
require 'spice/core_ext/hash'
|
10
|
+
|
8
11
|
require 'spice/role'
|
9
12
|
require 'spice/client'
|
10
13
|
require 'spice/cookbook'
|
@@ -17,70 +20,77 @@ require 'spice/version'
|
|
17
20
|
require 'spice/mock'
|
18
21
|
|
19
22
|
module Spice
|
20
|
-
|
23
|
+
|
21
24
|
class << self
|
22
25
|
attr_writer :host, :port, :scheme, :url_path, :client_name, :connection, :key_file, :raw_key
|
23
|
-
|
26
|
+
|
24
27
|
def default_host
|
25
28
|
@default_host || "localhost"
|
26
29
|
end
|
27
|
-
|
30
|
+
|
28
31
|
def default_port
|
29
32
|
@default_port || "4000"
|
30
33
|
end
|
31
|
-
|
34
|
+
|
32
35
|
def default_scheme
|
33
36
|
@default_scheme || "http"
|
34
37
|
end
|
35
|
-
|
38
|
+
|
36
39
|
def default_url_path
|
37
40
|
@default_url_path || ""
|
38
41
|
end
|
39
|
-
|
42
|
+
|
40
43
|
def host
|
41
44
|
@host || default_host
|
42
45
|
end
|
43
|
-
|
46
|
+
|
44
47
|
def port
|
45
48
|
@port || default_port
|
46
49
|
end
|
47
|
-
|
50
|
+
|
48
51
|
def scheme
|
49
52
|
@scheme || default_scheme
|
50
53
|
end
|
51
|
-
|
54
|
+
|
52
55
|
def client_name
|
53
56
|
@client_name
|
54
57
|
end
|
55
|
-
|
58
|
+
|
56
59
|
def key_file
|
57
60
|
@key_file
|
58
61
|
end
|
59
|
-
|
62
|
+
|
60
63
|
def raw_key
|
61
64
|
@raw_key
|
62
65
|
end
|
63
|
-
|
66
|
+
|
64
67
|
def key_file=(new_key_file)
|
65
68
|
raw_key = File.read(new_key_file)
|
66
69
|
assert_valid_key_format!(raw_key)
|
67
70
|
@key_file = new_key_file
|
68
71
|
@raw_key = raw_key
|
69
72
|
end
|
73
|
+
|
74
|
+
def chef_version
|
75
|
+
@chef_version || "0.9.14"
|
76
|
+
end
|
70
77
|
|
78
|
+
def chef_version=(version)
|
79
|
+
@chef_version = version
|
80
|
+
end
|
71
81
|
|
72
82
|
def url_path
|
73
83
|
@url_path || default_url_path
|
74
84
|
end
|
75
|
-
|
85
|
+
|
76
86
|
def connection
|
77
87
|
@connection
|
78
88
|
end
|
79
89
|
|
80
90
|
def connect!
|
81
91
|
@connection = Connection.new(
|
82
|
-
:url => "#{scheme}://#{host}:#{port}/#{url_path}",
|
83
|
-
:client_name => client_name,
|
92
|
+
:url => "#{scheme}://#{host}:#{port}/#{url_path}",
|
93
|
+
:client_name => client_name,
|
84
94
|
:key_file => key_file
|
85
95
|
)
|
86
96
|
end
|
@@ -93,17 +103,17 @@ module Spice
|
|
93
103
|
@client_name = nil
|
94
104
|
@connection = nil
|
95
105
|
end
|
96
|
-
|
106
|
+
|
97
107
|
def setup
|
98
108
|
yield self
|
99
109
|
end
|
100
|
-
|
110
|
+
|
101
111
|
def mock
|
102
112
|
Spice::Mock.setup_mock_client
|
103
113
|
end
|
104
|
-
|
114
|
+
|
105
115
|
private
|
106
|
-
|
116
|
+
|
107
117
|
def assert_valid_key_format!(raw_key)
|
108
118
|
unless (raw_key =~ /\A-----BEGIN RSA PRIVATE KEY-----$/) &&
|
109
119
|
(raw_key =~ /^-----END RSA PRIVATE KEY-----\Z/)
|
data/lib/spice/authentication.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'openssl'
|
2
2
|
require 'mixlib/authentication/signedheaderauth'
|
3
|
-
require 'chef/version'
|
4
3
|
|
5
4
|
module Spice
|
6
5
|
class Authentication
|
@@ -25,7 +24,7 @@ module Spice
|
|
25
24
|
signed = sign_obj.sign(key).merge({:host => host})
|
26
25
|
signed.inject({}){|memo, kv| memo["#{kv[0].to_s.upcase}"] = kv[1];memo}
|
27
26
|
# Platform requires X-Chef-Version header
|
28
|
-
version = { "X-Chef-Version" =>
|
27
|
+
version = { "X-Chef-Version" => Spice.chef_version }
|
29
28
|
signed.merge!(version)
|
30
29
|
end
|
31
30
|
|
data/lib/spice/search.rb
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
module Spice
|
2
2
|
class Search < Spice::Chef
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
3
|
+
def self.search(index, options={})
|
4
|
+
options = {:q => options} if options.is_a? String
|
5
|
+
options.symbolize_keys!
|
6
|
+
|
7
|
+
options[:q] ||= '*:*'
|
8
|
+
options[:sort] ||= "X_CHEF_id_CHEF_X asc"
|
9
|
+
options[:start] ||= 0
|
10
|
+
options[:rows] ||= 1000
|
11
|
+
|
12
|
+
# clean up options hash
|
13
|
+
options.delete_if{|k,v| !%w(q sort start rows).include?(k.to_s)}
|
14
|
+
|
15
|
+
params = options.collect{ |k, v| "#{k}=#{CGI::escape(v.to_s)}"}.join("&")
|
16
|
+
connection.get("/search/#{CGI::escape(index.to_s)}?#{params}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.method_missing(*args, &block)
|
20
|
+
self.search(*args, &block)
|
18
21
|
end
|
19
22
|
end
|
20
|
-
end
|
23
|
+
end
|
data/lib/spice/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -7,8 +7,8 @@ require 'rspec'
|
|
7
7
|
require 'webmock/rspec'
|
8
8
|
require 'timecop'
|
9
9
|
require 'rest-client'
|
10
|
-
require 'spice'
|
11
10
|
|
11
|
+
require 'spice'
|
12
12
|
# Requires supporting files with custom matchers and macros, etc,
|
13
13
|
# in ./support/ and its subdirectories.
|
14
14
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
data/spice.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = ["hi@iamdanryan.com"]
|
11
11
|
s.homepage = "http://github.com/danryan/spice"
|
12
12
|
s.summary = %q{Chef API wrapper}
|
13
|
-
s.description = %q{Spice is a zesty Chef API wrapper.
|
13
|
+
s.description = %q{Spice is a zesty Chef API wrapper. Its primary purpose is to let you easily integrate your apps with a Chef server easily. Spice provides support for the entire released Chef API}
|
14
14
|
|
15
15
|
s.rubyforge_project = "spice"
|
16
16
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: spice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.4.
|
5
|
+
version: 0.4.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Dan Ryan
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-28 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
version: "0"
|
124
124
|
type: :development
|
125
125
|
version_requirements: *id010
|
126
|
-
description: Spice is a zesty Chef API wrapper.
|
126
|
+
description: Spice is a zesty Chef API wrapper. Its primary purpose is to let you easily integrate your apps with a Chef server easily. Spice provides support for the entire released Chef API
|
127
127
|
email:
|
128
128
|
- hi@iamdanryan.com
|
129
129
|
executables: []
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- lib/spice/client.rb
|
155
155
|
- lib/spice/connection.rb
|
156
156
|
- lib/spice/cookbook.rb
|
157
|
+
- lib/spice/core_ext/hash.rb
|
157
158
|
- lib/spice/data_bag.rb
|
158
159
|
- lib/spice/mock.rb
|
159
160
|
- lib/spice/node.rb
|
@@ -203,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
204
|
requirements: []
|
204
205
|
|
205
206
|
rubyforge_project: spice
|
206
|
-
rubygems_version: 1.
|
207
|
+
rubygems_version: 1.6.2
|
207
208
|
signing_key:
|
208
209
|
specification_version: 3
|
209
210
|
summary: Chef API wrapper
|