ridley 1.7.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2a78cdade0a4199cf9793a2f4eca28e61baf9e7
4
- data.tar.gz: 9dd018fd3730ce690dad3be7eabb725621bb5ca3
3
+ metadata.gz: 1502e3edb782cbe22be2729744d1272bb81c9863
4
+ data.tar.gz: 26860b2a9731e88a3077d58ae1b46257c6055157
5
5
  SHA512:
6
- metadata.gz: a23d46b865752707d88c46f48fcde018fe0f3643251d07b414f9029ba6c536d4c46e64ddd7a193b53058a034669ef2515cf67e4a27cd7bdbccbce8f7e3476e2a
7
- data.tar.gz: 1c54de6e0a88d546024e42de38b0cfb0a633de0b1e03f3515fc75f8dd357c6cc40c451b105da999c01323561072f296dd04ad3f1a63cdb70d635ac3b28d5fb6e
6
+ metadata.gz: 13bae8f8d79d3baeea469c9cb082f143a6a6bbaf976cd61b8c936e51fc5603ae59dcc09fa17dbe696f894c3ca384fe3a064cdb57997ca4061f3ec6a043864b79
7
+ data.tar.gz: f536df4f30fd045955a06108adc8df2284fb4b6425d4fabc054bf262e2e8f8d06f5b9025cc8e1b25278bfe0daa199dc41fe2b3459d05503b5a8cb340d62d9f57
@@ -1,3 +1,8 @@
1
+ # 2.0.0
2
+
3
+ * [#227](https://github.com/RiotGames/ridley/pull/227) HostCommander and HostConnector code has been moved into its own gem - [found here](https://github.com/RiotGames/ridley-connectors)
4
+ * As discussed by @jtimberman in [#225](https://github.com/RiotGames/ridley/issues/225) it makes sense to move this code based on Ridley's main purpose, and gives a decent performance boost to users who don't need this extra functionality.
5
+
1
6
  # 1.7.1
2
7
 
3
8
  * [#224](https://github.com/RiotGames/ridley/pull/224) Connection#stream will now return true/false on whether it copied the file that was streamed.
data/README.md CHANGED
@@ -337,61 +337,6 @@ production_env.set_override_attribute("my_app.proxy.enabled", false)
337
337
  production_env.save #=> true
338
338
  ```
339
339
 
340
- Node Resource
341
- -------------
342
-
343
- ### Bootstrapping Unix nodes
344
-
345
- ```ruby
346
- ridley = Ridley.new(
347
- server_url: "https://api.opscode.com",
348
- organization: "vialstudios",
349
- validator_client: "vialstudios-validator",
350
- validator_path: "/Users/reset/.chef/vialstudios-validator.pem",
351
- ssh: {
352
- user: "vagrant",
353
- password: "vagrant"
354
- }
355
- )
356
-
357
- ridley.node.bootstrap("33.33.33.10", "33.33.33.11")
358
- ```
359
-
360
- ### Bootstrapping Windows Nodes
361
-
362
- Windows Nodes are bootstrapped using a combination of WinRM, Batch, and PowerShell. You will probably need to tweak some settings on your Windows servers to ensure the commands are successful.
363
-
364
- #### WinRM Settings
365
-
366
- 1. Enable WinRM: `winrm quickconfig` and say Yes.
367
- 2. Set some WinRM settings to ensure that you don't get 401 Unauthorized responses and 500 Responses because of timeouts.
368
-
369
- ```
370
- winrm set winrm/config/service/auth @{Basic="true"}
371
- winrm set winrm/config/service @{AllowUnencrypted="true"}
372
- winrm set winrm/config/service @{EnumerationTimeoutms="600000"}
373
- winrm set winrm/config @{MaxTimeoutms="600000"}
374
- winrm set winrm/config/client @{TrustedHosts="*"}
375
- ```
376
-
377
- #### PowerShell Settings
378
-
379
- 1. You should also configure your PowerShell profile, so that PowerShell commands have a more lenient timeout period.
380
-
381
- ```
382
- mkdir C:\Users\my_user\Documents\WindowsPowerShell
383
- echo "$PSSessionOption = New-PSSessionOption -OpenTimeout 0 -CancelTimeout 0 -IdleTimeout 0 -OperationTimeout 0" > C:\Users\my_user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
384
- ```
385
-
386
- Verify the PowerShell settings by opening up the PowerShell Console and entering `$PSSessionOption` and ensure those values are set, and that there are no errors output.
387
-
388
- The following links offer some information about configuring a machine's PowerShell settings:
389
- - [PowerShell Profiles](http://technet.microsoft.com/en-us/library/ee692764.aspx)
390
- - [The $PSSessionOptions Preference Variable](http://technet.microsoft.com/library/hh847796.aspx)
391
- - [Creating a new PSSessionOption](http://technet.microsoft.com/en-us/library/hh849703.aspx)
392
-
393
- You may also want to tweak your Windows boxes a bit more ex: turning UAC off, turning off the Windows Firewall.
394
-
395
340
  Role Resource
396
341
  -------------
397
342
 
@@ -71,8 +71,6 @@ module Ridley
71
71
  require_relative 'ridley/client'
72
72
  require_relative 'ridley/connection'
73
73
  require_relative 'ridley/chef'
74
- require_relative 'ridley/host_commander'
75
- require_relative 'ridley/host_connector'
76
74
  require_relative 'ridley/middleware'
77
75
  require_relative 'ridley/resource'
78
76
  require_relative 'ridley/resources'
@@ -124,20 +124,6 @@ module Ridley
124
124
  self.cloud_provider == "rackspace"
125
125
  end
126
126
 
127
- # Executes a Chef run on the node
128
- #
129
- # @return [HostConnector::Response]
130
- def chef_run
131
- resource.chef_run(self.public_hostname)
132
- end
133
-
134
- # Puts the configured encrypted data bag secret on the node
135
- #
136
- # @return [HostConnector::Response]
137
- def put_secret
138
- resource.put_secret(self.public_hostname)
139
- end
140
-
141
127
  # Merges the instaniated nodes data with the given data and updates
142
128
  # the remote with the merged results
143
129
  #
@@ -86,8 +86,6 @@ module Ridley
86
86
  attr_accessor :validator_client
87
87
  attr_accessor :validator_path
88
88
  attr_accessor :encrypted_data_bag_secret_path
89
- attr_accessor :ssh
90
- attr_accessor :winrm
91
89
  attr_accessor :chef_version
92
90
 
93
91
  # @option options [String] :server_url
@@ -99,16 +97,6 @@ module Ridley
99
97
  # @option options [String] :validator_client (nil)
100
98
  # @option options [String] :validator_path (nil)
101
99
  # @option options [String] :encrypted_data_bag_secret_path (nil)
102
- # @option options [Hash] :ssh (Hash.new)
103
- # * :user (String) a shell user that will login to each node and perform the bootstrap command on (required)
104
- # * :password (String) the password for the shell user that will perform the bootstrap
105
- # * :keys (Array, String) an array of keys (or a single key) to authenticate the ssh user with instead of a password
106
- # * :timeout (Float) [5.0] timeout value for SSH bootstrap
107
- # * :sudo (Boolean) [true] bootstrap with sudo
108
- # @option options [Hash] :winrm (Hash.new)
109
- # * :user (String) a user that will login to each node and perform the bootstrap command on (required)
110
- # * :password (String) the password for the user that will perform the bootstrap
111
- # * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
112
100
  # @option options [String] :chef_version
113
101
  # the version of Chef to use when bootstrapping
114
102
  # @option options [Hash] :params
@@ -128,14 +116,10 @@ module Ridley
128
116
  # a file path pointing to a readable client key, or is a string containing a valid key
129
117
  def initialize(options = {})
130
118
  @options = options.reverse_merge(
131
- ssh: Hash.new,
132
- winrm: Hash.new,
133
119
  pool_size: 4
134
120
  ).deep_symbolize_keys
135
121
  self.class.validate_options(@options)
136
122
 
137
- @ssh = @options[:ssh]
138
- @winrm = @options[:winrm]
139
123
  @chef_version = @options[:chef_version]
140
124
  @validator_client = @options[:validator_client]
141
125
 
@@ -5,165 +5,11 @@ module Ridley
5
5
  set_resource_path "nodes"
6
6
  represented_by Ridley::NodeObject
7
7
 
8
- attr_reader :server_url
9
- attr_reader :validator_path
10
- attr_reader :validator_client
11
- attr_reader :encrypted_data_bag_secret
12
- attr_reader :ssh
13
- attr_reader :winrm
14
- attr_reader :chef_version
15
-
16
- finalizer :finalize_callback
17
-
18
8
  # @param [Celluloid::Registry] connection_registry
19
- #
20
- # @option options [String] :server_url
21
- # URL to the Chef API
22
- # @option options [Hash] ssh
23
- # * :user (String) a shell user that will login to each node and perform the bootstrap command on
24
- # * :password (String) the password for the shell user that will perform the bootstrap
25
- # * :keys (Array, String) an array of keys (or a single key) to authenticate the ssh user with instead of a password
26
- # * :timeout (Float) [5.0] timeout value for SSH bootstrap
27
- # @option options [Hash] :winrm
28
- # * :user (String) a user that will login to each node and perform the bootstrap command on
29
- # * :password (String) the password for the user that will perform the bootstrap
30
- # * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on
31
- # @option options [String] :validator_client
32
- # @option options [String] :validator_path
33
- # filepath to the validator used to bootstrap the node
34
- # @option options [String] :encrypted_data_bag_secret
35
- # your organizations encrypted data bag secret
36
- # @option options [String] :chef_version
37
- # version of Chef to install on the node (default: nil)
38
9
  def initialize(connection_registry, options = {})
39
10
  super(connection_registry)
40
- @server_url = options[:server_url]
41
- @validator_path = options[:validator_path]
42
- @validator_client = options[:validator_client]
43
- @encrypted_data_bag_secret = options[:encrypted_data_bag_secret]
44
- @ssh = options[:ssh]
45
- @winrm = options[:winrm]
46
- @chef_version = options[:chef_version]
47
- @host_commander = HostCommander.new_link
48
11
  end
49
12
 
50
- # @param [String] host
51
- #
52
- # @option options [Hash] ssh
53
- # * :user (String) a shell user that will login to each node and perform the bootstrap command on (required)
54
- # * :password (String) the password for the shell user that will perform the bootstrap
55
- # * :keys (Array, String) an array of keys (or a single key) to authenticate the ssh user with instead of a password
56
- # * :timeout (Float) [5.0] timeout value for SSH bootstrap
57
- # @option options [Hash] :winrm
58
- # * :user (String) a user that will login to each node and perform the bootstrap command on (required)
59
- # * :password (String) the password for the user that will perform the bootstrap
60
- # * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
61
- # @option options [String] :validator_client
62
- # @option options [String] :validator_path
63
- # filepath to the validator used to bootstrap the node (required)
64
- # @option options [String] :bootstrap_proxy
65
- # URL to a proxy server to bootstrap through (default: nil)
66
- # @option options [String] :encrypted_data_bag_secret_path
67
- # filepath on your host machine to your organizations encrypted data bag secret (default: nil)
68
- # @option options [Hash] :hints
69
- # a hash of Ohai hints to place on the bootstrapped node (default: Hash.new)
70
- # @option options [Hash] :attributes
71
- # a hash of attributes to use in the first Chef run (default: Hash.new)
72
- # @option options [Array] :run_list
73
- # an initial run list to bootstrap with (default: Array.new)
74
- # @option options [String] :chef_version
75
- # version of Chef to install on the node (default: nil)
76
- # @option options [String] :environment
77
- # environment to join the node to (default: '_default')
78
- # @option options [Boolean] :sudo
79
- # bootstrap with sudo (default: true)
80
- # @option options [String] :template
81
- # bootstrap template to use (default: omnibus)
82
- #
83
- # @return [HostConnector::Response]
84
- def bootstrap(host, options = {})
85
- options = options.reverse_merge(
86
- server_url: server_url,
87
- validator_path: validator_path,
88
- validator_client: validator_client,
89
- encrypted_data_bag_secret: encrypted_data_bag_secret,
90
- ssh: ssh,
91
- winrm: winrm,
92
- chef_version: chef_version
93
- )
94
-
95
- host_commander.bootstrap(host, options)
96
- end
97
-
98
- # Executes a Chef run using the best worker available for the given
99
- # host.
100
- #
101
- # @param [String] host
102
- #
103
- # @return [HostConnector::Response]
104
- def chef_run(host)
105
- host_commander.chef_client(host, ssh: ssh, winrm: winrm)
106
- rescue Errors::HostConnectionError => ex
107
- abort(ex)
108
- end
109
-
110
- # Puts a secret on the host using the best worker available for
111
- # the given host.
112
- #
113
- # @param [String] host
114
- #
115
- # @return [HostConnector::Response]
116
- def put_secret(host)
117
- host_commander.put_secret(host, encrypted_data_bag_secret, ssh: ssh, winrm: winrm)
118
- end
119
-
120
- # Executes an arbitrary ruby script using the best worker available
121
- # for the given host.
122
- #
123
- # @param [String] host
124
- # @param [Array<String>] command_lines
125
- #
126
- # @return [HostConnector::Response]
127
- def ruby_script(host, command_lines)
128
- host_commander.ruby_script(host, command_lines, ssh: ssh, winrm: winrm)
129
- end
130
-
131
- # Executes the given command on a node using the best worker
132
- # available for the given host.
133
- #
134
- # @param [String] host
135
- # @param [String] command
136
- #
137
- # @return [HostConnector::Response]
138
- def run(host, command)
139
- host_commander.run(host, command, ssh: ssh, winrm: winrm)
140
- end
141
- alias_method :execute_command, :run
142
-
143
- # Executes the given command on a node using a platform specific
144
- # command.
145
- #
146
- # @param [String] host
147
- # @param [Hash] commands
148
- #
149
- # @example
150
- # platform_specific_run("host.example.com", linux: "hostname -f", windows: "echo %COMPUTERNAME%")
151
- #
152
- # @return [HostConnector::Response]
153
- def platform_specific_run(host, commands)
154
- case (type = host_commander.connector_for(host, ssh: ssh, winrm: winrm))
155
- when HostConnector::SSH
156
- raise Errors::CommandNotProvided.new(:ssh) unless commands[:ssh] and !commands[:ssh].empty?
157
- run(host, commands[:ssh])
158
- when HostConnector::WinRM
159
- raise Errors::CommandNotProvided.new(:winrm) unless commands[:winrm] and !commands[:winrm].empty?
160
- run(host, commands[:winrm])
161
- else
162
- raise RuntimeError, "#{type.class.to_s} is not a supported connector for #{self.class}##{__method__}"
163
- end
164
- end
165
- alias_method :execute_platform_specific_command, :platform_specific_run
166
-
167
13
  # Merges the given data with the the data of the target node on the remote
168
14
  #
169
15
  # @param [Ridley::NodeResource, String] target
@@ -185,40 +31,5 @@ module Ridley
185
31
 
186
32
  update(node.merge_data(options))
187
33
  end
188
-
189
- # Uninstall Chef from a node
190
- #
191
- # @param [String] host
192
- # the host to perform the action on
193
- #
194
- # @option options [Boolena] :skip_chef (false)
195
- # skip removal of the Chef package and the contents of the installation
196
- # directory. Setting this to true will only remove any data and configurations
197
- # generated by running Chef client.
198
- # @option options [Hash] :ssh
199
- # * :user (String) a shell user that will login to each node and perform the bootstrap command on
200
- # * :password (String) the password for the shell user that will perform the bootstrap
201
- # * :keys (Array, String) an array of key(s) to authenticate the ssh user with instead of a password
202
- # * :timeout (Float) timeout value for SSH bootstrap (5.0)
203
- # * :sudo (Boolean) run as sudo (true)
204
- # @option options [Hash] :winrm
205
- # * :user (String) a user that will login to each node and perform the bootstrap command on
206
- # * :password (String) the password for the user that will perform the bootstrap (required)
207
- # * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
208
- #
209
- # @return [HostConnector::Response]
210
- def uninstall_chef(host, options = {})
211
- options = options.reverse_merge(ssh: ssh, winrm: winrm)
212
- host_commander.uninstall_chef(host, options)
213
- end
214
-
215
- private
216
-
217
- # @return [Ridley::HostCommander]
218
- attr_reader :host_commander
219
-
220
- def finalize_callback
221
- @host_commander.terminate if @host_commander && @host_commander.alive?
222
- end
223
34
  end
224
35
  end
@@ -1,3 +1,3 @@
1
1
  module Ridley
2
- VERSION = "1.7.1"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -31,10 +31,8 @@ Gem::Specification.new do |s|
31
31
  s.add_dependency 'json', '>= 1.7.7'
32
32
  s.add_dependency 'mixlib-authentication', '>= 1.3.0'
33
33
  s.add_dependency 'net-http-persistent', '>= 2.8'
34
- s.add_dependency 'net-ssh'
35
34
  s.add_dependency 'retryable'
36
35
  s.add_dependency 'solve', '>= 0.4.4'
37
- s.add_dependency 'winrm', '~> 1.1.0'
38
36
 
39
37
  s.add_development_dependency 'buff-ruby_engine', '~> 0.1'
40
38
  end
@@ -241,22 +241,6 @@ describe Ridley::NodeObject do
241
241
  end
242
242
  end
243
243
 
244
- describe "#chef_run" do
245
- it "sends the message #chef_run to the resource with the public_hostname of this instance" do
246
- resource.should_receive(:chef_run).with(instance.public_hostname)
247
-
248
- subject.chef_run
249
- end
250
- end
251
-
252
- describe "#put_secret" do
253
- it "sends the message #put_secret to the resource with the public_hostname of this instance" do
254
- resource.should_receive(:put_secret).with(instance.public_hostname)
255
-
256
- subject.put_secret
257
- end
258
- end
259
-
260
244
  describe "#merge_data" do
261
245
  before(:each) { subject.name = "reset.riotgames.com" }
262
246
 
@@ -6,8 +6,6 @@ describe Ridley::Client do
6
6
  let(:client_key) { fixtures_path.join("reset.pem").to_s }
7
7
  let(:organization) { "vialstudios" }
8
8
  let(:encrypted_data_bag_secret_path) { fixtures_path.join("reset.pem").to_s }
9
- let(:ssh) { {user: "reset", password: "password1", port: "222"} }
10
- let(:winrm) { {user: "reset", password: "password2", port: "5986"} }
11
9
  let(:chef_version) { "10.24.0-01" }
12
10
 
13
11
  let(:config) do
@@ -17,8 +15,6 @@ describe Ridley::Client do
17
15
  client_key: client_key,
18
16
  organization: organization,
19
17
  encrypted_data_bag_secret_path: encrypted_data_bag_secret_path,
20
- ssh: ssh,
21
- winrm: winrm,
22
18
  chef_version: chef_version
23
19
  }
24
20
  end
@@ -107,14 +103,6 @@ describe Ridley::Client do
107
103
  described_class.new(config).client_key.should == key
108
104
  end
109
105
 
110
- it "assigns a 'ssh' attribute from the given 'ssh' option" do
111
- described_class.new(config).ssh.should eql({user: "reset", password: "password1", port: "222"})
112
- end
113
-
114
- it "assigns a 'winrm' attribute from the given 'winrm' option" do
115
- described_class.new(config).winrm.should eql({user: "reset", password: "password2", port: "5986"})
116
- end
117
-
118
106
  it "assigns a 'chef_version' attribute from the given 'chef_version' option" do
119
107
  described_class.new(config).chef_version.should eql("10.24.0-01")
120
108
  end
@@ -1,143 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Ridley::NodeResource do
4
- let(:host) { "33.33.33.10" }
5
- let(:worker) { double('worker', alive?: true, terminate: nil) }
6
- let(:host_commander) { double('host-commander') }
7
- let(:options) do
8
- {
9
- server_url: double('server_url'),
10
- validator_path: double('validator_path'),
11
- validator_client: double('validator_client'),
12
- encrypted_data_bag_secret: double('encrypted_data_bag_secret'),
13
- ssh: double('ssh'),
14
- winrm: double('winrm'),
15
- chef_version: double('chef_version')
16
- }
17
- end
18
4
  let(:instance) do
19
- inst = described_class.new(double, options)
20
- inst.stub(connection: chef_zero_connection, host_commander: host_commander)
5
+ inst = described_class.new(double)
6
+ inst.stub(connection: chef_zero_connection)
21
7
  inst
22
8
  end
23
9
 
24
- describe "#bootstrap" do
25
- it "sends the message #bootstrap to the instance's host_commander" do
26
- host_commander.should_receive(:bootstrap).with(host, options)
27
- instance.bootstrap(host)
28
- end
29
-
30
- it "passes pre-configured options to #bootstrap" do
31
- host_commander.should_receive(:bootstrap).with(host, options)
32
- instance.bootstrap(host)
33
- end
34
- end
35
-
36
- describe "#chef_run" do
37
- it "sends the message #chef_client to the instance's host_commander" do
38
- host_commander.should_receive(:chef_client).with(host, ssh: instance.ssh, winrm: instance.winrm)
39
- instance.chef_run(host)
40
- end
41
- end
42
-
43
- describe "#put_secret" do
44
- let(:secret) { options[:encrypted_data_bag_secret] }
45
-
46
- it "sends the message #put_secret to the instance's host_commander" do
47
- host_commander.should_receive(:put_secret).with(host, secret, options.slice(:ssh, :winrm))
48
- instance.put_secret(host)
49
- end
50
- end
51
-
52
- describe "#ruby_script" do
53
- let(:command_lines) { ["puts 'hello'", "puts 'there'"] }
54
-
55
- it "sends the message #ruby_script to the instance's host_commander" do
56
- host_commander.should_receive(:ruby_script).with(host, command_lines, ssh: instance.ssh, winrm: instance.winrm)
57
- instance.ruby_script(host, command_lines)
58
- end
59
- end
60
-
61
- describe "#run" do
62
- let(:command) { "echo 'hello world'" }
63
-
64
- it "sends the message #run to the instance's host_commander" do
65
- host_commander.should_receive(:run).with(host, command, ssh: instance.ssh, winrm: instance.winrm)
66
- instance.run(host, command)
67
- end
68
- end
69
-
70
- describe "#platform_specific_run" do
71
- let(:ssh_command) { "hostname -f" }
72
- let(:winrm_command) { "echo %COMPUTERNAME%" }
73
- let(:ssh_connector) { Ridley::HostConnector::SSH.new }
74
- let(:winrm_connector) { Ridley::HostConnector::WinRM.new }
75
- let(:unsupported_connector) { Object.new }
76
-
77
- describe "expecting the ssh connector" do
78
- before do
79
- host_commander.stub(:connector_for).and_return ssh_connector
80
- end
81
- it "sends the ssh command" do
82
- instance.should_receive(:run).with(host, ssh_command)
83
- instance.platform_specific_run(host, ssh: ssh_command, winrm: winrm_command)
84
- end
85
-
86
- it "raises an error if no command is provided for the ssh connector when the ssh connector is used" do
87
- expect {
88
- instance.platform_specific_run(host, winrm: winrm_command)
89
- }.to raise_error(Ridley::Errors::CommandNotProvided)
90
- end
91
-
92
- it "raises an error if an empty command is provided for the ssh connector when the ssh connector is used" do
93
- expect {
94
- instance.platform_specific_run(host, ssh: "", winrm: winrm_command)
95
- }.to raise_error(Ridley::Errors::CommandNotProvided)
96
- end
97
-
98
- it "raises an error if a nil command is provided for the ssh connector when the ssh connector is used" do
99
- expect {
100
- instance.platform_specific_run(host, ssh: nil, winrm: winrm_command)
101
- }.to raise_error(Ridley::Errors::CommandNotProvided)
102
- end
103
- end
104
-
105
- describe "expecting the winrm connector" do
106
- before do
107
- host_commander.stub(:connector_for).and_return winrm_connector
108
- end
109
- it "sends the ssh command if the connector is winrm" do
110
- instance.should_receive(:run).with(host, winrm_command)
111
- instance.platform_specific_run(host, ssh: ssh_command, winrm: winrm_command)
112
- end
113
-
114
- it "raises an error if no command is provided for the winrm connector when the winrm connector is used" do
115
- expect {
116
- instance.platform_specific_run(host, ssh: ssh_command)
117
- }.to raise_error(Ridley::Errors::CommandNotProvided)
118
- end
119
-
120
- it "raises an error if an empty is provided for the winrm connector when the winrm connector is used" do
121
- expect {
122
- instance.platform_specific_run(host, ssh: ssh_command, winrm: "")
123
- }.to raise_error(Ridley::Errors::CommandNotProvided)
124
- end
125
-
126
- it "raises a nil command is provided for the winrm connector when the winrm connector is used" do
127
- expect {
128
- instance.platform_specific_run(host, ssh: ssh_command, winrm: nil)
129
- }.to raise_error(Ridley::Errors::CommandNotProvided)
130
- end
131
- end
132
-
133
- it "raises a RuntimeError if an unsupported connector is used" do
134
- host_commander.stub(:connector_for).and_return unsupported_connector
135
- expect {
136
- instance.platform_specific_run(host, ssh: ssh_command, winrm: winrm_command)
137
- }.to raise_error(RuntimeError)
138
- end
139
- end
140
-
141
10
  describe "#merge_data" do
142
11
  let(:node_name) { "rspec-test" }
143
12
  let(:run_list) { [ "recipe[one]", "recipe[two]" ] }