chef-provisioning-ssh 0.0.3 → 0.0.4
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/README.md +81 -47
- data/lib/chef/provisioning/ssh_driver/driver.rb +117 -70
- data/lib/chef/provisioning/ssh_driver/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fe4cf3899fb309821ab22d0f9dd76fadcc1b58c
|
4
|
+
data.tar.gz: 0f80251b6a818fbe5c7ed42445b635cc9333aed5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df8767e9f50ddd4d670efeb8ffe1a06c1acff06a7c7260e9c97b3e7a7505c37fbfa0c1fa793e3f40cef76e06bf69304edb95ae17a4b5c894a9a9a579c9abadcb
|
7
|
+
data.tar.gz: 3a353beff910734a9ab9be8bd8181af14f34999ecd0d8b98c55426e521a18f338aa612168ac3eb7904ae982a1ab490851630bfae213204ecabebdd3c04e4ae9d
|
data/README.md
CHANGED
@@ -41,48 +41,73 @@ The snippet from that link is:
|
|
41
41
|
chef, or the username configured in .ssh/config).
|
42
42
|
|
43
43
|
The options are used in
|
44
|
-
Net::SSH.start(host, username, ssh_options)
|
44
|
+
Net::SSH.start(host, username, ssh_options, options)
|
45
45
|
|
46
46
|
In addition to host, ip_address and hostname are also additional options.
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
:
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
48
|
+
|
49
|
+
* full machine_options for SSH example:
|
50
|
+
|
51
|
+
with_machine_options :transport_options => {
|
52
|
+
'is_windows' => false,
|
53
|
+
'ip_address' => '192.168.33.23',
|
54
|
+
'host' => 'somehost',
|
55
|
+
'username' => 'vagrant',
|
56
|
+
'ssh_options' => {
|
57
|
+
'auth_methods' => '',
|
58
|
+
'bind_address' => '',
|
59
|
+
'compression' => '',
|
60
|
+
'compression_level' => '',
|
61
|
+
'config' => '',
|
62
|
+
'encryption' => '',
|
63
|
+
'forward_agent' => '',
|
64
|
+
'hmac' => '',
|
65
|
+
'host_key' => '',
|
66
|
+
'keepalive' => '',
|
67
|
+
'keepalive_interval' => '',
|
68
|
+
'kex' => '',
|
69
|
+
'keys' => ['/home/username/.vagrant.d/insecure_private_key'],
|
70
|
+
'key_data' => '',
|
71
|
+
'languages' => '',
|
72
|
+
'logger' => '',
|
73
|
+
'paranoid' => '',
|
74
|
+
'password' => '',
|
75
|
+
'port' => '',
|
76
|
+
'proxy' => '',
|
77
|
+
'rekey_blocks_limit' => '',
|
78
|
+
'rekey_limit' => '',
|
79
|
+
'rekey_packet_limit' => '',
|
80
|
+
'timeout' => '',
|
81
|
+
'verbose' => '',
|
82
|
+
'global_known_hosts_file' => '',
|
83
|
+
'user_known_hosts_file' => '',
|
84
|
+
'host_key_alias' => '',
|
85
|
+
'host_name' => '',
|
86
|
+
'user' => '',
|
87
|
+
'properties' => '',
|
88
|
+
'passphrase' => '',
|
89
|
+
'keys_only' => '',
|
90
|
+
'max_pkt_size' => '',
|
91
|
+
'max_win_size, :send_env' => '',
|
92
|
+
'use_agent' => ''
|
93
|
+
},
|
94
|
+
'options' => {
|
95
|
+
'prefix' => 'sudo ',
|
96
|
+
'ssh_pty_enable' => false,
|
97
|
+
'ssh_gateway' => 'yourgateway'
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
* full machine_options for WinRM example:
|
102
|
+
|
103
|
+
with_machine_options :transport_options => {
|
104
|
+
'is_windows' => true,
|
105
|
+
'host' => '192.168.33.23',
|
106
|
+
'port' => 5985,
|
107
|
+
'username' => 'vagrant',
|
108
|
+
'password' => 'vagrant'
|
109
|
+
}
|
110
|
+
|
86
111
|
|
87
112
|
* machine resource example:
|
88
113
|
|
@@ -90,9 +115,9 @@ In addition to host, ip_address and hostname are also additional options.
|
|
90
115
|
|
91
116
|
with_driver 'ssh'
|
92
117
|
|
93
|
-
machine "
|
118
|
+
machine "ssh" do
|
94
119
|
action [:ready, :setup, :converge]
|
95
|
-
machine_options
|
120
|
+
machine_options :transport_options => {
|
96
121
|
'ip_address' => '192.168.33.22',
|
97
122
|
'username' => 'vagrant',
|
98
123
|
'ssh_options' => {
|
@@ -103,16 +128,23 @@ In addition to host, ip_address and hostname are also additional options.
|
|
103
128
|
converge true
|
104
129
|
end
|
105
130
|
|
106
|
-
|
131
|
+
##
|
132
|
+
# With WinRM you must use a remote chef-server
|
133
|
+
# local-mode chef server is not currently supported
|
134
|
+
|
135
|
+
with_chef_server "https://api.opscode.com/organizations/double-z",
|
136
|
+
:client_name => Chef::Config[:node_name],
|
137
|
+
:signing_key_filename => Chef::Config[:client_key]
|
138
|
+
|
139
|
+
machine "winrm" do
|
107
140
|
action [:ready, :setup, :converge]
|
108
141
|
machine_options :transport_options => {
|
109
|
-
'
|
142
|
+
'host' => '192.168.33.23',
|
143
|
+
'port' => 5985,
|
110
144
|
'username' => 'vagrant',
|
111
|
-
'
|
112
|
-
'keys' => ['/home/username/.vagrant.d/insecure_private_key']
|
113
|
-
}
|
145
|
+
'password' => 'vagrant'
|
114
146
|
}
|
115
|
-
recipe '
|
147
|
+
recipe 'windows'
|
116
148
|
converge true
|
117
149
|
end
|
118
150
|
|
@@ -133,6 +165,8 @@ Then run from the test directory:
|
|
133
165
|
|
134
166
|
`chef-client -z -o vagrant::test_provisioning_ssh`
|
135
167
|
|
168
|
+
NOTE: if the second machine fails it will be a result of issues with your vagrant key.
|
169
|
+
|
136
170
|
This will run chef-provisioning on each of the two vagrant nodes.
|
137
171
|
|
138
172
|
thats it.
|
@@ -4,7 +4,10 @@ require 'chef/provisioning/driver'
|
|
4
4
|
require 'chef/provisioning/version'
|
5
5
|
require 'chef/provisioning/machine/basic_machine'
|
6
6
|
require 'chef/provisioning/machine/unix_machine'
|
7
|
+
require 'chef/provisioning/machine/windows_machine'
|
8
|
+
require 'chef/provisioning/convergence_strategy/install_msi'
|
7
9
|
require 'chef/provisioning/convergence_strategy/install_cached'
|
10
|
+
require 'chef/provisioning/transport/winrm'
|
8
11
|
require 'chef/provisioning/transport/ssh'
|
9
12
|
require 'chef/provisioning/ssh_driver/version'
|
10
13
|
require 'chef/provisioning/ssh_driver/helpers'
|
@@ -54,87 +57,97 @@ class Chef
|
|
54
57
|
new_machine = false
|
55
58
|
new_machine_options = {}
|
56
59
|
current_machine_options = false
|
57
|
-
|
58
|
-
if machine_options[:transport_options]
|
59
|
-
new_machine_options['transport_options'] = machine_options[:transport_options]
|
60
|
-
elsif machine_options['transport_options']
|
61
|
-
new_machine_options['transport_options'] = machine_options['transport_options']
|
62
|
-
end
|
63
60
|
|
64
|
-
if machine_options[:
|
65
|
-
new_machine_options['convergence_options'] = machine_options[:convergence_options]
|
66
|
-
elsif machine_options['convergence_options']
|
67
|
-
new_machine_options['convergence_options'] = machine_options['convergence_options']
|
68
|
-
end
|
61
|
+
if machine_options[:transport_options] && machine_options[:transport_options]['is_windows']
|
69
62
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
63
|
+
machine_spec.location = {
|
64
|
+
'driver_url' => driver_url,
|
65
|
+
'driver_version' => Chef::Provisioning::SshDriver::VERSION,
|
66
|
+
'target_name' => machine_spec.name,
|
67
|
+
'ssh_file_path' => "#{cluster_path}/#{machine_spec.name}.json",
|
68
|
+
'allocated_at' => Time.now.utc.to_s
|
69
|
+
}
|
74
70
|
|
75
|
-
|
71
|
+
else
|
76
72
|
|
77
|
-
|
73
|
+
if machine_options[:transport_options]
|
74
|
+
new_machine_options['transport_options'] = machine_options[:transport_options]
|
75
|
+
elsif machine_options['transport_options']
|
76
|
+
new_machine_options['transport_options'] = machine_options['transport_options']
|
77
|
+
end
|
78
78
|
|
79
|
+
if machine_options[:convergence_options]
|
80
|
+
new_machine_options['convergence_options'] = machine_options[:convergence_options]
|
81
|
+
elsif machine_options['convergence_options']
|
82
|
+
new_machine_options['convergence_options'] = machine_options['convergence_options']
|
83
|
+
end
|
79
84
|
|
80
|
-
|
81
|
-
|
85
|
+
if machine_spec.location && ssh_machine_exists?(machine_spec.name)
|
86
|
+
_current_machine_options = existing_machine_hash(machine_spec)
|
87
|
+
current_machine_options = stringify_keys(_current_machine_options.dup)
|
88
|
+
end
|
82
89
|
|
83
|
-
|
84
|
-
log_info("machine HASH = #{machine_file_hash}")
|
90
|
+
log_info "machine_spec.name #{machine_spec.name}"
|
85
91
|
|
86
|
-
|
87
|
-
host_for(machine_file_hash['transport_options'])
|
88
|
-
initialize_ssh(machine_file_hash['transport_options'])
|
89
|
-
end
|
92
|
+
log_info "new_machine_options #{new_machine_options} \n\n current_machine_options #{current_machine_options}"
|
90
93
|
|
91
|
-
machine_updated = create_ssh_machine_file(action_handler,
|
92
|
-
machine_spec.name,
|
93
|
-
machine_file_hash)
|
94
|
-
machine_options_for(machine_file_hash)
|
95
94
|
|
96
|
-
|
97
|
-
|
98
|
-
log_info "machine_options_for #{machine_options_for}"
|
95
|
+
machine_file_hash = updated_ssh_machine_file_hash(stringify_keys(new_machine_options),
|
96
|
+
stringify_keys(current_machine_options))
|
99
97
|
|
100
|
-
|
101
|
-
|
102
|
-
'driver_url' => driver_url,
|
103
|
-
'driver_version' => Chef::Provisioning::SshDriver::VERSION,
|
104
|
-
'target_name' => machine_spec.name,
|
105
|
-
'ssh_file_path' => "#{cluster_path}/#{machine_spec.name}.json",
|
106
|
-
'allocated_at' => Time.now.utc.to_s
|
107
|
-
}
|
108
|
-
log_info("machine_spec.location= #{machine_spec.location}")
|
109
|
-
end
|
110
|
-
end
|
98
|
+
raise 'machine File Hash Is Empty' unless machine_file_hash
|
99
|
+
log_info("machine HASH = #{machine_file_hash}")
|
111
100
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
101
|
+
if machine_file_hash && machine_file_hash['transport_options']
|
102
|
+
host_for(machine_file_hash['transport_options'])
|
103
|
+
initialize_ssh(machine_file_hash['transport_options'])
|
104
|
+
end
|
105
|
+
|
106
|
+
machine_updated = create_ssh_machine_file(action_handler,
|
107
|
+
machine_spec.name,
|
108
|
+
machine_file_hash)
|
109
|
+
machine_options_for(machine_file_hash)
|
110
|
+
|
111
|
+
log_info("STRIPPED machine HASH = #{machine_file_hash}")
|
112
|
+
log_info("UNSTRIPPED machine HASH = #{machine_file_hash}")
|
113
|
+
log_info "machine_options_for #{machine_options_for}"
|
114
|
+
|
115
|
+
if machine_updated || !machine_spec.location
|
116
|
+
machine_spec.location = {
|
117
|
+
'driver_url' => driver_url,
|
118
|
+
'driver_version' => Chef::Provisioning::SshDriver::VERSION,
|
119
|
+
'target_name' => machine_spec.name,
|
120
|
+
'ssh_file_path' => "#{cluster_path}/#{machine_spec.name}.json",
|
121
|
+
'allocated_at' => Time.now.utc.to_s
|
122
|
+
}
|
123
|
+
|
124
|
+
# if machine_options[:transport_options]
|
125
|
+
# %w(winrm.host winrm.port winrm.username winrm.password).each do |key|
|
126
|
+
# machine_spec.location[key] = machine_options[:transport_options][key] if machine_options[:vagrant_options][key]
|
127
|
+
# end
|
128
|
+
# end
|
129
|
+
|
130
|
+
log_info("machine_spec.location= #{machine_spec.location}")
|
124
131
|
end
|
125
132
|
end
|
126
|
-
# puts "VVV is #{vvv}"
|
127
|
-
vvv
|
128
133
|
end
|
129
134
|
|
130
135
|
def ready_machine(action_handler, machine_spec, machine_options)
|
131
136
|
allocate_machine(action_handler, machine_spec, machine_options)
|
132
|
-
|
137
|
+
if machine_options[:transport_options] && machine_options[:transport_options]['is_windows']
|
138
|
+
machine_for(machine_spec, machine_options)
|
139
|
+
else
|
140
|
+
machine_for(machine_spec, machine_options_for)
|
141
|
+
end
|
133
142
|
end
|
134
143
|
|
135
144
|
def connect_to_machine(machine_spec, machine_options)
|
136
145
|
allocate_machine(action_handler, machine_spec, machine_options)
|
137
|
-
|
146
|
+
if machine_options[:transport_options] && machine_options[:transport_options]['is_windows']
|
147
|
+
machine_for(machine_spec, machine_options)
|
148
|
+
else
|
149
|
+
machine_for(machine_spec, machine_options_for)
|
150
|
+
end
|
138
151
|
end
|
139
152
|
|
140
153
|
def destroy_machine(action_handler, machine_spec, machine_options)
|
@@ -227,10 +240,10 @@ class Chef
|
|
227
240
|
|
228
241
|
def updated_ssh_machine_file_hash(new_machine_options, current_machine_options)
|
229
242
|
log_info "updated_ssh_machine_file_hash --\nnew_machine_options = #{new_machine_options}\ncurrent_machine_options = #{current_machine_options}"
|
230
|
-
|
243
|
+
if new_machine_options && new_machine_options['convergence_options']
|
231
244
|
use_convergence_options = new_machine_options['convergence_options']
|
232
245
|
else
|
233
|
-
|
246
|
+
use_convergence_options = false
|
234
247
|
end
|
235
248
|
|
236
249
|
if new_machine_options && new_machine_options['transport_options']
|
@@ -289,7 +302,7 @@ class Chef
|
|
289
302
|
host = host_for(opts)
|
290
303
|
|
291
304
|
current_transport_options ||= {}
|
292
|
-
current_transport_options['ssh_options'] ||= {}
|
305
|
+
current_transport_options['ssh_options'] ||= {}
|
293
306
|
current_transport_options['ssh_options']['keys'] = [] unless current_transport_options['ssh_options']['keys']
|
294
307
|
new_transport_options ||= {}
|
295
308
|
new_transport_options['ssh_options'] ||= {}
|
@@ -397,7 +410,7 @@ class Chef
|
|
397
410
|
log_info "@machine_options_for #{@machine_options_for}"
|
398
411
|
return @machine_options_for
|
399
412
|
else
|
400
|
-
|
413
|
+
@machine_options_for ||= begin
|
401
414
|
_given_machine_options = given_machine_options.dup
|
402
415
|
ret_val = false
|
403
416
|
ret_val = symbolize_keys(_given_machine_options) if _given_machine_options
|
@@ -407,22 +420,56 @@ class Chef
|
|
407
420
|
end
|
408
421
|
|
409
422
|
def machine_for(machine_spec, machine_options)
|
410
|
-
|
411
|
-
|
412
|
-
|
423
|
+
if machine_options[:transport_options]['is_windows']
|
424
|
+
Chef::Provisioning::Machine::WindowsMachine.new(machine_spec, create_winrm_transport(machine_options),
|
425
|
+
convergence_strategy_for(machine_spec, machine_options))
|
426
|
+
else
|
427
|
+
Chef::Provisioning::Machine::UnixMachine.new(machine_spec,
|
428
|
+
transport_for(machine_options),
|
429
|
+
convergence_strategy_for(machine_spec, machine_options))
|
430
|
+
end
|
413
431
|
end
|
414
432
|
|
415
433
|
def transport_for(machine_options)
|
416
|
-
|
434
|
+
if machine_options[:transport_options]['is_windows']
|
435
|
+
create_winrm_transport(machine_spec)
|
436
|
+
else
|
437
|
+
Chef::Provisioning::Transport::SSH.new(@target_host, @username, @ssh_options_for_transport, @options, config)
|
438
|
+
end
|
417
439
|
end
|
418
440
|
|
419
441
|
def convergence_strategy_for(machine_spec, machine_options)
|
420
|
-
|
421
|
-
|
422
|
-
|
442
|
+
if machine_options[:transport_options]['is_windows']
|
443
|
+
@windows_convergence_strategy ||= begin
|
444
|
+
Chef::Provisioning::ConvergenceStrategy::InstallMsi.
|
445
|
+
new(machine_options[:convergence_options], config)
|
446
|
+
end
|
447
|
+
else
|
448
|
+
@unix_convergence_strategy ||= begin
|
449
|
+
Chef::Provisioning::ConvergenceStrategy::InstallCached.new(machine_options[:convergence_options],
|
450
|
+
config)
|
451
|
+
end
|
423
452
|
end
|
424
453
|
end
|
425
454
|
|
455
|
+
def create_winrm_transport(machine_options)
|
456
|
+
# forwarded_ports = machine_options[:transport_options]['forwarded_ports']
|
457
|
+
|
458
|
+
# TODO IPv6 loopback? What do we do for that?
|
459
|
+
hostname = machine_options[:transport_options]['host'] || '127.0.0.1'
|
460
|
+
port = machine_options[:transport_options]['port'] || 5985
|
461
|
+
# port = forwarded_ports[port] if forwarded_ports[port]
|
462
|
+
endpoint = "http://#{hostname}:#{port}/wsman"
|
463
|
+
type = :plaintext
|
464
|
+
options = {
|
465
|
+
:user => machine_options[:transport_options]['user'] || 'vagrant',
|
466
|
+
:pass => machine_options[:transport_options]['password'] || 'vagrant',
|
467
|
+
:disable_sspi => true
|
468
|
+
}
|
469
|
+
|
470
|
+
Chef::Provisioning::Transport::WinRM.new(endpoint, type, options, config)
|
471
|
+
end
|
472
|
+
|
426
473
|
# def create_ssh_transport(machine_options)
|
427
474
|
def ssh_options_for(given_ssh_options)
|
428
475
|
machine_ssh_options = stringify_keys(given_ssh_options)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-provisioning-ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zack Zondlo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-provisioning
|
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
103
|
version: '0'
|
104
104
|
requirements: []
|
105
105
|
rubyforge_project:
|
106
|
-
rubygems_version: 2.4.
|
106
|
+
rubygems_version: 2.4.4
|
107
107
|
signing_key:
|
108
108
|
specification_version: 4
|
109
109
|
summary: Provisioner for managing servers using ssh in Chef Provisioning.
|