ridley 1.7.1 → 2.0.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.
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]" ] }