ridley 0.3.2 → 0.4.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.
- data/.rbenv-version +1 -0
- data/.travis.yml +1 -0
- data/Gemfile +46 -1
- data/Guardfile +0 -1
- data/README.md +15 -0
- data/Thorfile +18 -15
- data/bootstrappers/omnibus.erb +73 -0
- data/lib/ridley/bootstrapper/context.rb +172 -0
- data/lib/ridley/bootstrapper.rb +99 -0
- data/lib/ridley/chain_link.rb +25 -0
- data/lib/ridley/connection.rb +27 -5
- data/lib/ridley/errors.rb +6 -1
- data/lib/ridley/logging.rb +30 -0
- data/lib/ridley/resources/client.rb +3 -3
- data/lib/ridley/resources/cookbook.rb +3 -3
- data/lib/ridley/resources/data_bag.rb +8 -8
- data/lib/ridley/resources/environment.rb +3 -3
- data/lib/ridley/resources/node.rb +57 -3
- data/lib/ridley/resources/role.rb +3 -3
- data/lib/ridley/resources/sandbox.rb +3 -3
- data/lib/ridley/ssh/response.rb +13 -0
- data/lib/ridley/ssh/response_set.rb +51 -0
- data/lib/ridley/ssh/worker.rb +71 -0
- data/lib/ridley/ssh.rb +74 -0
- data/lib/ridley/version.rb +1 -1
- data/lib/ridley.rb +42 -17
- data/ridley.gemspec +6 -17
- data/spec/acceptance/bootstrapping_spec.rb +29 -0
- data/spec/spec_helper.rb +19 -3
- data/spec/unit/ridley/bootstrapper/context_spec.rb +119 -0
- data/spec/unit/ridley/bootstrapper_spec.rb +86 -0
- data/spec/unit/ridley/resources/node_spec.rb +41 -1
- data/spec/unit/ridley/ssh_spec.rb +31 -0
- data/spec/unit/ridley_spec.rb +0 -6
- metadata +42 -185
- data/lib/ridley/context.rb +0 -25
@@ -1,7 +1,7 @@
|
|
1
1
|
module Ridley
|
2
|
-
# @api private
|
3
2
|
# @author Jamie Winsor <jamie@vialstudios.com>
|
4
|
-
|
3
|
+
# @api private
|
4
|
+
class DBIChainLink
|
5
5
|
attr_reader :data_bag
|
6
6
|
attr_reader :connection
|
7
7
|
|
@@ -44,8 +44,8 @@ module Ridley
|
|
44
44
|
# @return [Ridley::DataBag]
|
45
45
|
def find!(connection, object)
|
46
46
|
chef_id = object.respond_to?(:chef_id) ? object.chef_id : object
|
47
|
-
|
48
|
-
new(connection, name:
|
47
|
+
connection.get("#{self.resource_path}/#{chef_id}")
|
48
|
+
new(connection, name: chef_id)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -56,7 +56,7 @@ module Ridley
|
|
56
56
|
validates_presence_of :name
|
57
57
|
|
58
58
|
def item
|
59
|
-
@
|
59
|
+
@dbi_link ||= DBIChainLink.new(self, connection)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -64,12 +64,12 @@ module Ridley
|
|
64
64
|
# Coerces instance functions into class functions on Ridley::DataBag. This coercion
|
65
65
|
# sends an instance of the including class along to the class function.
|
66
66
|
#
|
67
|
-
# @see Ridley::
|
67
|
+
# @see Ridley::ChainLink
|
68
68
|
#
|
69
|
-
# @return [Ridley::
|
69
|
+
# @return [Ridley::ChainLink]
|
70
70
|
# a context object to delegate instance functions to class functions on Ridley::DataBag
|
71
71
|
def data_bag
|
72
|
-
|
72
|
+
ChainLink.new(self, Ridley::DataBag)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -84,12 +84,12 @@ module Ridley
|
|
84
84
|
# Coerces instance functions into class functions on Ridley::Environment. This coercion
|
85
85
|
# sends an instance of the including class along to the class function.
|
86
86
|
#
|
87
|
-
# @see Ridley::
|
87
|
+
# @see Ridley::ChainLink
|
88
88
|
#
|
89
|
-
# @return [Ridley::
|
89
|
+
# @return [Ridley::ChainLink]
|
90
90
|
# a context object to delegate instance functions to class functions on Ridley::Environment
|
91
91
|
def environment
|
92
|
-
|
92
|
+
ChainLink.new(self, Ridley::Environment)
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
@@ -1,6 +1,51 @@
|
|
1
1
|
module Ridley
|
2
2
|
# @author Jamie Winsor <jamie@vialstudios.com>
|
3
3
|
class Node
|
4
|
+
class << self
|
5
|
+
# @overload bootstrap(connection, nodes, options = {})
|
6
|
+
# @param [Ridley::Connection] connection
|
7
|
+
# @param [Array<String>, String] nodes
|
8
|
+
# @option options [String] :ssh_user
|
9
|
+
# @option options [String] :ssh_password
|
10
|
+
# @option options [Array<String>, String] :ssh_keys
|
11
|
+
# @option options [Float] :ssh_timeout
|
12
|
+
# timeout value for SSH bootstrap (default: 1.5)
|
13
|
+
# @option options [String] :validator_client
|
14
|
+
# @option options [String] :validator_path
|
15
|
+
# filepath to the validator used to bootstrap the node (required)
|
16
|
+
# @option options [String] :bootstrap_proxy
|
17
|
+
# URL to a proxy server to bootstrap through (default: nil)
|
18
|
+
# @option options [String] :encrypted_data_bag_secret_path
|
19
|
+
# filepath on your host machine to your organizations encrypted data bag secret (default: nil)
|
20
|
+
# @option options [Hash] :hints
|
21
|
+
# a hash of Ohai hints to place on the bootstrapped node (default: Hash.new)
|
22
|
+
# @option options [Hash] :attributes
|
23
|
+
# a hash of attributes to use in the first Chef run (default: Hash.new)
|
24
|
+
# @option options [Array] :run_list
|
25
|
+
# an initial run list to bootstrap with (default: Array.new)
|
26
|
+
# @option options [String] :chef_version
|
27
|
+
# version of Chef to install on the node (default: {Ridley::CHEF_VERSION})
|
28
|
+
# @option options [String] :environment
|
29
|
+
# environment to join the node to (default: '_default')
|
30
|
+
# @option options [Boolean] :sudo
|
31
|
+
# bootstrap with sudo (default: true)
|
32
|
+
# @option options [String] :template
|
33
|
+
# bootstrap template to use (default: omnibus)
|
34
|
+
def bootstrap(connection, *args)
|
35
|
+
options = args.last.is_a?(Hash) ? args.pop : Hash.new
|
36
|
+
|
37
|
+
options[:server_url] ||= connection.server_url
|
38
|
+
options[:ssh_user] ||= connection.ssh[:user]
|
39
|
+
options[:ssh_password] ||= connection.ssh[:password]
|
40
|
+
options[:ssh_timeout] ||= connection.ssh[:timeout]
|
41
|
+
options[:validator_path] ||= connection.validator_path
|
42
|
+
options[:validator_client] ||= connection.validator_client
|
43
|
+
options[:encrypted_data_bag_secret_path] ||= connection.encrypted_data_bag_secret_path
|
44
|
+
|
45
|
+
Bootstrapper.new(args, options).run
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
4
49
|
include Ridley::Resource
|
5
50
|
|
6
51
|
set_chef_id "name"
|
@@ -132,18 +177,27 @@ module Ridley
|
|
132
177
|
def rackspace?
|
133
178
|
self.cloud_provider == "rackspace"
|
134
179
|
end
|
180
|
+
|
181
|
+
# Run Chef-Client on the instantiated node
|
182
|
+
#
|
183
|
+
# @return [SSH::Response]
|
184
|
+
def chef_client
|
185
|
+
Ridley::SSH.start(self, connection.ssh) do |ssh|
|
186
|
+
ssh.run("sudo chef-client").first
|
187
|
+
end
|
188
|
+
end
|
135
189
|
end
|
136
190
|
|
137
191
|
module DSL
|
138
192
|
# Coerces instance functions into class functions on Ridley::Node. This coercion
|
139
193
|
# sends an instance of the including class along to the class function.
|
140
194
|
#
|
141
|
-
# @see Ridley::
|
195
|
+
# @see Ridley::ChainLink
|
142
196
|
#
|
143
|
-
# @return [Ridley::
|
197
|
+
# @return [Ridley::ChainLink]
|
144
198
|
# a context object to delegate instance functions to class functions on Ridley::Node
|
145
199
|
def node
|
146
|
-
|
200
|
+
ChainLink.new(self, Ridley::Node)
|
147
201
|
end
|
148
202
|
end
|
149
203
|
end
|
@@ -68,12 +68,12 @@ module Ridley
|
|
68
68
|
# Coerces instance functions into class functions on Ridley::Role. This coercion
|
69
69
|
# sends an instance of the including class along to the class function.
|
70
70
|
#
|
71
|
-
# @see Ridley::
|
71
|
+
# @see Ridley::ChainLink
|
72
72
|
#
|
73
|
-
# @return [Ridley::
|
73
|
+
# @return [Ridley::ChainLink]
|
74
74
|
# a context object to delegate instance functions to class functions on Ridley::Role
|
75
75
|
def role
|
76
|
-
|
76
|
+
ChainLink.new(self, Ridley::Role)
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -111,12 +111,12 @@ module Ridley
|
|
111
111
|
# Coerces instance functions into class functions on Ridley::Sandbox. This coercion
|
112
112
|
# sends an instance of the including class along to the class function.
|
113
113
|
#
|
114
|
-
# @see Ridley::
|
114
|
+
# @see Ridley::ChainLink
|
115
115
|
#
|
116
|
-
# @return [Ridley::
|
116
|
+
# @return [Ridley::ChainLink]
|
117
117
|
# a context object to delegate instance functions to class functions on Ridley::Sandbox
|
118
118
|
def sandbox
|
119
|
-
|
119
|
+
ChainLink.new(self, Ridley::Sandbox)
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Ridley
|
2
|
+
class SSH
|
3
|
+
# @author Jamie Winsor <jamie@vialstudios.com>
|
4
|
+
class Response < Struct.new(:stdout, :stderr, :exit_code, :exit_signal)
|
5
|
+
# Return true if the response was not successful
|
6
|
+
#
|
7
|
+
# @return [Boolean]
|
8
|
+
def error?
|
9
|
+
self.exit_code != 0
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Ridley
|
2
|
+
class SSH
|
3
|
+
# @author Jamie Winsor <jamie@vialstudios.com>
|
4
|
+
class ResponseSet
|
5
|
+
# @return [Array<SSH::Response>]
|
6
|
+
attr_reader :oks
|
7
|
+
# @return [Array<SSH::Response>]
|
8
|
+
attr_reader :errors
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@oks = Array.new
|
12
|
+
@errors = Array.new
|
13
|
+
end
|
14
|
+
|
15
|
+
# Add an "OK" response to the ResponseSet
|
16
|
+
#
|
17
|
+
# @param [SSH::Response] response
|
18
|
+
def add_ok(response)
|
19
|
+
self.oks << response
|
20
|
+
end
|
21
|
+
|
22
|
+
# Add an "Error" response to the ResponseSet
|
23
|
+
#
|
24
|
+
# @param [SSH::Response] response
|
25
|
+
def add_error(response)
|
26
|
+
self.errors << response
|
27
|
+
end
|
28
|
+
|
29
|
+
# Return true if the response set contains any errors
|
30
|
+
#
|
31
|
+
# @return [Boolean]
|
32
|
+
def has_errors?
|
33
|
+
self.errors.any?
|
34
|
+
end
|
35
|
+
|
36
|
+
# Return one of the responses
|
37
|
+
#
|
38
|
+
# @return [SSH::Response]
|
39
|
+
def first
|
40
|
+
(self.oks + self.errors).first
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns how many responses are in the set
|
44
|
+
#
|
45
|
+
# @return [Integer]
|
46
|
+
def length
|
47
|
+
self.oks.length + self.errors.length
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Ridley
|
2
|
+
class SSH
|
3
|
+
# @author Jamie Winsor <jamie@vialstudios.com>
|
4
|
+
# @api private
|
5
|
+
class Worker
|
6
|
+
include Celluloid
|
7
|
+
include Celluloid::Logger
|
8
|
+
|
9
|
+
# @param [Hash] options
|
10
|
+
def initialize(options = {})
|
11
|
+
@options = options
|
12
|
+
@user = options.fetch(:user)
|
13
|
+
end
|
14
|
+
|
15
|
+
# @param [String] host
|
16
|
+
# @param [String] command
|
17
|
+
#
|
18
|
+
# @return [Array]
|
19
|
+
def run(host, command)
|
20
|
+
response = Response.new("", "")
|
21
|
+
debug "Running SSH command: '#{command}' on: '#{host}' as: '#{user}'"
|
22
|
+
|
23
|
+
Net::SSH.start(host, user, options) do |ssh|
|
24
|
+
ssh.open_channel do |channel|
|
25
|
+
channel.exec(command) do |ch, success|
|
26
|
+
unless success
|
27
|
+
raise "FAILURE: could not execute command"
|
28
|
+
end
|
29
|
+
|
30
|
+
channel.on_data do |ch, data|
|
31
|
+
response.stdout += data
|
32
|
+
end
|
33
|
+
|
34
|
+
channel.on_extended_data do |ch, type, data|
|
35
|
+
response.stderr += data
|
36
|
+
end
|
37
|
+
|
38
|
+
channel.on_request("exit-status") do |ch, data|
|
39
|
+
response.exit_code = data.read_long
|
40
|
+
end
|
41
|
+
|
42
|
+
channel.on_request("exit-signal") do |ch, data|
|
43
|
+
response.exit_signal = data.read_string
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
ssh.loop
|
49
|
+
end
|
50
|
+
|
51
|
+
case response.exit_code
|
52
|
+
when 0
|
53
|
+
debug "Successfully ran SSH command: '#{command}' on: '#{host}' as: '#{user}' and it succeeded"
|
54
|
+
[ :ok, response ]
|
55
|
+
else
|
56
|
+
debug "Successfully ran SSH command: '#{command}' on: '#{host}' as: '#{user}' but it failed"
|
57
|
+
[ :error, response ]
|
58
|
+
end
|
59
|
+
rescue => e
|
60
|
+
debug "Failed to run SSH command: '#{command}' on: '#{host}' as: '#{user}'"
|
61
|
+
[ :error, e.message ]
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
attr_reader :runner
|
67
|
+
attr_reader :user
|
68
|
+
attr_reader :options
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/ridley/ssh.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'net/ssh'
|
2
|
+
|
3
|
+
module Ridley
|
4
|
+
# @author Jamie Winsor <jamie@vialstudios.com>
|
5
|
+
class SSH
|
6
|
+
autoload :Response, 'ridley/ssh/response'
|
7
|
+
autoload :ResponseSet, 'ridley/ssh/response_set'
|
8
|
+
autoload :Worker, 'ridley/ssh/worker'
|
9
|
+
|
10
|
+
class << self
|
11
|
+
# @param [Ridley::Node, Array<Ridley::Node>] nodes
|
12
|
+
# @param [Hash] options
|
13
|
+
def start(nodes, options = {}, &block)
|
14
|
+
runner = new(nodes, options)
|
15
|
+
result = yield runner
|
16
|
+
runner.terminate
|
17
|
+
|
18
|
+
result
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
include Celluloid
|
23
|
+
include Celluloid::Logger
|
24
|
+
|
25
|
+
attr_reader :nodes
|
26
|
+
attr_reader :options
|
27
|
+
|
28
|
+
# @param [Ridley::Node, Array<Ridley::Node>] nodes
|
29
|
+
# @param [Hash] options
|
30
|
+
# @see Net::SSH
|
31
|
+
def initialize(nodes, options = {})
|
32
|
+
@nodes = nodes
|
33
|
+
@options = options
|
34
|
+
|
35
|
+
self.options[:timeout] ||= 1.5
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Array<SSH::Worker>]
|
39
|
+
def workers
|
40
|
+
@workers ||= Array(nodes).collect do |node|
|
41
|
+
Worker.new_link(current_actor, node.public_hostname, options)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# @param [String] command
|
46
|
+
#
|
47
|
+
# @return [Array]
|
48
|
+
def run(command)
|
49
|
+
workers.collect { |worker| worker.async.run(command) }
|
50
|
+
|
51
|
+
ResponseSet.new.tap do |responses|
|
52
|
+
until responses.length == workers.length
|
53
|
+
receive { |msg|
|
54
|
+
status, response = msg
|
55
|
+
|
56
|
+
case status
|
57
|
+
when :ok
|
58
|
+
responses.add_ok(response)
|
59
|
+
when :error
|
60
|
+
responses.add_error(response)
|
61
|
+
else
|
62
|
+
error "SSH Failure: #{command}. terminating..."
|
63
|
+
terminate
|
64
|
+
end
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def finalize
|
71
|
+
workers.collect(&:terminate)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/ridley/version.rb
CHANGED
data/lib/ridley.rb
CHANGED
@@ -1,37 +1,48 @@
|
|
1
|
+
require 'chozo'
|
2
|
+
require 'active_support/core_ext'
|
3
|
+
require 'celluloid'
|
1
4
|
require 'faraday'
|
2
5
|
require 'addressable/uri'
|
3
|
-
require 'yajl'
|
4
6
|
require 'multi_json'
|
5
7
|
require 'active_model'
|
6
8
|
require 'active_support/inflector'
|
7
|
-
require 'active_support/core_ext'
|
8
9
|
require 'forwardable'
|
9
|
-
require 'set'
|
10
10
|
require 'thread'
|
11
|
-
|
11
|
+
|
12
|
+
if jruby?
|
13
|
+
require 'json/pure'
|
14
|
+
else
|
15
|
+
require 'json/ext'
|
16
|
+
end
|
12
17
|
|
13
18
|
require 'ridley/version'
|
14
19
|
require 'ridley/errors'
|
15
20
|
|
21
|
+
JSON.create_id = nil
|
22
|
+
|
16
23
|
# @author Jamie Winsor <jamie@vialstudios.com>
|
17
24
|
module Ridley
|
18
|
-
CHEF_VERSION = '10.
|
25
|
+
CHEF_VERSION = '10.16.2'.freeze
|
19
26
|
|
20
|
-
autoload :
|
27
|
+
autoload :Bootstrapper, 'ridley/bootstrapper'
|
28
|
+
autoload :Client, 'ridley/resources/client'
|
21
29
|
autoload :Connection, 'ridley/connection'
|
30
|
+
autoload :ChainLink, 'ridley/chain_link'
|
31
|
+
autoload :Cookbook, 'ridley/resources/cookbook'
|
32
|
+
autoload :DataBag, 'ridley/resources/data_bag'
|
33
|
+
autoload :DataBagItem, 'ridley/resources/data_bag_item'
|
22
34
|
autoload :DSL, 'ridley/dsl'
|
23
|
-
autoload :Context, 'ridley/context'
|
24
|
-
autoload :Resource, 'ridley/resource'
|
25
35
|
autoload :Environment, 'ridley/resources/environment'
|
26
|
-
autoload :
|
27
|
-
autoload :Client, 'ridley/resources/client'
|
36
|
+
autoload :Logging, 'ridley/logging'
|
28
37
|
autoload :Node, 'ridley/resources/node'
|
29
|
-
autoload :
|
30
|
-
autoload :
|
31
|
-
autoload :Cookbook, 'ridley/resources/cookbook'
|
38
|
+
autoload :Resource, 'ridley/resource'
|
39
|
+
autoload :Role, 'ridley/resources/role'
|
32
40
|
autoload :Search, 'ridley/resources/search'
|
41
|
+
autoload :SSH, 'ridley/ssh'
|
33
42
|
|
34
43
|
class << self
|
44
|
+
attr_accessor :logger
|
45
|
+
|
35
46
|
def connection(*args)
|
36
47
|
Connection.new(*args)
|
37
48
|
end
|
@@ -40,12 +51,26 @@ module Ridley
|
|
40
51
|
Connection.sync(*args, &block)
|
41
52
|
end
|
42
53
|
|
43
|
-
# @return [
|
44
|
-
def
|
45
|
-
Ridley::
|
54
|
+
# @return [Logger]
|
55
|
+
def logger
|
56
|
+
Ridley::Logging.logger
|
57
|
+
end
|
58
|
+
alias_method :log, :logger
|
59
|
+
|
60
|
+
# @param [Logger, nil] obj
|
61
|
+
#
|
62
|
+
# @return [Logger]
|
63
|
+
def set_logger(obj)
|
64
|
+
Ridley::Logging.set_logger(obj)
|
65
|
+
end
|
66
|
+
|
67
|
+
# @return [Pathname]
|
68
|
+
def root
|
69
|
+
@root ||= Pathname.new(File.expand_path('../', File.dirname(__FILE__)))
|
46
70
|
end
|
47
|
-
alias_method :logger, :log
|
48
71
|
end
|
49
72
|
end
|
50
73
|
|
74
|
+
Celluloid.logger = Ridley.logger
|
75
|
+
|
51
76
|
require 'ridley/middleware'
|
data/ridley.gemspec
CHANGED
@@ -16,27 +16,16 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.version = Ridley::VERSION
|
17
17
|
s.required_ruby_version = ">= 1.9.1"
|
18
18
|
|
19
|
-
s.add_runtime_dependency '
|
20
|
-
s.add_runtime_dependency '
|
19
|
+
s.add_runtime_dependency 'json', '>= 1.5.0'
|
20
|
+
s.add_runtime_dependency 'multi_json', '>= 1.0.4'
|
21
|
+
s.add_runtime_dependency 'chozo', '>= 0.2.2'
|
21
22
|
s.add_runtime_dependency 'mixlib-log'
|
22
23
|
s.add_runtime_dependency 'mixlib-authentication'
|
23
24
|
s.add_runtime_dependency 'addressable'
|
24
25
|
s.add_runtime_dependency 'faraday'
|
25
|
-
s.add_runtime_dependency 'multi_json', '>= 1.0.4'
|
26
26
|
s.add_runtime_dependency 'activemodel', '>= 3.2.0'
|
27
27
|
s.add_runtime_dependency 'activesupport', '>= 3.2.0'
|
28
|
-
|
29
|
-
s.
|
30
|
-
s.
|
31
|
-
s.add_development_dependency 'fuubar'
|
32
|
-
s.add_development_dependency 'spork'
|
33
|
-
s.add_development_dependency 'yard'
|
34
|
-
s.add_development_dependency 'guard'
|
35
|
-
s.add_development_dependency 'guard-rspec'
|
36
|
-
s.add_development_dependency 'guard-spork'
|
37
|
-
s.add_development_dependency 'guard-yard'
|
38
|
-
s.add_development_dependency 'coolline'
|
39
|
-
s.add_development_dependency 'redcarpet'
|
40
|
-
s.add_development_dependency 'json_spec'
|
41
|
-
s.add_development_dependency 'webmock'
|
28
|
+
s.add_runtime_dependency 'celluloid'
|
29
|
+
s.add_runtime_dependency 'net-ssh'
|
30
|
+
s.add_runtime_dependency 'erubis'
|
42
31
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Bootstrapping a node", type: "acceptance" do
|
4
|
+
let(:server_url) { "https://api.opscode.com" }
|
5
|
+
let(:client_name) { "reset" }
|
6
|
+
let(:client_key) { "/Users/reset/.chef/reset.pem" }
|
7
|
+
let(:organization) { "vialstudios" }
|
8
|
+
|
9
|
+
let(:connection) do
|
10
|
+
Ridley.connection(
|
11
|
+
server_url: server_url,
|
12
|
+
client_name: client_name,
|
13
|
+
client_key: client_key,
|
14
|
+
organization: organization,
|
15
|
+
validator_client: "vialstudios-validator",
|
16
|
+
validator_path: "/Users/reset/.chef/vialstudios-validator.pem",
|
17
|
+
ssh: {
|
18
|
+
user: "vagrant",
|
19
|
+
password: "vagrant"
|
20
|
+
}
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns an array of response objects" do
|
25
|
+
pending
|
26
|
+
|
27
|
+
connection.node.bootstrap("33.33.33.10").should_not have_errors
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler'
|
3
|
-
require '
|
3
|
+
require 'chozo'
|
4
4
|
|
5
|
-
|
5
|
+
def setup_rspec
|
6
6
|
require 'rspec'
|
7
7
|
require 'json_spec'
|
8
8
|
require 'webmock/rspec'
|
@@ -17,9 +17,25 @@ Spork.prefork do
|
|
17
17
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
18
18
|
config.filter_run focus: true
|
19
19
|
config.run_all_when_everything_filtered = true
|
20
|
+
|
21
|
+
config.before(:all) do
|
22
|
+
Ridley.logger = nil
|
23
|
+
Celluloid.logger = nil
|
24
|
+
end
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
23
|
-
|
28
|
+
if mri? && ENV['CI'] != 'true'
|
29
|
+
require 'spork'
|
30
|
+
|
31
|
+
Spork.prefork do
|
32
|
+
setup_rspec
|
33
|
+
end
|
34
|
+
|
35
|
+
Spork.each_run do
|
36
|
+
require 'ridley'
|
37
|
+
end
|
38
|
+
else
|
24
39
|
require 'ridley'
|
40
|
+
setup_rspec
|
25
41
|
end
|