ridley 0.12.1 → 0.12.2
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/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
|