ridley 0.12.1 → 0.12.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ridley.rb +22 -25
- data/lib/ridley/bootstrap_bindings.rb +1 -3
- data/lib/ridley/bootstrapper.rb +3 -2
- data/lib/ridley/chef.rb +3 -3
- data/lib/ridley/chef/cookbook.rb +2 -2
- data/lib/ridley/chef_objects.rb +1 -1
- data/lib/ridley/chef_objects/cookbook_object.rb +9 -1
- data/lib/ridley/client.rb +0 -22
- data/lib/ridley/host_connector.rb +4 -4
- data/lib/ridley/host_connector/ssh.rb +1 -1
- data/lib/ridley/host_connector/winrm.rb +2 -2
- data/lib/ridley/middleware.rb +5 -5
- data/lib/ridley/middleware/chef_auth.rb +5 -2
- data/lib/ridley/mixin.rb +1 -1
- data/lib/ridley/resources.rb +1 -1
- data/lib/ridley/resources/data_bag_resource.rb +2 -2
- data/lib/ridley/version.rb +1 -1
- data/ridley.gemspec +1 -1
- data/spec/acceptance/cookbook_resource_spec.rb +19 -2
- data/spec/unit/ridley/chef_objects/cookbook_object_spec.rb +10 -0
- data/spec/unit/ridley/middleware/chef_auth_spec.rb +13 -0
- data/spec/unit/ridley/resources/cookbook_resource_spec.rb +0 -6
- metadata +4 -4
data/lib/ridley.rb
CHANGED
@@ -5,16 +5,16 @@ silence_warnings do
|
|
5
5
|
# Requiring winrm before all other gems because of https://github.com/WinRb/WinRM/issues/39
|
6
6
|
require 'winrm'
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
|
+
require 'active_support/inflector'
|
10
|
+
require 'addressable/uri'
|
9
11
|
require 'celluloid'
|
12
|
+
require 'chozo'
|
10
13
|
require 'faraday'
|
11
|
-
require 'addressable/uri'
|
12
|
-
require 'multi_json'
|
13
|
-
require 'solve'
|
14
|
-
require 'active_support/inflector'
|
15
14
|
require 'forwardable'
|
16
|
-
require '
|
15
|
+
require 'multi_json'
|
17
16
|
require 'pathname'
|
17
|
+
require 'solve'
|
18
18
|
|
19
19
|
if jruby?
|
20
20
|
require 'json/pure'
|
@@ -22,26 +22,28 @@ else
|
|
22
22
|
require 'json/ext'
|
23
23
|
end
|
24
24
|
|
25
|
-
require 'ridley/version'
|
26
|
-
require 'ridley/errors'
|
27
|
-
|
28
25
|
JSON.create_id = nil
|
29
26
|
|
30
27
|
# @author Jamie Winsor <reset@riotgames.com>
|
31
28
|
module Ridley
|
32
29
|
CHEF_VERSION = '11.4.0'.freeze
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
31
|
+
require_relative 'ridley/mixin'
|
32
|
+
require_relative 'ridley/bootstrap_bindings'
|
33
|
+
require_relative 'ridley/bootstrapper'
|
34
|
+
require_relative 'ridley/chef_object'
|
35
|
+
require_relative 'ridley/chef_objects'
|
36
|
+
require_relative 'ridley/client'
|
37
|
+
require_relative 'ridley/connection'
|
38
|
+
require_relative 'ridley/chef'
|
39
|
+
require_relative 'ridley/host_connector'
|
40
|
+
require_relative 'ridley/logging'
|
41
|
+
require_relative 'ridley/middleware'
|
42
|
+
require_relative 'ridley/resource'
|
43
|
+
require_relative 'ridley/resources'
|
44
|
+
require_relative 'ridley/sandbox_uploader'
|
45
|
+
require_relative 'ridley/version'
|
46
|
+
require_relative 'ridley/errors'
|
45
47
|
|
46
48
|
class << self
|
47
49
|
extend Forwardable
|
@@ -68,8 +70,3 @@ module Ridley
|
|
68
70
|
end
|
69
71
|
|
70
72
|
Celluloid.logger = Ridley.logger
|
71
|
-
|
72
|
-
require 'ridley/bootstrap_bindings'
|
73
|
-
require 'ridley/middleware'
|
74
|
-
require 'ridley/chef_objects'
|
75
|
-
require 'ridley/resources'
|
data/lib/ridley/bootstrapper.rb
CHANGED
data/lib/ridley/chef.rb
CHANGED
@@ -4,8 +4,8 @@ module Ridley
|
|
4
4
|
# Classes and modules used for integrating with a Chef Server, the Chef community
|
5
5
|
# site, and Chef Cookbooks
|
6
6
|
module Chef
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
require_relative 'chef/cookbook'
|
8
|
+
require_relative 'chef/chefignore'
|
9
|
+
require_relative 'chef/digester'
|
10
10
|
end
|
11
11
|
end
|
data/lib/ridley/chef/cookbook.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Ridley::Chef
|
2
2
|
# @author Jamie Winsor <reset@riotgames.com>
|
3
3
|
class Cookbook
|
4
|
-
|
5
|
-
|
4
|
+
require_relative 'cookbook/metadata'
|
5
|
+
require_relative 'cookbook/syntax_check'
|
6
6
|
|
7
7
|
class << self
|
8
8
|
# @param [String] filepath
|
data/lib/ridley/chef_objects.rb
CHANGED
@@ -15,7 +15,7 @@ module Ridley
|
|
15
15
|
:root_files
|
16
16
|
].freeze
|
17
17
|
|
18
|
-
set_chef_id "
|
18
|
+
set_chef_id "cookbook_name"
|
19
19
|
set_chef_type "cookbook"
|
20
20
|
set_chef_json_class "Chef::Cookbook"
|
21
21
|
|
@@ -167,6 +167,14 @@ module Ridley
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
|
+
# Reload the attributes of the instantiated resource
|
171
|
+
#
|
172
|
+
# @return [Ridley::CookbookObject]
|
173
|
+
def reload
|
174
|
+
mass_assign(resource.find(self, self.version)._attributes_)
|
175
|
+
self
|
176
|
+
end
|
177
|
+
|
170
178
|
def to_s
|
171
179
|
"#{name}: #{manifest}"
|
172
180
|
end
|
data/lib/ridley/client.rb
CHANGED
@@ -1,27 +1,5 @@
|
|
1
1
|
module Ridley
|
2
2
|
# @author Jamie Winsor <reset@riotgames.com>
|
3
|
-
#
|
4
|
-
# @example
|
5
|
-
# connection = Ridley::Client.new
|
6
|
-
# connection.role.all
|
7
|
-
#
|
8
|
-
# connection.role.find("reset") => Ridley::RoleResource.find(connection, "reset")
|
9
|
-
#
|
10
|
-
# @example instantiating new resources
|
11
|
-
# connection = Ridley::Connection.new
|
12
|
-
# connection.role.new(name: "hello") => <#Ridley::RoleResource: @name="hello">
|
13
|
-
#
|
14
|
-
# New instances of resources can be instantiated by calling new on the Ridley::Context. These messages
|
15
|
-
# will be send to the Chef resource's class in Ridley and can be treated as a normal Ruby object. Each
|
16
|
-
# instantiated object will have the connection information contained within so you can do things like
|
17
|
-
# save a role after changing it's attributes.
|
18
|
-
#
|
19
|
-
# r = connection.role.new(name: "new-role")
|
20
|
-
# r.name => "new-role"
|
21
|
-
# r.name = "other-name"
|
22
|
-
# r.save
|
23
|
-
#
|
24
|
-
# connection.role.find("new-role") => <#Ridley::RoleResource: @name="new-role">
|
25
3
|
class Client
|
26
4
|
class ConnectionSupervisor < ::Celluloid::SupervisionGroup
|
27
5
|
def initialize(registry, options)
|
@@ -4,10 +4,10 @@ require 'timeout'
|
|
4
4
|
module Ridley
|
5
5
|
# @author Kyle Allan <kallan@riotgames.com>
|
6
6
|
module HostConnector
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
require_relative 'host_connector/response'
|
8
|
+
require_relative 'host_connector/response_set'
|
9
|
+
require_relative 'host_connector/ssh'
|
10
|
+
require_relative 'host_connector/winrm'
|
11
11
|
|
12
12
|
DEFAULT_SSH_PORT = 22.freeze
|
13
13
|
DEFAULT_WINRM_PORT = 5985.freeze
|
@@ -2,8 +2,8 @@ module Ridley
|
|
2
2
|
module HostConnector
|
3
3
|
# @author Kyle Allan <kallan@riotgames.com>
|
4
4
|
class WinRM
|
5
|
-
|
6
|
-
|
5
|
+
require_relative 'winrm/command_uploader'
|
6
|
+
require_relative 'winrm/worker'
|
7
7
|
|
8
8
|
class << self
|
9
9
|
# @param [Ridley::NodeResource, Array<Ridley::NodeResource>] nodes
|
data/lib/ridley/middleware.rb
CHANGED
@@ -3,11 +3,11 @@ module Ridley
|
|
3
3
|
module Middleware
|
4
4
|
CONTENT_TYPE = 'content-type'.freeze
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
require_relative 'middleware/parse_json'
|
7
|
+
require_relative 'middleware/chef_response'
|
8
|
+
require_relative 'middleware/chef_auth'
|
9
|
+
require_relative 'middleware/follow_redirects'
|
10
|
+
require_relative 'middleware/retry'
|
11
11
|
|
12
12
|
Faraday.register_middleware :request,
|
13
13
|
chef_auth: -> { Ridley::Middleware::ChefAuth }
|
@@ -11,12 +11,15 @@ module Ridley
|
|
11
11
|
#
|
12
12
|
# @param [String] client_name
|
13
13
|
# @param [String] client_key
|
14
|
+
# the path OR actual client key
|
14
15
|
#
|
15
16
|
# @option options [String] :host
|
16
17
|
#
|
17
18
|
# @see {#signing_object} for options
|
18
19
|
def authentication_headers(client_name, client_key, options = {})
|
19
|
-
|
20
|
+
contents = File.exists?(client_key) ? File.read(client_key) : client_key.to_s
|
21
|
+
rsa_key = OpenSSL::PKey::RSA.new(contents)
|
22
|
+
|
20
23
|
headers = signing_object(client_name, options).sign(rsa_key).merge(host: options[:host])
|
21
24
|
headers.inject({}) { |memo, kv| memo["#{kv[0].to_s.upcase}"] = kv[1];memo }
|
22
25
|
end
|
@@ -57,7 +60,7 @@ module Ridley
|
|
57
60
|
def call(env)
|
58
61
|
signing_options = {
|
59
62
|
http_method: env[:method],
|
60
|
-
host: env[:url].host
|
63
|
+
host: "#{env[:url].host}:#{env[:url].port}",
|
61
64
|
path: env[:url].path,
|
62
65
|
body: env[:body] || ''
|
63
66
|
}
|
data/lib/ridley/mixin.rb
CHANGED
data/lib/ridley/resources.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require 'ridley/resources/data_bag_item_resource'
|
2
|
-
|
3
1
|
module Ridley
|
4
2
|
# @author Jamie Winsor <reset@riotgames.com>
|
5
3
|
class DataBagResource < Ridley::Resource
|
4
|
+
require_relative 'data_bag_item_resource'
|
5
|
+
|
6
6
|
set_resource_path "data"
|
7
7
|
represented_by Ridley::DataBagObject
|
8
8
|
|
data/lib/ridley/version.rb
CHANGED
data/ridley.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.email = ["reset@riotgames.com"]
|
7
7
|
s.description = %q{A reliable Chef API client with a clean syntax}
|
8
8
|
s.summary = s.description
|
9
|
-
s.homepage = "https://github.com/
|
9
|
+
s.homepage = "https://github.com/RiotGames/ridley"
|
10
10
|
s.license = "Apache 2.0"
|
11
11
|
|
12
12
|
s.files = `git ls-files`.split($\)
|
@@ -6,12 +6,29 @@ describe "Client API operations", type: "acceptance" do
|
|
6
6
|
let(:client_key) { fixtures_path.join('reset.pem').to_s }
|
7
7
|
let(:connection) { Ridley.new(server_url: server_url, client_name: client_name, client_key: client_key) }
|
8
8
|
|
9
|
+
subject { connection.cookbook }
|
10
|
+
|
11
|
+
describe "downloading a cookbook" do
|
12
|
+
before { subject.upload(fixtures_path.join('example_cookbook')) }
|
13
|
+
let(:name) { "example_cookbook" }
|
14
|
+
let(:version) { "0.1.0" }
|
15
|
+
let(:destination) { tmp_path.join("example_cookbook-0.1.0") }
|
16
|
+
|
17
|
+
context "when the cookbook of the name/version is found" do
|
18
|
+
before { subject.download(name, version, destination) }
|
19
|
+
|
20
|
+
it "downloads the cookbook to the destination" do
|
21
|
+
expect(File.exist?(destination.join("metadata.rb"))).to be_true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
9
26
|
describe "uploading a cookbook" do
|
10
27
|
let(:path) { fixtures_path.join("example_cookbook") }
|
11
28
|
|
12
29
|
it "uploads the entire contents of the cookbook in the given path" do
|
13
|
-
|
14
|
-
cookbook =
|
30
|
+
subject.upload(path)
|
31
|
+
cookbook = subject.find("example_cookbook", "0.1.0")
|
15
32
|
|
16
33
|
cookbook.attributes.should have(1).item
|
17
34
|
cookbook.definitions.should have(1).item
|
@@ -90,4 +90,14 @@ describe Ridley::CookbookObject do
|
|
90
90
|
subject.manifest.values.should each be_empty
|
91
91
|
end
|
92
92
|
end
|
93
|
+
|
94
|
+
describe "#reload" do
|
95
|
+
it "returns the updated self" do
|
96
|
+
other = subject.dup
|
97
|
+
other.version = "1.2.3"
|
98
|
+
resource.should_receive(:find).with(subject, subject.version).and_return(other)
|
99
|
+
|
100
|
+
expect(subject.reload).to eq(other)
|
101
|
+
end
|
102
|
+
end
|
93
103
|
end
|
@@ -18,6 +18,19 @@ describe Ridley::Middleware::ChefAuth do
|
|
18
18
|
}
|
19
19
|
subject.authentication_headers(client_name, client_key, options).should be_a(Hash)
|
20
20
|
end
|
21
|
+
|
22
|
+
context "when the :client_key is an actual key" do
|
23
|
+
let(:client_key) { File.read(fixtures_path.join("reset.pem")) }
|
24
|
+
|
25
|
+
it "returns a Hash of authentication headers" do
|
26
|
+
options = {
|
27
|
+
http_method: "GET",
|
28
|
+
host: "https://api.opscode.com",
|
29
|
+
path: "/something.file"
|
30
|
+
}
|
31
|
+
subject.authentication_headers(client_name, client_key, options).should be_a(Hash)
|
32
|
+
end
|
33
|
+
end
|
21
34
|
end
|
22
35
|
end
|
23
36
|
|
@@ -12,12 +12,6 @@ describe Ridley::CookbookResource do
|
|
12
12
|
let(:version) { "0.1.0" }
|
13
13
|
let(:destination) { tmp_path.join("example_cookbook-0.1.0").to_s }
|
14
14
|
|
15
|
-
context "when the cookbook of the name/version is found" do
|
16
|
-
it "downloads the cookbook to the destination" do
|
17
|
-
pending "can't test downloading until https://github.com/jkeiser/chef-zero/issues/5 is fixed"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
15
|
context "when the cookbook of the name/version is not found" do
|
22
16
|
before { subject.should_receive(:find).with(name, version).and_return(nil) }
|
23
17
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridley
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -434,7 +434,7 @@ files:
|
|
434
434
|
- spec/unit/ridley/resources/search_resource_spec.rb
|
435
435
|
- spec/unit/ridley/sandbox_uploader_spec.rb
|
436
436
|
- spec/unit/ridley_spec.rb
|
437
|
-
homepage: https://github.com/
|
437
|
+
homepage: https://github.com/RiotGames/ridley
|
438
438
|
licenses:
|
439
439
|
- Apache 2.0
|
440
440
|
post_install_message:
|
@@ -455,7 +455,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
455
455
|
version: '0'
|
456
456
|
segments:
|
457
457
|
- 0
|
458
|
-
hash:
|
458
|
+
hash: 1382072884355944447
|
459
459
|
requirements: []
|
460
460
|
rubyforge_project:
|
461
461
|
rubygems_version: 1.8.23
|