ridley 0.12.4 → 1.0.0.rc1
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/Gemfile +1 -1
- data/lib/ridley.rb +3 -3
- data/lib/ridley/bootstrap_context.rb +100 -0
- data/lib/ridley/bootstrap_context/unix.rb +74 -0
- data/lib/ridley/bootstrap_context/windows.rb +120 -0
- data/lib/ridley/chef_objects/node_object.rb +8 -5
- data/lib/ridley/host_commander.rb +207 -0
- data/lib/ridley/host_connector.rb +49 -87
- data/lib/ridley/host_connector/ssh.rb +153 -39
- data/lib/ridley/host_connector/winrm.rb +164 -39
- data/lib/ridley/resources/node_resource.rb +52 -56
- data/lib/ridley/version.rb +1 -1
- data/ridley.gemspec +0 -2
- data/spec/spec_helper.rb +4 -4
- data/spec/support/chef_server.rb +9 -3
- data/spec/unit/ridley/{bootstrap_bindings/unix_template_binding_spec.rb → bootstrap_context/unix_spec.rb} +2 -2
- data/spec/unit/ridley/{bootstrap_bindings/windows_template_binding_spec.rb → bootstrap_context/windows_spec.rb} +2 -2
- data/spec/unit/ridley/{mixin/bootstrap_binding_spec.rb → bootstrap_context_spec.rb} +2 -6
- data/spec/unit/ridley/host_commander_spec.rb +208 -0
- data/spec/unit/ridley/host_connector/ssh_spec.rb +37 -31
- data/spec/unit/ridley/host_connector/winrm_spec.rb +124 -31
- data/spec/unit/ridley/host_connector_spec.rb +23 -147
- data/spec/unit/ridley/resources/node_resource_spec.rb +55 -115
- metadata +17 -66
- data/lib/ridley/bootstrap_bindings.rb +0 -3
- data/lib/ridley/bootstrap_bindings/unix_template_binding.rb +0 -108
- data/lib/ridley/bootstrap_bindings/windows_template_binding.rb +0 -163
- data/lib/ridley/bootstrapper.rb +0 -89
- data/lib/ridley/bootstrapper/context.rb +0 -81
- data/lib/ridley/host_connector/response_set.rb +0 -98
- data/lib/ridley/host_connector/ssh/worker.rb +0 -135
- data/lib/ridley/host_connector/winrm/worker.rb +0 -159
- data/lib/ridley/log.rb +0 -10
- data/lib/ridley/mixin/bootstrap_binding.rb +0 -77
- data/spec/unit/ridley/bootstrapper/context_spec.rb +0 -45
- data/spec/unit/ridley/bootstrapper_spec.rb +0 -96
- data/spec/unit/ridley/host_connector/response_set_spec.rb +0 -112
- data/spec/unit/ridley/host_connector/ssh/worker_spec.rb +0 -57
- data/spec/unit/ridley/host_connector/winrm/worker_spec.rb +0 -139
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Ridley::HostConnector::SSH::Worker do
|
4
|
-
subject { ssh_worker }
|
5
|
-
let(:ssh_worker) { described_class.new(host, options) }
|
6
|
-
|
7
|
-
let(:host) { 'reset.riotgames.com' }
|
8
|
-
let(:options) { {} }
|
9
|
-
|
10
|
-
describe "#sudo" do
|
11
|
-
subject { ssh_worker.sudo }
|
12
|
-
|
13
|
-
it { should be_false }
|
14
|
-
|
15
|
-
context "with sudo" do
|
16
|
-
let(:options) { { ssh: { sudo: true } } }
|
17
|
-
|
18
|
-
it { should be_true }
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#chef_client" do
|
23
|
-
subject(:chef_client) { ssh_worker.chef_client }
|
24
|
-
|
25
|
-
it { should be_a(Array) }
|
26
|
-
|
27
|
-
context "with sudo" do
|
28
|
-
let(:options) { { ssh: { sudo: true } } }
|
29
|
-
|
30
|
-
it "sends a run command with sudo" do
|
31
|
-
ssh_worker.should_receive(:run).with("sudo chef-client")
|
32
|
-
chef_client
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "#put_secret" do
|
38
|
-
subject(:put_secret) { ssh_worker.put_secret(secret) }
|
39
|
-
let(:encrypted_data_bag_secret_path) { fixtures_path.join("encrypted_data_bag_secret").to_s }
|
40
|
-
let(:secret) { File.read(encrypted_data_bag_secret_path).chomp }
|
41
|
-
|
42
|
-
it "receives a run command with echo" do
|
43
|
-
ssh_worker.should_receive(:run).with("echo '#{secret}' > /etc/chef/encrypted_data_bag_secret; chmod 0600 /etc/chef/encrypted_data_bag_secret")
|
44
|
-
put_secret
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#ruby_script" do
|
49
|
-
subject(:ruby_script) { ssh_worker.ruby_script(command_lines) }
|
50
|
-
let(:command_lines) { ["puts 'hello'", "puts 'there'"] }
|
51
|
-
|
52
|
-
it "receives a ruby call with the command" do
|
53
|
-
ssh_worker.should_receive(:run).with("#{described_class::EMBEDDED_RUBY_PATH} -e \"puts 'hello';puts 'there'\"")
|
54
|
-
ruby_script
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,139 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Ridley::HostConnector::WinRM::Worker do
|
4
|
-
subject { winrm_worker }
|
5
|
-
let(:winrm_worker) { described_class.new(host, options) }
|
6
|
-
let(:host) { 'reset.riotgames.com' }
|
7
|
-
let(:options) { {} }
|
8
|
-
|
9
|
-
before do
|
10
|
-
Ridley::HostConnector::WinRM::CommandUploader.stub(:new).and_return(double('command_uploader'))
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#winrm_port" do
|
14
|
-
subject(:winrm_port) { winrm_worker.winrm_port }
|
15
|
-
|
16
|
-
it { should eq(Ridley::HostConnector::DEFAULT_WINRM_PORT) }
|
17
|
-
|
18
|
-
context "when overridden" do
|
19
|
-
let(:options) { { winrm: { port: 1234 } } }
|
20
|
-
|
21
|
-
it { should eq(1234) }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#winrm" do
|
26
|
-
subject { winrm_worker.winrm }
|
27
|
-
|
28
|
-
it "returns a WinRM::WinRMWebService" do
|
29
|
-
expect(subject).to be_a(::WinRM::WinRMWebService)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "#get_command" do
|
34
|
-
subject(:get_command) { winrm_worker.get_command(command, command_uploader_stub) }
|
35
|
-
|
36
|
-
let(:command) { "echo %TEMP%" }
|
37
|
-
let(:command_uploader_stub) { double('CommandUploader') }
|
38
|
-
|
39
|
-
it { should eq(command) }
|
40
|
-
|
41
|
-
context "when a command is more than 2047 characters" do
|
42
|
-
let(:command) { "a" * 2048 }
|
43
|
-
|
44
|
-
it "uploads and returns a command" do
|
45
|
-
Ridley::HostConnector::WinRM::CommandUploader.stub new: command_uploader_stub
|
46
|
-
|
47
|
-
command_uploader_stub.should_receive :upload
|
48
|
-
command_uploader_stub.stub command: "my command"
|
49
|
-
command_uploader_stub.stub(:cleanup)
|
50
|
-
|
51
|
-
get_command.should eq("my command")
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "#run" do
|
57
|
-
subject(:run) { winrm_worker.run(command) }
|
58
|
-
let(:command) { "dir" }
|
59
|
-
let(:command_uploader_stub) { double('CommandUploader') }
|
60
|
-
let(:stdout) { "stdout" }
|
61
|
-
let(:stderr) { nil }
|
62
|
-
let(:winrm_stub) { double }
|
63
|
-
|
64
|
-
before do
|
65
|
-
Ridley::HostConnector::WinRM::CommandUploader.stub(:new).and_return(command_uploader_stub)
|
66
|
-
winrm_worker.stub(:winrm).and_return(winrm_stub)
|
67
|
-
winrm_stub.stub(:run_cmd).and_yield(stdout, stderr).and_return({exitcode: 0})
|
68
|
-
end
|
69
|
-
|
70
|
-
context "when the exit_code is 0" do
|
71
|
-
it "returns an :ok with the response" do
|
72
|
-
status, response = run
|
73
|
-
expect(status).to eq(:ok)
|
74
|
-
expect(response.stdout).to eq("stdout")
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "when the exit_code is not 0" do
|
79
|
-
let(:stderr) { "stderr" }
|
80
|
-
|
81
|
-
before do
|
82
|
-
winrm_stub.stub(:run_cmd).and_yield(stdout, stderr).and_return({exitcode: 1})
|
83
|
-
end
|
84
|
-
|
85
|
-
it "returns an :error with the response" do
|
86
|
-
status, response = run
|
87
|
-
expect(status).to eq(:error)
|
88
|
-
expect(response.stderr).to eq("stderr")
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "when an error is raised" do
|
93
|
-
let(:stderr) { "error" }
|
94
|
-
|
95
|
-
before do
|
96
|
-
winrm_stub.stub(:run_cmd).and_yield(stdout, stderr).and_raise("error")
|
97
|
-
end
|
98
|
-
|
99
|
-
it "returns an :error with the response" do
|
100
|
-
status, response = run
|
101
|
-
expect(status).to eq(:error)
|
102
|
-
expect(response.stderr).to eq("error")
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe "#chef_client" do
|
108
|
-
subject(:chef_client) { winrm_worker.chef_client }
|
109
|
-
|
110
|
-
it "receives a command to run chef-client" do
|
111
|
-
winrm_worker.should_receive(:run).with("chef-client")
|
112
|
-
|
113
|
-
chef_client
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
describe "#put_secret" do
|
118
|
-
subject(:put_secret) { winrm_worker.put_secret(secret) }
|
119
|
-
let(:encrypted_data_bag_secret_path) { fixtures_path.join("encrypted_data_bag_secret").to_s }
|
120
|
-
let(:secret) { File.read(encrypted_data_bag_secret_path).chomp }
|
121
|
-
|
122
|
-
it "receives a command to copy the secret" do
|
123
|
-
winrm_worker.should_receive(:run).with("echo #{secret} > C:\\chef\\encrypted_data_bag_secret")
|
124
|
-
|
125
|
-
put_secret
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
describe "#ruby_script" do
|
130
|
-
subject(:ruby_script) { winrm_worker.ruby_script(command_lines) }
|
131
|
-
let(:command_lines) { ["puts 'hello'", "puts 'there'"] }
|
132
|
-
|
133
|
-
it "receives a ruby call with the command" do
|
134
|
-
winrm_worker.should_receive(:run).with("#{described_class::EMBEDDED_RUBY_PATH} -e \"puts 'hello';puts 'there'\"")
|
135
|
-
|
136
|
-
ruby_script
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|