chef_cap 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/chef_cap/version.rb +1 -1
- data/recipes/chef_cap.rb +26 -24
- data/spec/chef_cap_mock_cap.rb +7 -0
- data/spec/chef_cap_spec.rb +71 -32
- metadata +3 -3
data/lib/chef_cap/version.rb
CHANGED
data/recipes/chef_cap.rb
CHANGED
@@ -46,20 +46,18 @@ if ChefDnaParser.parsed["environments"]
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
desc "Transfer SSH keys to the remote server"
|
62
|
-
task :transfer_keys do
|
49
|
+
namespace :ssh do
|
50
|
+
desc "Transfer SSH keys to the remote server"
|
51
|
+
task :transfer_keys do
|
52
|
+
private_key = ssh_deploy_key_file rescue false
|
53
|
+
public_key = ssh_authorized_pub_file rescue false
|
54
|
+
known_hosts = ssh_known_hosts rescue false
|
55
|
+
if private_key || public_key || known_hosts
|
56
|
+
private_key_remote_file = ".ssh/id_rsa"
|
57
|
+
if private_key
|
58
|
+
key_contents = File.read(private_key)
|
59
|
+
private_key_remote_file = ".ssh/id_dsa" if key_contents =~ /DSA/i
|
60
|
+
end
|
63
61
|
run "mkdir -p ~/.ssh"
|
64
62
|
if private_key
|
65
63
|
put(File.read(private_key), private_key_remote_file, :mode => "0600")
|
@@ -67,18 +65,22 @@ if private_key || public_key || known_hosts
|
|
67
65
|
put(File.read(public_key), ".ssh/authorized_keys", :mode => "0600") if public_key
|
68
66
|
put(known_hosts, ".ssh/known_hosts", :mode => "0600") if known_hosts
|
69
67
|
end
|
68
|
+
depend(:remote, :file, private_key_remote_file) if private_key
|
69
|
+
depend(:remote, :file, ".ssh/authorized_keys") if public_key
|
70
|
+
depend(:remote, :file, ".ssh/known_hosts") if known_hosts
|
70
71
|
end
|
71
|
-
before "chef:setup", "ssh:transfer_keys"
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
desc "Set any defined SSH options"
|
74
|
+
task :set_options do
|
75
|
+
ssh_options[:paranoid] = ssh_options_paranoid rescue nil
|
76
|
+
ssh_options[:keys] = ssh_options_keys rescue nil
|
77
|
+
ssh_options[:forward_agent] = ssh_options_forward_agent rescue nil
|
78
|
+
ssh_options[:username] = ssh_options_username rescue user rescue nil
|
79
|
+
ssh_options[:port] = ssh_options_port rescue nil
|
80
|
+
end
|
76
81
|
end
|
77
|
-
|
78
|
-
|
79
|
-
ssh_options[:keys] = ssh_options_keys rescue nil
|
80
|
-
ssh_options[:forward_agent] = ssh_options_forward_agent rescue nil
|
81
|
-
ssh_options[:username] = ssh_options_username rescue user rescue nil
|
82
|
+
before "chef:setup", "ssh:transfer_keys"
|
83
|
+
before "ssh:transfer_keys", "ssh:set_options"
|
82
84
|
|
83
85
|
if ChefDnaParser.parsed["upload"]
|
84
86
|
uploads_for_roles = {}
|
@@ -177,7 +179,7 @@ namespace :chef do
|
|
177
179
|
set "node_hash_for_#{channel[:host].gsub(/\./, "_")}", json_to_modify
|
178
180
|
put json_to_modify.to_json, "/tmp/chef-cap-#{rails_env}-#{channel[:host]}.json", :mode => "0600"
|
179
181
|
end
|
180
|
-
|
182
|
+
end
|
181
183
|
|
182
184
|
chef.run_chef_solo
|
183
185
|
end
|
data/spec/chef_cap_mock_cap.rb
CHANGED
data/spec/chef_cap_spec.rb
CHANGED
@@ -178,58 +178,97 @@ describe "chef_cap" do
|
|
178
178
|
"keys": "some_ssh_key_path"
|
179
179
|
}
|
180
180
|
}
|
181
|
+
},
|
182
|
+
"nossh": {
|
183
|
+
"ssh": {
|
184
|
+
"deploy_key_file": null
|
185
|
+
}
|
181
186
|
}
|
182
187
|
}
|
183
188
|
}
|
184
189
|
ERB
|
185
190
|
end
|
186
191
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
192
|
+
describe "ssh:transfer_keys" do
|
193
|
+
context "setting variables" do
|
194
|
+
before do
|
195
|
+
chef_cap.stub!(:put).and_return(true)
|
196
|
+
chef_cap.cap_task["ssh:transfer_keys"].call
|
197
|
+
end
|
191
198
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
199
|
+
it "parses out the deploy private key" do
|
200
|
+
chef_cap.cap_variable[:ssh_deploy_key_file].should_not be_nil
|
201
|
+
chef_cap.cap_variable[:ssh_deploy_key_file].should == File.join(File.dirname(__FILE__), '..', 'fixtures', 'ssh_deploy_key')
|
202
|
+
end
|
196
203
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
204
|
+
it "parses out the authorized public file" do
|
205
|
+
chef_cap.cap_variable[:ssh_authorized_pub_file].should_not be_nil
|
206
|
+
chef_cap.cap_variable[:ssh_authorized_pub_file].should == File.join(File.dirname(__FILE__), '..', 'fixtures', 'ssh_public_key')
|
207
|
+
end
|
201
208
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
chef_cap.should_receive(:put).with("knownhostscontent", ".ssh/known_hosts", :mode => "0600").and_return(true)
|
209
|
+
it "parses out the known hosts file" do
|
210
|
+
chef_cap.cap_variable[:ssh_known_hosts].should_not be_nil
|
211
|
+
chef_cap.cap_variable[:ssh_known_hosts].should == "knownhostscontent"
|
212
|
+
end
|
213
|
+
end
|
208
214
|
|
209
|
-
|
210
|
-
|
215
|
+
it "creates a task that uploads the keys to the server users .ssh directory" do
|
216
|
+
chef_cap.cap_namespace[:ssh].should be_true
|
217
|
+
chef_cap.cap_task["ssh:transfer_keys"].should_not be_nil
|
218
|
+
chef_cap.should_receive(:put).with("dsa imaprivatekey", ".ssh/id_dsa", :mode => "0600").and_return(true)
|
219
|
+
chef_cap.should_receive(:put).with("imapublickey", ".ssh/authorized_keys", :mode => "0600").and_return(true)
|
220
|
+
chef_cap.should_receive(:put).with("knownhostscontent", ".ssh/known_hosts", :mode => "0600").and_return(true)
|
211
221
|
|
212
|
-
|
213
|
-
|
214
|
-
chef_cap.cap_before["chef:setup"].should include("ssh:transfer_keys")
|
215
|
-
end
|
222
|
+
chef_cap.cap_task["ssh:transfer_keys"].call
|
223
|
+
end
|
216
224
|
|
217
|
-
it "adds dependencies on remote files for the ssh files to be uploaded" do
|
218
|
-
chef_cap.cap_depends[".ssh/id_dsa"].should_not be_nil
|
219
|
-
chef_cap.cap_depends[".ssh/id_dsa"].should == { :remote => :file }
|
220
225
|
|
221
|
-
|
222
|
-
|
226
|
+
it "adds a before chef:setup hook that that uploads the keys on every deploy" do
|
227
|
+
chef_cap.cap_before["chef:setup"].should_not be_nil
|
228
|
+
chef_cap.cap_before["chef:setup"].should include("ssh:transfer_keys")
|
229
|
+
end
|
230
|
+
|
231
|
+
it "adds dependencies on remote files for the ssh files to be uploaded" do
|
232
|
+
chef_cap.stub(:put).and_return(true)
|
233
|
+
chef_cap.cap_task["ssh:transfer_keys"].call
|
234
|
+
chef_cap.cap_depends[".ssh/id_dsa"].should_not be_nil
|
235
|
+
chef_cap.cap_depends[".ssh/id_dsa"].should == { :remote => :file }
|
223
236
|
|
224
|
-
|
225
|
-
|
237
|
+
chef_cap.cap_depends[".ssh/authorized_keys"].should_not be_nil
|
238
|
+
chef_cap.cap_depends[".ssh/authorized_keys"].should == { :remote => :file }
|
239
|
+
|
240
|
+
chef_cap.cap_depends[".ssh/known_hosts"].should_not be_nil
|
241
|
+
chef_cap.cap_depends[".ssh/known_hosts"].should == { :remote => :file }
|
242
|
+
end
|
226
243
|
end
|
227
244
|
|
228
|
-
describe "
|
245
|
+
describe "ssh:set_options" do
|
229
246
|
it "parses out keys" do
|
247
|
+
chef_cap.cap_task["ssh:set_options"].call
|
230
248
|
chef_cap.cap_ssh_options[:keys].should_not be_nil
|
231
249
|
chef_cap.cap_ssh_options[:keys].should == "some_ssh_key_path"
|
232
250
|
end
|
251
|
+
|
252
|
+
|
253
|
+
it "adds a before ssh:transfer_keys hook to call ssh:set_options" do
|
254
|
+
chef_cap.cap_before["ssh:transfer_keys"].should_not be_nil
|
255
|
+
chef_cap.cap_before["ssh:transfer_keys"].should include("ssh:set_options")
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context "when a value is null" do
|
260
|
+
it "will be not be uploaded" do
|
261
|
+
chef_cap.cap_variable[:ssh_deploy_key_file].should_not be_nil
|
262
|
+
chef_cap.cap_task[:nossh].call
|
263
|
+
chef_cap.cap_variable[:ssh_deploy_key_file].should be_nil
|
264
|
+
|
265
|
+
chef_cap.should_not_receive(:put).with("dsa imaprivatekey", ".ssh/id_dsa", :mode => "0600")
|
266
|
+
chef_cap.should_receive(:put).with("imapublickey", ".ssh/authorized_keys", :mode => "0600").and_return(true)
|
267
|
+
chef_cap.should_receive(:put).with("knownhostscontent", ".ssh/known_hosts", :mode => "0600").and_return(true)
|
268
|
+
|
269
|
+
chef_cap.cap_task["ssh:transfer_keys"].call
|
270
|
+
chef_cap.cap_variable[:ssh_deploy_key_file].should be_nil
|
271
|
+
end
|
233
272
|
end
|
234
273
|
|
235
274
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 5
|
9
|
+
version: 0.1.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Case Commons, LLC
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-03-
|
17
|
+
date: 2011-03-03 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|