ridley-connectors 2.0.0 → 2.0.1
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 +4 -4
- data/CHANGELOG.md +10 -0
- data/bootstrappers/unix_omnibus.erb +91 -0
- data/bootstrappers/windows_omnibus.erb +113 -0
- data/lib/ridley-connectors.rb +10 -0
- data/lib/ridley-connectors/bootstrap_context.rb +100 -0
- data/lib/ridley-connectors/bootstrap_context/unix.rb +66 -0
- data/lib/ridley-connectors/bootstrap_context/windows.rb +118 -0
- data/lib/ridley-connectors/command_context.rb +76 -0
- data/lib/ridley-connectors/command_context/unix_uninstall.rb +42 -0
- data/lib/ridley-connectors/command_context/windows_uninstall.rb +35 -0
- data/lib/ridley-connectors/errors.rb +29 -0
- data/lib/ridley-connectors/host_commander.rb +26 -9
- data/lib/ridley-connectors/host_connector/ssh.rb +3 -0
- data/lib/ridley-connectors/host_connector/winrm.rb +21 -25
- data/lib/ridley-connectors/version.rb +1 -1
- data/ridley-connectors.gemspec +1 -0
- data/scripts/unix_uninstall_omnibus.erb +31 -0
- data/scripts/windows_uninstall_omnibus.erb +10 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/unit/ridley-connectors/bootstrap_context/unix_spec.rb +101 -0
- data/spec/unit/ridley-connectors/bootstrap_context/windows_spec.rb +116 -0
- data/spec/unit/ridley-connectors/bootstrap_context_spec.rb +52 -0
- data/spec/unit/ridley-connectors/client_spec.rb +1 -1
- data/spec/unit/ridley-connectors/command_context_spec.rb +56 -0
- data/spec/unit/ridley-connectors/host_commander_spec.rb +23 -0
- data/spec/unit/ridley-connectors/host_connector/winrm_spec.rb +31 -23
- metadata +36 -3
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ridley::BootstrapContext::Windows do
|
4
|
+
let(:options) do
|
5
|
+
{
|
6
|
+
server_url: "https://api.opscode.com/organizations/vialstudios",
|
7
|
+
validator_client: "chef-validator",
|
8
|
+
validator_path: fixtures_path.join("my-fake.pem").to_s,
|
9
|
+
encrypted_data_bag_secret: File.read(fixtures_path.join("my-fake.pem")),
|
10
|
+
chef_version: "11.4.0"
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "ClassMethods" do
|
15
|
+
subject { described_class }
|
16
|
+
|
17
|
+
describe "::new" do
|
18
|
+
context "when a chef_version is passed through" do
|
19
|
+
it "sets the chef_version attribute to the same value" do
|
20
|
+
subject.new(options).chef_version.should eq("11.4.0")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when the chef_version is not passed through" do
|
25
|
+
it "sets the chef_version to 'latest'" do
|
26
|
+
options.delete(:chef_version)
|
27
|
+
subject.new(options).chef_version.should eq("latest")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
subject { described_class.new(options) }
|
34
|
+
|
35
|
+
describe "MixinMethods" do
|
36
|
+
describe "#templates_path" do
|
37
|
+
it "returns a pathname" do
|
38
|
+
subject.templates_path.should be_a(Pathname)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#first_boot" do
|
43
|
+
it "returns a string" do
|
44
|
+
subject.first_boot.should be_a(String)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#encrypted_data_bag_secret" do
|
49
|
+
it "returns a string" do
|
50
|
+
subject.encrypted_data_bag_secret.should be_a(String)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#validation_key" do
|
55
|
+
it "returns a string" do
|
56
|
+
subject.validation_key.should be_a(String)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "template" do
|
61
|
+
it "returns a string" do
|
62
|
+
subject.template.should be_a(Erubis::Eruby)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#boot_command" do
|
68
|
+
it "returns a string" do
|
69
|
+
subject.boot_command.should be_a(String)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#chef_run" do
|
74
|
+
it "returns a string" do
|
75
|
+
subject.chef_run.should be_a(String)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#chef_config" do
|
80
|
+
it "returns a string" do
|
81
|
+
subject.chef_config.should be_a(String)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#env_path" do
|
86
|
+
it "returns a string" do
|
87
|
+
expect(subject.env_path).to be_a(String)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#default_template" do
|
92
|
+
it "returns a string" do
|
93
|
+
subject.default_template.should be_a(String)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#bootstrap_directory" do
|
98
|
+
it "returns a string" do
|
99
|
+
subject.bootstrap_directory.should be_a(String)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "#escape_and_echo" do
|
104
|
+
let(:output) { "foo()" }
|
105
|
+
|
106
|
+
it "adds 'echo.' to the beginning of each line and escapes special batch characters" do
|
107
|
+
subject.escape_and_echo(output).should eq("echo.foo^(^)")
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "#windows_wget_powershell" do
|
112
|
+
it "returns a string" do
|
113
|
+
subject.windows_wget_powershell.should be_a(String)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ridley::BootstrapContext::Base do
|
4
|
+
let(:host) { "reset.riotgames.com" }
|
5
|
+
let(:options) do
|
6
|
+
{
|
7
|
+
server_url: "https://api.opscode.com/organizations/vialstudios",
|
8
|
+
validator_client: "chef-validator",
|
9
|
+
validator_path: fixtures_path.join("my-fake.pem").to_s,
|
10
|
+
encrypted_data_bag_secret: File.read(fixtures_path.join("my-fake.pem")),
|
11
|
+
chef_version: "11.4.0"
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "ClassMethods" do
|
16
|
+
subject { described_class }
|
17
|
+
|
18
|
+
describe ":included" do
|
19
|
+
context "when a class includes Ridley::BootstrapBinding" do
|
20
|
+
it "should have a validate_options class method`" do
|
21
|
+
subject.methods.should include(:validate_options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ":validate_options" do
|
27
|
+
context "when server_url is not specified" do
|
28
|
+
let(:options) { Hash.new }
|
29
|
+
|
30
|
+
it "raises an ArgumentError" do
|
31
|
+
expect {
|
32
|
+
subject.validate_options(options)
|
33
|
+
}.to raise_error(Ridley::Errors::ArgumentError)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when validator_path is not specified" do
|
39
|
+
let(:options) do
|
40
|
+
{
|
41
|
+
server_url: "https://api.opscode.com/organizations/vialstudios"
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
it "raises an ArgumentError" do
|
46
|
+
expect {
|
47
|
+
subject.validate_options(options)
|
48
|
+
}.to raise_error(Ridley::Errors::ArgumentError)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ridley::CommandContext::Base do
|
4
|
+
let(:command_context) { described_class.new }
|
5
|
+
|
6
|
+
describe "ClassMethods" do
|
7
|
+
describe "::template_file" do
|
8
|
+
let(:template_file) { described_class.template_file(filename) }
|
9
|
+
let(:filename) { "test" }
|
10
|
+
|
11
|
+
context "when a filename is provided" do
|
12
|
+
it "sets and returns a class variable" do
|
13
|
+
expect(template_file).to be_a(Pathname)
|
14
|
+
expect(template_file.to_path).to end_with("scripts/test.erb")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#command" do
|
21
|
+
let(:command) { command_context.command }
|
22
|
+
let(:template) { double(:evaluate => nil) }
|
23
|
+
|
24
|
+
before do
|
25
|
+
command_context.stub(:template).and_return(template)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "attempts to evaluate the template" do
|
29
|
+
command
|
30
|
+
expect(template).to have_received(:evaluate)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe Ridley::CommandContext::Unix do
|
36
|
+
let(:unix) { described_class.new(options) }
|
37
|
+
|
38
|
+
describe "#command" do
|
39
|
+
context "when sudo is true" do
|
40
|
+
let(:command) { unix.command }
|
41
|
+
let(:template) { double(:evaluate => command_string) }
|
42
|
+
let(:options) do
|
43
|
+
{sudo: true}
|
44
|
+
end
|
45
|
+
let(:command_string) { "echo 'hi'" }
|
46
|
+
|
47
|
+
before do
|
48
|
+
unix.stub(:template).and_return(template)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "prepends sudo to the command" do
|
52
|
+
expect(command).to eql("sudo echo 'hi'")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -167,6 +167,29 @@ describe Ridley::HostCommander do
|
|
167
167
|
end
|
168
168
|
|
169
169
|
describe "#connector_for" do
|
170
|
+
|
171
|
+
context "when connector_port_open? experiences an error" do
|
172
|
+
let(:socket) { double(close: true) }
|
173
|
+
|
174
|
+
|
175
|
+
before do
|
176
|
+
@times_called = 0
|
177
|
+
Celluloid::IO::TCPSocket.stub(:new).and_return do
|
178
|
+
@times_called += 1
|
179
|
+
if @times_called == 1
|
180
|
+
raise Errno::ETIMEDOUT
|
181
|
+
else
|
182
|
+
socket
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
it "executes retry logic" do
|
188
|
+
expect(Celluloid::IO::TCPSocket).to receive(:new).twice
|
189
|
+
subject.connector_for(host)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
170
193
|
it "should return winrm if winrm is open" do
|
171
194
|
subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything).and_return(true)
|
172
195
|
subject.should_receive(:winrm)
|
@@ -21,29 +21,6 @@ describe Ridley::HostConnector::WinRM do
|
|
21
21
|
::WinRM::WinRMWebService.stub(:new).and_return(double(:set_timeout => nil, :run_cmd => {exitcode: 0}))
|
22
22
|
end
|
23
23
|
|
24
|
-
describe "#get_command" do
|
25
|
-
subject(:get_command) { connector.get_command(command, command_uploader_stub) }
|
26
|
-
|
27
|
-
let(:command) { "echo %TEMP%" }
|
28
|
-
let(:command_uploader_stub) { double('CommandUploader') }
|
29
|
-
|
30
|
-
it { should eq(command) }
|
31
|
-
|
32
|
-
context "when a command is more than 2047 characters" do
|
33
|
-
let(:command) { "a" * 2048 }
|
34
|
-
|
35
|
-
it "uploads and returns a command" do
|
36
|
-
described_class::CommandUploader.stub(new: command_uploader_stub)
|
37
|
-
|
38
|
-
command_uploader_stub.should_receive :upload
|
39
|
-
command_uploader_stub.stub command: "my command"
|
40
|
-
command_uploader_stub.stub(:cleanup)
|
41
|
-
|
42
|
-
get_command.should eq("my command")
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
24
|
describe "#run" do
|
48
25
|
subject(:result) { connector.run(host, command, options) }
|
49
26
|
let(:command) { "dir" }
|
@@ -58,6 +35,37 @@ describe Ridley::HostConnector::WinRM do
|
|
58
35
|
winrm_stub.stub(:run_cmd).and_yield(stdout, stderr).and_return(exitcode: 0)
|
59
36
|
end
|
60
37
|
|
38
|
+
context "when the command is forced" do
|
39
|
+
let(:command_uploader) { double(upload: nil, command: command, cleanup: true) }
|
40
|
+
let(:command) { "a forced-to-upload command" }
|
41
|
+
let(:options) do
|
42
|
+
{ force_batch_file: true }
|
43
|
+
end
|
44
|
+
|
45
|
+
before do
|
46
|
+
Ridley::HostConnector::WinRM::CommandUploader.stub(:new).and_return(command_uploader)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "uploads the command" do
|
50
|
+
expect(winrm_stub).to receive(:run_cmd).with("a forced-to-upload command")
|
51
|
+
result
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when the command is too long" do
|
56
|
+
let(:command_uploader) { double(upload: nil, command: command, cleanup: true) }
|
57
|
+
let(:command) { "a" * 2048 }
|
58
|
+
|
59
|
+
before do
|
60
|
+
Ridley::HostConnector::WinRM::CommandUploader.stub(:new).and_return(command_uploader)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "uploads the command" do
|
64
|
+
expect(winrm_stub).to receive(:run_cmd).with("a" * 2048)
|
65
|
+
result
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
61
69
|
context "when the exit_code is 0" do
|
62
70
|
it "returns a non-error HostConnector::Response" do
|
63
71
|
expect(result).to be_a(Ridley::HostConnector::Response)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridley-connectors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Winsor
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: celluloid
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - ~>
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 0.16.0.pre
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: erubis
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: net-ssh
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,9 +126,18 @@ files:
|
|
112
126
|
- LICENSE
|
113
127
|
- README.md
|
114
128
|
- Thorfile
|
129
|
+
- bootstrappers/unix_omnibus.erb
|
130
|
+
- bootstrappers/windows_omnibus.erb
|
115
131
|
- lib/ridley-connectors.rb
|
132
|
+
- lib/ridley-connectors/bootstrap_context.rb
|
133
|
+
- lib/ridley-connectors/bootstrap_context/unix.rb
|
134
|
+
- lib/ridley-connectors/bootstrap_context/windows.rb
|
116
135
|
- lib/ridley-connectors/chef_objects/node_object.rb
|
117
136
|
- lib/ridley-connectors/client.rb
|
137
|
+
- lib/ridley-connectors/command_context.rb
|
138
|
+
- lib/ridley-connectors/command_context/unix_uninstall.rb
|
139
|
+
- lib/ridley-connectors/command_context/windows_uninstall.rb
|
140
|
+
- lib/ridley-connectors/errors.rb
|
118
141
|
- lib/ridley-connectors/host_commander.rb
|
119
142
|
- lib/ridley-connectors/host_connector.rb
|
120
143
|
- lib/ridley-connectors/host_connector/response.rb
|
@@ -124,13 +147,19 @@ files:
|
|
124
147
|
- lib/ridley-connectors/resources/node_resource.rb
|
125
148
|
- lib/ridley-connectors/version.rb
|
126
149
|
- ridley-connectors.gemspec
|
150
|
+
- scripts/unix_uninstall_omnibus.erb
|
151
|
+
- scripts/windows_uninstall_omnibus.erb
|
127
152
|
- spec/fixtures/encrypted_data_bag_secret
|
128
153
|
- spec/fixtures/my-fake.pem
|
129
154
|
- spec/spec_helper.rb
|
130
155
|
- spec/support/actor_mocking.rb
|
131
156
|
- spec/support/spec_helpers.rb
|
157
|
+
- spec/unit/ridley-connectors/bootstrap_context/unix_spec.rb
|
158
|
+
- spec/unit/ridley-connectors/bootstrap_context/windows_spec.rb
|
159
|
+
- spec/unit/ridley-connectors/bootstrap_context_spec.rb
|
132
160
|
- spec/unit/ridley-connectors/chef_objects/node_object_spec.rb
|
133
161
|
- spec/unit/ridley-connectors/client_spec.rb
|
162
|
+
- spec/unit/ridley-connectors/command_context_spec.rb
|
134
163
|
- spec/unit/ridley-connectors/host_commander_spec.rb
|
135
164
|
- spec/unit/ridley-connectors/host_connector/ssh_spec.rb
|
136
165
|
- spec/unit/ridley-connectors/host_connector/winrm/command_uploader_spec.rb
|
@@ -157,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
186
|
version: '0'
|
158
187
|
requirements: []
|
159
188
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.0.
|
189
|
+
rubygems_version: 2.0.3
|
161
190
|
signing_key:
|
162
191
|
specification_version: 4
|
163
192
|
summary: A Connector API for talking to nodes managed by Chef
|
@@ -167,8 +196,12 @@ test_files:
|
|
167
196
|
- spec/spec_helper.rb
|
168
197
|
- spec/support/actor_mocking.rb
|
169
198
|
- spec/support/spec_helpers.rb
|
199
|
+
- spec/unit/ridley-connectors/bootstrap_context/unix_spec.rb
|
200
|
+
- spec/unit/ridley-connectors/bootstrap_context/windows_spec.rb
|
201
|
+
- spec/unit/ridley-connectors/bootstrap_context_spec.rb
|
170
202
|
- spec/unit/ridley-connectors/chef_objects/node_object_spec.rb
|
171
203
|
- spec/unit/ridley-connectors/client_spec.rb
|
204
|
+
- spec/unit/ridley-connectors/command_context_spec.rb
|
172
205
|
- spec/unit/ridley-connectors/host_commander_spec.rb
|
173
206
|
- spec/unit/ridley-connectors/host_connector/ssh_spec.rb
|
174
207
|
- spec/unit/ridley-connectors/host_connector/winrm/command_uploader_spec.rb
|