veewee 0.4.0 → 0.4.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 +8 -8
- data/doc/customize.md +25 -0
- data/lib/veewee/command/group_base.rb +3 -3
- data/lib/veewee/command/helpers.rb +2 -1
- data/lib/veewee/config/ostypes.yml +7 -7
- data/lib/veewee/definition.rb +7 -0
- data/lib/veewee/environment.rb +13 -6
- data/lib/veewee/provider/core/box/ssh.rb +13 -7
- data/lib/veewee/provider/core/helper/iso.rb +9 -8
- data/lib/veewee/provider/core/helper/shell.rb +19 -14
- data/lib/veewee/provider/core/helper/ssh.rb +197 -193
- data/lib/veewee/provider/kvm/box/helper/ssh_options.rb +5 -11
- data/lib/veewee/provider/parallels/box/export.rb +1 -1
- data/lib/veewee/provider/parallels/box/helper/ssh_options.rb +1 -7
- data/lib/veewee/provider/virtualbox/box/helper/ssh_options.rb +8 -14
- data/lib/veewee/provider/vmfusion/box/helper/ssh_options.rb +1 -7
- data/lib/veewee/provider/vmfusion/provider.rb +2 -2
- data/lib/veewee/version.rb +1 -1
- data/templates/Debian-7.0-amd64-netboot/definition.rb +1 -3
- data/templates/Debian-7.0-i386-netboot/definition.rb +1 -3
- data/templates/Debian-7.1.0-amd64-netboot/definition.rb +1 -3
- data/templates/Debian-7.1.0-i386-netboot/definition.rb +1 -3
- data/templates/Debian-7.2.0-amd64-netboot/definition.rb +1 -3
- data/templates/Debian-7.2.0-amd64-netboot/vagrant.sh +3 -2
- data/templates/Debian-7.2.0-i386-netboot/definition.rb +1 -3
- data/templates/Debian-7.2.0-i386-netboot/vagrant.sh +3 -2
- data/templates/Debian-7.3.0-amd64-netboot/definition.rb +1 -3
- data/templates/Debian-7.3.0-i386-netboot/definition.rb +1 -3
- data/templates/Debian-7.4.0-amd64-netboot/definition.rb +1 -3
- data/templates/Debian-7.4.0-i386-netboot/definition.rb +1 -3
- data/templates/Debian-7.5.0-amd64-netboot/definition.rb +1 -3
- data/templates/Debian-7.5.0-i386-netboot/definition.rb +1 -1
- data/templates/Debian-7.6.0-amd64-netboot/definition.rb +1 -1
- data/templates/Debian-7.6.0-i386-netboot/definition.rb +1 -1
- data/veewee.gemspec +2 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjZjNmNkY2FiMjZjZGM0ZTk0ODUwYThmYzhiMzBmYWZkOGI4YmFkOA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MjUyM2UzZWIzOTJiNDk2YzBjOTU0YmYwOGMxNmIwNDcxNjYzMmEwMg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTM3MzVlYzQ3NTZhNTEyODIwMjQ3NDcyMDNjNzFhZGNmOTk0MmViOTE1ZGVi
|
10
|
+
OTAyNjM3OWM4ZTY2MGQ2N2I2N2IxODA1YWJkMzE5MWEyNTYyZDliZTA4NDZh
|
11
|
+
NzVhOWNkN2M0M2FkMDM0OTY3YmU5MmUxYmVlNTYxOTA0ODBiNWY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWU3ZmQwMTRmY2JjNTI0YTFhYzNlMWU1YWExZDhjZWRjYjFjOGI1MjFlOTM5
|
14
|
+
OWI5ODlhMjA0MGJmN2NmNmQwMjVlY2U3ZjExYTM1YWYyNTNlOGQ2MGRlOWM0
|
15
|
+
NWI3MmYwODM4ZWVkMDI5NzhhMjFjMGFiODE2OTM1YzlkMDQyMGY=
|
data/doc/customize.md
CHANGED
@@ -192,6 +192,31 @@ Each provider _can_ take options that are specific the provider; more details wi
|
|
192
192
|
|
193
193
|
This box will have `pae` and `ioapic` enabled with VirtualBox, and will use the `brlxc0` bridge with KVM (on libvirt).
|
194
194
|
|
195
|
+
## Using Yaml for storing configuration
|
196
|
+
|
197
|
+
You can store definitions in `*.yml` files, loading them is as easy as:
|
198
|
+
|
199
|
+
Veewee::Definition.declare_yaml(file_name1, filename2 ...)
|
200
|
+
|
201
|
+
For example given those 3 files:
|
202
|
+
|
203
|
+
.
|
204
|
+
├── definitions
|
205
|
+
│ └── myubuntubox
|
206
|
+
│ ├── definition.rb
|
207
|
+
│ ├── definition.yml
|
208
|
+
│ ├── 64bit.yml
|
209
|
+
│ ├── 32bit.yml
|
210
|
+
│ └── ...
|
211
|
+
|
212
|
+
And `definition.rb` with
|
213
|
+
|
214
|
+
Veewee::Definition.declare_yaml('definition.yml', '64bit.yml')
|
215
|
+
|
216
|
+
Then veewee will read first `definition.yml` and `64bit.yml`, this way
|
217
|
+
it is possible to mix multiple possible combinations of systems,
|
218
|
+
versions, and architectures. All the configurations available in
|
219
|
+
`declare` are also valid in `*yml` files.
|
195
220
|
|
196
221
|
## Up Next
|
197
222
|
|
@@ -92,9 +92,9 @@ module Veewee
|
|
92
92
|
#
|
93
93
|
def self.register(options = {})
|
94
94
|
# self refers to the class object of the provider subclass
|
95
|
-
self.class_variable_set
|
96
|
-
self.class_variable_set
|
97
|
-
self.class_variable_set
|
95
|
+
self.send(:class_variable_set, :@@command, options[:command] )
|
96
|
+
self.send(:class_variable_set, :@@description, options[:description])
|
97
|
+
self.send(:class_variable_set, :@@provider, options[:provider] )
|
98
98
|
CLI.register(self, options[:command], options[:command], options[:description], options[:opts])
|
99
99
|
end
|
100
100
|
|
@@ -10,22 +10,22 @@ Windows7:
|
|
10
10
|
:vbox: Windows7
|
11
11
|
:parallels: win-7
|
12
12
|
Windows8:
|
13
|
-
:fusion:
|
13
|
+
:fusion: windows8
|
14
14
|
:kvm:
|
15
15
|
:vbox: Windows8
|
16
16
|
:parallels: win-8
|
17
17
|
Windows8_64:
|
18
|
-
:fusion:
|
18
|
+
:fusion: windows8-64
|
19
19
|
:kvm:
|
20
20
|
:vbox: Windows8_64
|
21
21
|
:parallels: win-8
|
22
22
|
Windows81:
|
23
|
-
:fusion:
|
23
|
+
:fusion: windows8
|
24
24
|
:kvm:
|
25
25
|
:vbox: Windows81
|
26
26
|
:parallels: win-8
|
27
27
|
Windows81_64:
|
28
|
-
:fusion:
|
28
|
+
:fusion: windows8-64
|
29
29
|
:kvm:
|
30
30
|
:vbox: Windows81_64
|
31
31
|
:parallels: win-8
|
@@ -348,10 +348,10 @@ NetBSD_64:
|
|
348
348
|
:vbox: NetBSD_64
|
349
349
|
:parallels: other
|
350
350
|
ESXi5:
|
351
|
-
:fusion: vmkernel5
|
351
|
+
:fusion: vmkernel5
|
352
352
|
:kvm:
|
353
|
-
:vbox:
|
354
|
-
:parallels:
|
353
|
+
:vbox:
|
354
|
+
:parallels:
|
355
355
|
Darwin_10_7:
|
356
356
|
:fusion: darwin11
|
357
357
|
:kvm:
|
data/lib/veewee/definition.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'yaml'
|
1
2
|
require 'ostruct'
|
2
3
|
require 'veewee/provider/core/helper/iso'
|
3
4
|
|
@@ -124,6 +125,12 @@ module Veewee
|
|
124
125
|
|
125
126
|
end
|
126
127
|
|
128
|
+
def declare_yaml(*files)
|
129
|
+
files.each do |file|
|
130
|
+
declare(YAML.load_file(file))
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
127
134
|
# Class method to loading a definition
|
128
135
|
def self.load(name, env)
|
129
136
|
|
data/lib/veewee/environment.rb
CHANGED
@@ -26,10 +26,10 @@ module Veewee
|
|
26
26
|
# - :validation_dir : directory that contains a list of validation tests, that can be run after building a box
|
27
27
|
# - :tmp_dir : directory that will be used for creating temporary files, needs to be rewritable, default to $environment_dir/tmp
|
28
28
|
attr_accessor :template_path
|
29
|
-
|
30
|
-
|
29
|
+
attr_writer :definition_dir
|
30
|
+
attr_writer :iso_dir
|
31
31
|
attr_accessor :validation_dir
|
32
|
-
|
32
|
+
attr_writer :tmp_dir
|
33
33
|
|
34
34
|
# The {UI} Object to communicate with the outside world
|
35
35
|
attr_writer :ui
|
@@ -66,11 +66,8 @@ module Veewee
|
|
66
66
|
defaults = {
|
67
67
|
:cwd => cwd,
|
68
68
|
:veewee_filename => "Veeweefile",
|
69
|
-
:definition_dir => File.join(cwd, "definitions"),
|
70
69
|
:template_path => [File.expand_path(File.join(File.dirname(__FILE__), "..", "..", 'templates')), "templates"],
|
71
|
-
:iso_dir => File.join(cwd, "iso"),
|
72
70
|
:validation_dir => File.join(File.expand_path(File.join(File.dirname(__FILE__), "..", "..")), "validation"),
|
73
|
-
:tmp_dir => File.join(cwd, "tmp")
|
74
71
|
}
|
75
72
|
|
76
73
|
options = defaults.merge(options)
|
@@ -107,6 +104,16 @@ module Veewee
|
|
107
104
|
return self
|
108
105
|
end
|
109
106
|
|
107
|
+
def definition_dir
|
108
|
+
@definition_dir ||= File.join(cwd, "definitions")
|
109
|
+
end
|
110
|
+
def iso_dir
|
111
|
+
@iso_dir ||= File.join(cwd, "iso")
|
112
|
+
end
|
113
|
+
def tmp_dir
|
114
|
+
tmp_dir ||= File.join(cwd, "tmp")
|
115
|
+
end
|
116
|
+
|
110
117
|
def self.workdir
|
111
118
|
ENV['VEEWEE_DIR'] || Dir.pwd
|
112
119
|
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'veewee/provider/core/helper/ssh'
|
2
2
|
require 'shellwords'
|
3
|
+
require 'pathname'
|
4
|
+
|
3
5
|
module Veewee
|
4
6
|
module Provider
|
5
7
|
module Core
|
6
8
|
module BoxCommand
|
7
9
|
|
8
|
-
|
9
10
|
def ssh(command=nil,options={})
|
10
11
|
|
11
12
|
raise Veewee::Error,"Box is not running" unless self.running?
|
@@ -23,7 +24,8 @@ module Veewee
|
|
23
24
|
end
|
24
25
|
else
|
25
26
|
ssh_options={:user => definition.ssh_user,:password => definition.ssh_password, :port => definition.ssh_host_port}
|
26
|
-
|
27
|
+
ssh_options[:keys] = ssh_key_to_a(definition.ssh_key) if definition.ssh_key
|
28
|
+
ssh_execute(host_ip, command, ssh_options)
|
27
29
|
end
|
28
30
|
|
29
31
|
end
|
@@ -37,13 +39,17 @@ module Veewee
|
|
37
39
|
"-p #{ssh_options[:port]}",
|
38
40
|
"-o UserKnownHostsFile=/dev/null",
|
39
41
|
"-t -o StrictHostKeyChecking=no",
|
40
|
-
"-o IdentitiesOnly=yes",
|
41
42
|
"-o VerifyHostKeyDNS=no"
|
42
43
|
]
|
43
|
-
if
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
if definition.ssh_key
|
45
|
+
command_options << "-o IdentitiesOnly=yes"
|
46
|
+
ssh_keys = ssh_key_to_a(ssh_key)
|
47
|
+
ssh_keys.each do |ssh_keys|
|
48
|
+
# Filenames of SSH keys are relative to their definition
|
49
|
+
ssh_key = Pathname.new(definition.ssh_key)
|
50
|
+
ssh_key = File.join(definition.path, ssh_key) if ssh_key.relative?
|
51
|
+
command_options << "-i #{ssh_key}"
|
52
|
+
end
|
47
53
|
end
|
48
54
|
commandline_options="#{command_options.join(" ")} ".strip
|
49
55
|
|
@@ -31,15 +31,15 @@ module Veewee
|
|
31
31
|
pbar = nil
|
32
32
|
uri = URI.parse(url)
|
33
33
|
uri.open(
|
34
|
-
:content_length_proc => lambda {|t|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
:content_length_proc => lambda { |t|
|
35
|
+
if t && 0 < t
|
36
|
+
pbar = ProgressBar.new("Fetching file", t)
|
37
|
+
pbar.file_transfer_mode
|
38
|
+
end
|
39
|
+
},
|
40
40
|
:progress_proc => lambda {|s|
|
41
|
-
|
42
|
-
|
41
|
+
pbar.set s if pbar
|
42
|
+
},
|
43
43
|
#consider proxy env vars only if host is not excluded
|
44
44
|
:proxy => !no_proxy?(uri.host)
|
45
45
|
) { |src|
|
@@ -58,6 +58,7 @@ module Veewee
|
|
58
58
|
|
59
59
|
#return true if host is excluded from proxy via no_proxy env var, false otherwise
|
60
60
|
def no_proxy? host
|
61
|
+
return false if host.nil?
|
61
62
|
@no_proxy ||= (ENV['NO_PROXY'] || ENV['no_proxy'] || 'localhost, 127.0.0.1').split(/\s*,\s*/)
|
62
63
|
@no_proxy.each do |host_addr|
|
63
64
|
return true if host.match(Regexp.quote(host_addr)+'$')
|
@@ -20,31 +20,36 @@ module Veewee
|
|
20
20
|
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/185404
|
21
21
|
# This should work on windows too now
|
22
22
|
# This will result in a ShellResult structure with stdout, stderr and status
|
23
|
-
def shell_exec(command,options = {
|
24
|
-
defaults={:mute => true, :status => 0}
|
25
|
-
options=defaults.merge(options)
|
26
|
-
result=ShellResult.new("","",-1)
|
23
|
+
def shell_exec(command, options = {})
|
24
|
+
defaults = { :mute => true, :status => 0, :stderr => "&1" }
|
25
|
+
options = defaults.merge(options)
|
26
|
+
result = ShellResult.new("","",-1)
|
27
27
|
ui.info "Executing #{command}" unless options[:mute]
|
28
28
|
env.logger.debug "Command: \"#{command}\""
|
29
29
|
env.logger.debug "Output:"
|
30
30
|
env.logger.debug "-------"
|
31
|
-
escaped_command=command
|
31
|
+
escaped_command = command
|
32
32
|
stderr_redirect = options[:stderr]? options[:stderr] : "&1"
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
io_options = {}
|
34
|
+
io_options[:external_encoding] = options[:external_encoding] if options[:external_encoding]
|
35
|
+
|
36
|
+
IO.popen("#{escaped_command}"+ " 2>#{stderr_redirect}", io_options) do |pipe|
|
37
|
+
pipe.each_line do |line|
|
38
|
+
result.stdout += line
|
39
|
+
ui.info(line, :new_line => false) unless options[:mute]
|
40
|
+
env.logger.debug(line.chomp)
|
41
|
+
end
|
42
|
+
result.status = Process.waitpid2(pipe.pid)[1].exitstatus
|
43
|
+
if
|
44
|
+
result.status.to_i != options[:status]
|
45
|
+
then
|
41
46
|
ui.error "Error: We executed a shell command and the exit status was not #{options[:status]}"
|
42
47
|
ui.error "- Command :#{command}."
|
43
48
|
ui.error "- Exitcode :#{result.status}."
|
44
49
|
ui.error "- Output :\n#{result.stdout}"
|
45
50
|
raise Veewee::Error,"Wrong exit code for command #{command}"
|
46
51
|
end
|
47
|
-
|
52
|
+
end
|
48
53
|
return result
|
49
54
|
end
|
50
55
|
|
@@ -1,3 +1,7 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'net/ssh'
|
3
|
+
require 'net/scp'
|
4
|
+
|
1
5
|
module Veewee
|
2
6
|
module Provider
|
3
7
|
module Core
|
@@ -15,211 +19,211 @@ module Veewee
|
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Veewee::Provider::Core::Helper::Ssh
|
28
|
+
|
29
|
+
def build_ssh_options
|
30
|
+
ssh_options={
|
31
|
+
:user => definition.ssh_user,
|
32
|
+
:port => 22,
|
33
|
+
:password => definition.ssh_password,
|
34
|
+
:timeout => definition.ssh_login_timeout.to_i
|
35
|
+
}
|
36
|
+
ssh_options[:keys] = ssh_key_to_a(definition.ssh_key) if definition.ssh_key
|
37
|
+
return ssh_options
|
38
|
+
end
|
39
|
+
|
40
|
+
def ssh_key_to_a(ssh_key)
|
41
|
+
case ssh_key
|
42
|
+
when "" then []
|
43
|
+
else Array(ssh_key)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# nonblocking ssh connection check
|
48
|
+
def tcp_test_ssh(hostname, port, timeout = 2)
|
49
|
+
|
50
|
+
addr = Socket.getaddrinfo(hostname, nil)
|
51
|
+
sockaddr = Socket.pack_sockaddr_in(port, addr[0][3])
|
52
|
+
|
53
|
+
Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0).tap do |socket|
|
54
|
+
socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
55
|
+
begin
|
56
|
+
socket.connect_nonblock(sockaddr)
|
57
|
+
|
58
|
+
rescue IO::WaitWritable
|
59
|
+
if IO.select(nil, [socket], nil, timeout)
|
60
|
+
begin
|
61
|
+
result = socket.connect_nonblock(sockaddr)
|
62
|
+
if result == 0
|
63
|
+
socket.close
|
64
|
+
return true
|
53
65
|
end
|
54
|
-
|
66
|
+
rescue Errno::EISCONN
|
67
|
+
socket.close
|
68
|
+
return true
|
69
|
+
rescue
|
70
|
+
socket.close
|
71
|
+
return false
|
55
72
|
end
|
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
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
return true
|
92
|
-
end
|
93
|
-
else
|
94
|
-
sleep 5
|
95
|
-
end
|
96
|
-
rescue Net::SSH::Disconnect, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNABORTED, Errno::ECONNRESET, Errno::ENETUNREACH, Errno::ETIMEDOUT
|
97
|
-
sleep 5
|
98
|
-
end
|
99
|
-
end
|
73
|
+
else
|
74
|
+
socket.close
|
75
|
+
return false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
false
|
80
|
+
end
|
81
|
+
|
82
|
+
def when_ssh_login_works(ip="127.0.0.1", options = { } , &block)
|
83
|
+
defaults={ :port => '22', :timeout => 20000 }
|
84
|
+
options=defaults.merge(options)
|
85
|
+
|
86
|
+
timeout = options[:timeout]
|
87
|
+
timeout = ENV['VEEWEE_TIMEOUT'].to_i unless ENV['VEEWEE_TIMEOUT'].nil?
|
88
|
+
|
89
|
+
unless options[:mute]
|
90
|
+
ui.info "Waiting for ssh login on #{ip} with user #{options[:user]} to sshd on port => #{options[:port]} to work, timeout=#{timeout} sec"
|
91
|
+
end
|
92
|
+
|
93
|
+
run_hook(:before_ssh)
|
94
|
+
|
95
|
+
begin
|
96
|
+
Timeout::timeout(timeout) do
|
97
|
+
connected=false
|
98
|
+
while !connected do
|
99
|
+
begin
|
100
|
+
env.ui.info ".",{:new_line => false , :prefix => false} unless options[:mute]
|
101
|
+
if
|
102
|
+
tcp_test_ssh(ip, options[:port])
|
103
|
+
then
|
104
|
+
ssh_connection(ip, options, :timeout => timeout ) do |ssh|
|
105
|
+
ui.info "\n", {:prefix => false} unless options[:mute]
|
106
|
+
block.call(ip);
|
107
|
+
return true
|
100
108
|
end
|
101
|
-
|
102
|
-
ui.info "Received a disconnect; moving on"
|
109
|
+
else
|
103
110
|
sleep 5
|
104
|
-
rescue Timeout::Error
|
105
|
-
raise Veewee::Error, "Ssh timeout #{timeout} sec has been reached."
|
106
111
|
end
|
107
|
-
|
108
|
-
|
112
|
+
rescue Net::SSH::Disconnect, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNABORTED, Errno::ECONNRESET, Errno::ENETUNREACH, Errno::ETIMEDOUT
|
113
|
+
sleep 5
|
109
114
|
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
rescue IOError
|
118
|
+
ui.info "Received a disconnect; moving on"
|
119
|
+
sleep 5
|
120
|
+
rescue Timeout::Error
|
121
|
+
raise Veewee::Error, "Ssh timeout #{timeout} sec has been reached."
|
122
|
+
end
|
123
|
+
ui.info ""
|
124
|
+
return false
|
125
|
+
end
|
126
|
+
|
127
|
+
def ssh_transfer_file(host,filename,destination = '.' , options = {})
|
128
|
+
|
129
|
+
ssh_connection( host, options ) do |ssh|
|
130
|
+
ui.info "Transferring #{filename} to #{destination} "
|
131
|
+
ssh.scp.upload!( filename, destination ) do |ch, name, sent, total|
|
132
|
+
# print "\r#{destination}: #{(sent.to_f * 100 / total.to_f).to_i}%"
|
133
|
+
env.ui.info ".",{:new_line => false , :prefix => false}
|
134
|
+
end
|
135
|
+
end
|
136
|
+
ui.info "", {:prefix => false}
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
def ssh_execute(host,command, options = { :progress => "on"} )
|
141
|
+
defaults= { :port => "22", :exitcode => "0", :user => "root"}
|
142
|
+
options=defaults.merge(options)
|
143
|
+
pid=""
|
144
|
+
stdin=command
|
145
|
+
stdout=""
|
146
|
+
stderr=""
|
147
|
+
status=-99999
|
148
|
+
|
149
|
+
unless options[:mute]
|
150
|
+
ui.info "Executing command: #{command}"
|
151
|
+
end
|
152
|
+
|
153
|
+
ssh_connection( host, options ) do |ssh|
|
154
|
+
|
155
|
+
# open a new channel and configure a minimal set of callbacks, then run
|
156
|
+
# the event loop until the channel finishes (closes)
|
157
|
+
channel = ssh.open_channel do |ch|
|
158
|
+
|
159
|
+
#request pty for sudo stuff and so
|
160
|
+
ch.request_pty do |ch, success|
|
161
|
+
raise "Error requesting pty" unless success
|
162
|
+
end
|
110
163
|
|
164
|
+
ch.exec "#{command}" do |ch, success|
|
165
|
+
raise "could not execute command" unless success
|
111
166
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
:auth_methods => ['password','publickey','keyboard-interactive']
|
117
|
-
}
|
118
|
-
options=defaults.merge(options)
|
119
|
-
|
120
|
-
Net::SSH.start( host,options[:user],options ) do |ssh|
|
121
|
-
ui.info "Transferring #{filename} to #{destination} "
|
122
|
-
ssh.scp.upload!( filename, destination ) do |ch, name, sent, total|
|
123
|
-
# print "\r#{destination}: #{(sent.to_f * 100 / total.to_f).to_i}%"
|
124
|
-
env.ui.info ".",{:new_line => false , :prefix => false}
|
125
|
-
end
|
126
|
-
end
|
127
|
-
ui.info "", {:prefix => false}
|
167
|
+
# "on_data" is called when the process writes something to stdout
|
168
|
+
ch.on_data do |c, data|
|
169
|
+
stdout+=data
|
170
|
+
ui.info(data, :new_line => false) unless options[:mute]
|
128
171
|
end
|
129
172
|
|
173
|
+
# "on_extended_data" is called when the process writes something to stderr
|
174
|
+
# NOTE: When requesting a pty (ch.request_pty), everything goes to stdout
|
175
|
+
ch.on_extended_data do |c, type, data|
|
176
|
+
stderr+=data
|
177
|
+
ui.info(data, :new_line => false) unless options[:mute]
|
178
|
+
end
|
130
179
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
unless options[:mute]
|
141
|
-
ui.info "Executing command: #{command}"
|
142
|
-
end
|
143
|
-
|
144
|
-
Net::SSH.start(host, options[:user], {
|
145
|
-
:port => options[:port],
|
146
|
-
:password => options[:password],
|
147
|
-
:auth_methods => ['password','publickey','keyboard-interactive'],
|
148
|
-
:paranoid => false }) do |ssh|
|
149
|
-
|
150
|
-
# open a new channel and configure a minimal set of callbacks, then run
|
151
|
-
# the event loop until the channel finishes (closes)
|
152
|
-
channel = ssh.open_channel do |ch|
|
153
|
-
|
154
|
-
#request pty for sudo stuff and so
|
155
|
-
ch.request_pty do |ch, success|
|
156
|
-
raise "Error requesting pty" unless success
|
157
|
-
end
|
158
|
-
|
159
|
-
ch.exec "#{command}" do |ch, success|
|
160
|
-
raise "could not execute command" unless success
|
161
|
-
|
162
|
-
|
163
|
-
# "on_data" is called when the process writes something to stdout
|
164
|
-
ch.on_data do |c, data|
|
165
|
-
stdout+=data
|
166
|
-
|
167
|
-
ui.info(data, :new_line => false) unless options[:mute]
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
# "on_extended_data" is called when the process writes something to stderr
|
172
|
-
# NOTE: When requesting a pty (ch.request_pty), everything goes to stdout
|
173
|
-
ch.on_extended_data do |c, type, data|
|
174
|
-
stderr+=data
|
175
|
-
|
176
|
-
ui.info(data, :new_line => false) unless options[:mute]
|
177
|
-
|
178
|
-
end
|
179
|
-
|
180
|
-
#exit code
|
181
|
-
#http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/a806b0f5dae4e1e2
|
182
|
-
channel.on_request("exit-status") do |ch, data|
|
183
|
-
exit_code = data.read_long
|
184
|
-
status=exit_code
|
185
|
-
if exit_code > 0
|
186
|
-
ui.info "ERROR: exit code #{exit_code}" unless options[:mute]
|
187
|
-
else
|
188
|
-
#ui.info "Successfully executed"
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
channel.on_request("exit-signal") do |ch, data|
|
193
|
-
ui.info "SIGNAL: #{data.read_long}" unless options[:mute]
|
194
|
-
end
|
195
|
-
|
196
|
-
ch.on_close {
|
197
|
-
#ui.info "done!"
|
198
|
-
}
|
199
|
-
#status=ch.exec "echo $?"
|
200
|
-
end
|
201
|
-
end
|
202
|
-
channel.wait
|
203
|
-
end
|
204
|
-
|
205
|
-
|
206
|
-
if (status.to_s != options[:exitcode] )
|
207
|
-
if (options[:exitcode]=="*")
|
208
|
-
#its a test so we don't need to worry
|
209
|
-
else
|
210
|
-
raise Veewee::Provider::Core::Helper::SshResult.new(stdout,stderr,status), "Exitcode was not what we expected"
|
211
|
-
end
|
212
|
-
|
180
|
+
#exit code
|
181
|
+
#http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/a806b0f5dae4e1e2
|
182
|
+
channel.on_request("exit-status") do |ch, data|
|
183
|
+
exit_code = data.read_long
|
184
|
+
status=exit_code
|
185
|
+
if exit_code > 0
|
186
|
+
ui.info "ERROR: exit code #{exit_code}" unless options[:mute]
|
187
|
+
else
|
188
|
+
#ui.info "Successfully executed"
|
213
189
|
end
|
214
|
-
|
215
|
-
return Veewee::Provider::Core::Helper::SshResult.new(stdout,stderr,status)
|
216
|
-
|
217
190
|
end
|
218
191
|
|
192
|
+
channel.on_request("exit-signal") do |ch, data|
|
193
|
+
ui.info "SIGNAL: #{data.read_long}" unless options[:mute]
|
194
|
+
end
|
219
195
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
end
|
196
|
+
ch.on_close {
|
197
|
+
#ui.info "done!"
|
198
|
+
}
|
199
|
+
#status=ch.exec "echo $?"
|
200
|
+
end
|
201
|
+
end
|
202
|
+
channel.wait
|
203
|
+
end
|
204
|
+
|
205
|
+
if (status.to_s != options[:exitcode] )
|
206
|
+
if (options[:exitcode]=="*")
|
207
|
+
#its a test so we don't need to worry
|
208
|
+
else
|
209
|
+
raise Veewee::Provider::Core::Helper::SshResult.new(stdout,stderr,status), "Exitcode was not what we expected"
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
return Veewee::Provider::Core::Helper::SshResult.new(stdout,stderr,status)
|
215
|
+
end
|
216
|
+
|
217
|
+
def ssh_connection(host, options, defaults={}, &block)
|
218
|
+
options=defaults.merge(options)
|
219
|
+
options={
|
220
|
+
:auth_methods => %w[ password publickey keyboard-interactive ],
|
221
|
+
:paranoid => false
|
222
|
+
}.merge(options)
|
223
|
+
options=Hash[ options.select { |key, value| Net::SSH::VALID_OPTIONS.include?(key) } ]
|
224
|
+
Net::SSH.start( host, options[:user], options ) do |ssh|
|
225
|
+
yield ssh
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
end
|
@@ -4,16 +4,10 @@ module Veewee
|
|
4
4
|
module BoxCommand
|
5
5
|
|
6
6
|
def ssh_options
|
7
|
-
|
8
|
-
:user => definition.ssh_user,
|
9
|
-
:port => 22,
|
10
|
-
:password => definition.ssh_password,
|
11
|
-
:timeout => definition.ssh_login_timeout.to_i
|
12
|
-
}
|
13
|
-
return ssh_options
|
7
|
+
build_ssh_options
|
14
8
|
end
|
15
9
|
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -175,7 +175,7 @@ module Veewee
|
|
175
175
|
def optimize_disk
|
176
176
|
env.ui.info "Optimizing Disk"
|
177
177
|
path_to_hdd = File.join read_settings.fetch("Home"), "harddisk.hdd"
|
178
|
-
optimize_command = "#{@prldisktool} compact --
|
178
|
+
optimize_command = "#{@prldisktool} compact --hdd #{path_to_hdd}"
|
179
179
|
shell_exec optimize_command
|
180
180
|
end
|
181
181
|
end #Module
|
@@ -5,13 +5,7 @@ module Veewee
|
|
5
5
|
|
6
6
|
# Translate the definition ssh options to ssh options that can be passed to Net::Ssh calls
|
7
7
|
def ssh_options
|
8
|
-
|
9
|
-
:user => definition.ssh_user,
|
10
|
-
:port => 22,
|
11
|
-
:password => definition.ssh_password,
|
12
|
-
:timeout => definition.ssh_login_timeout.to_i
|
13
|
-
}
|
14
|
-
return ssh_options
|
8
|
+
build_ssh_options
|
15
9
|
end
|
16
10
|
|
17
11
|
end
|
@@ -4,22 +4,16 @@ module Veewee
|
|
4
4
|
module BoxCommand
|
5
5
|
|
6
6
|
def ssh_options
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
build_ssh_options.tap do |options|
|
8
|
+
port = definition.ssh_host_port
|
9
|
+
if self.exists?
|
10
|
+
forward=self.forwarding("guestssh")
|
11
|
+
unless forward.nil?
|
12
|
+
port=forward[:host_port]
|
13
|
+
end
|
12
14
|
end
|
15
|
+
options[:port] = port
|
13
16
|
end
|
14
|
-
|
15
|
-
ssh_options={
|
16
|
-
:user => definition.ssh_user,
|
17
|
-
:port => port,
|
18
|
-
:password => definition.ssh_password,
|
19
|
-
:timeout => definition.ssh_login_timeout.to_i
|
20
|
-
}
|
21
|
-
return ssh_options
|
22
|
-
|
23
17
|
end
|
24
18
|
|
25
19
|
end
|
@@ -5,13 +5,7 @@ module Veewee
|
|
5
5
|
|
6
6
|
# Translate the definition ssh options to ssh options that can be passed to Net::Ssh calls
|
7
7
|
def ssh_options
|
8
|
-
|
9
|
-
:user => definition.ssh_user,
|
10
|
-
:port => 22,
|
11
|
-
:password => definition.ssh_password,
|
12
|
-
:timeout => definition.ssh_login_timeout.to_i
|
13
|
-
}
|
14
|
-
return ssh_options
|
8
|
+
build_ssh_options
|
15
9
|
end
|
16
10
|
|
17
11
|
end
|
@@ -22,12 +22,12 @@ module Veewee
|
|
22
22
|
|
23
23
|
def fusion_version
|
24
24
|
# We ask the system profiler for all installed software
|
25
|
-
shell_results = shell_exec("system_profiler SPApplicationsDataType")
|
25
|
+
shell_results = shell_exec("system_profiler SPApplicationsDataType", :external_encoding => Encoding::UTF_8)
|
26
26
|
|
27
27
|
env.logger.info("Checking version by querying the system_profiler")
|
28
28
|
env.logger.debug(shell_results.stdout)
|
29
29
|
|
30
|
-
if
|
30
|
+
if shell_results.stdout == ""
|
31
31
|
ui.warn "Could not detect the exact version of vmware. assuming 5.1"
|
32
32
|
version = "5.1"
|
33
33
|
else
|
data/lib/veewee/version.rb
CHANGED
@@ -6,9 +6,7 @@ Veewee::Definition.declare({
|
|
6
6
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
7
7
|
:os_type_id => 'Debian_64',
|
8
8
|
:iso_file => "debian-7.0.0-amd64-netinst.iso",
|
9
|
-
:iso_src => "",
|
10
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
11
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.0.0/amd64/ and download it via torrent or jigdo",
|
9
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.0.0/amd64/iso-cd/debian-7.0.0-amd64-netinst.iso",
|
12
10
|
:iso_md5 => "6a55096340b5b1b7d335d5b559e13ea0",
|
13
11
|
:iso_download_timeout => "1000",
|
14
12
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -7,9 +7,7 @@ Veewee::Definition.declare({
|
|
7
7
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
8
8
|
:os_type_id => 'Debian',
|
9
9
|
:iso_file => "debian-7.0.0-i386-netinst.iso",
|
10
|
-
:iso_src => "",
|
11
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
12
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.0.0/i386/ and download it via torrent or jigdo",
|
10
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.0.0/i386/iso-cd/debian-7.0.0-i386-netinst.iso",
|
13
11
|
:iso_md5 => "a6b93666a5393334accb7ac4ee28d949",
|
14
12
|
:iso_download_timeout => "1000",
|
15
13
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -6,9 +6,7 @@ Veewee::Definition.declare({
|
|
6
6
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
7
7
|
:os_type_id => 'Debian_64',
|
8
8
|
:iso_file => "debian-7.1.0-amd64-netinst.iso",
|
9
|
-
:iso_src => "",
|
10
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
11
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.1.0/amd64/ and download it via torrent or jigdo",
|
9
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.1.0/amd64/iso-cd/debian-7.1.0-amd64-netinst.iso",
|
12
10
|
:iso_md5 => "80f498a1f9daa76bc911ae13692e4495",
|
13
11
|
:iso_download_timeout => "1000",
|
14
12
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -4,9 +4,7 @@ Veewee::Definition.declare({
|
|
4
4
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
5
5
|
:os_type_id => 'Debian',
|
6
6
|
:iso_file => "debian-7.1.0-i386-netinst.iso",
|
7
|
-
:iso_src => "",
|
8
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
9
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.1.0/i386/ and download it via torrent or jigdo",
|
7
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.1.0/i386/iso-cd/debian-7.1.0-i386-netinst.iso",
|
10
8
|
:iso_md5 => "a70efb67ca061175eabe7c5dc04ab323",
|
11
9
|
:iso_download_timeout => "1000",
|
12
10
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -6,9 +6,7 @@ Veewee::Definition.declare({
|
|
6
6
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
7
7
|
:os_type_id => 'Debian_64',
|
8
8
|
:iso_file => "debian-7.2.0-amd64-netinst.iso",
|
9
|
-
:iso_src => "",
|
10
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
11
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.2.0/amd64/ and download it via torrent or jigdo",
|
9
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.2.0/amd64/iso-cd/debian-7.2.0-amd64-netinst.iso",
|
12
10
|
:iso_md5 => "b86774fe4de88be6378ba3d71b8029bd",
|
13
11
|
:iso_download_timeout => "1000",
|
14
12
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -7,8 +7,9 @@ useradd -G sudo -p $(perl -e'print crypt("vagrant", "vagrant")') -m -s /bin/bash
|
|
7
7
|
|
8
8
|
# Install vagrant keys
|
9
9
|
mkdir -pm 700 /home/vagrant/.ssh
|
10
|
-
curl -
|
11
|
-
'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
|
10
|
+
curl -fLo /home/vagrant/.ssh/authorized_keys \
|
11
|
+
'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' ||
|
12
|
+
exit $?
|
12
13
|
chmod 0600 /home/vagrant/.ssh/authorized_keys
|
13
14
|
chown -R vagrant:vagrant /home/vagrant/.ssh
|
14
15
|
|
@@ -4,9 +4,7 @@ Veewee::Definition.declare({
|
|
4
4
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
5
5
|
:os_type_id => 'Debian',
|
6
6
|
:iso_file => "debian-7.2.0-i386-netinst.iso",
|
7
|
-
:iso_src => "",
|
8
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
9
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.2.0/i386/ and download it via torrent or jigdo",
|
7
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.2.0/i386/iso-cd/debian-7.2.0-i386-netinst.iso",
|
10
8
|
:iso_md5 => "564282a81b5aef7015501e497fc63d81",
|
11
9
|
:iso_download_timeout => "1000",
|
12
10
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -11,8 +11,9 @@ useradd -G sudo -p $(perl -e'print crypt("vagrant", "vagrant")') -m -s /bin/bash
|
|
11
11
|
|
12
12
|
# Install vagrant keys
|
13
13
|
mkdir -pm 700 /home/vagrant/.ssh
|
14
|
-
curl -
|
15
|
-
'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
|
14
|
+
curl -fLo /home/vagrant/.ssh/authorized_keys \
|
15
|
+
'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' ||
|
16
|
+
exit $?
|
16
17
|
chmod 0600 /home/vagrant/.ssh/authorized_keys
|
17
18
|
chown -R vagrant:vagrant /home/vagrant/.ssh
|
18
19
|
|
@@ -6,9 +6,7 @@ Veewee::Definition.declare({
|
|
6
6
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
7
7
|
:os_type_id => 'Debian_64',
|
8
8
|
:iso_file => "debian-7.3.0-amd64-netinst.iso",
|
9
|
-
:iso_src => "",
|
10
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
11
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.3.0/amd64/ and download it via torrent or jigdo",
|
9
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.3.0/amd64/iso-cd/debian-7.3.0-amd64-netinst.iso",
|
12
10
|
:iso_md5 => "72473e8a5e65b61acc7efde90d9f71d1",
|
13
11
|
:iso_download_timeout => "1000",
|
14
12
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -4,9 +4,7 @@ Veewee::Definition.declare({
|
|
4
4
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
5
5
|
:os_type_id => 'Debian',
|
6
6
|
:iso_file => "debian-7.3.0-i386-netinst.iso",
|
7
|
-
:iso_src => "",
|
8
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
9
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.3.0/i386/ and download it via torrent or jigdo",
|
7
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.3.0/i386/iso-cd/debian-7.3.0-i386-netinst.iso",
|
10
8
|
:iso_md5 => "04c58f30744e64a0459caf7d7cace479",
|
11
9
|
:iso_download_timeout => "1000",
|
12
10
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -6,9 +6,7 @@ Veewee::Definition.declare({
|
|
6
6
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
7
7
|
:os_type_id => 'Debian_64',
|
8
8
|
:iso_file => "debian-7.4.0-amd64-netinst.iso",
|
9
|
-
:iso_src => "",
|
10
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
11
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.4.0/amd64/ and download it via torrent or jigdo",
|
9
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.4.0/amd64/iso-cd/debian-7.4.0-amd64-netinst.iso",
|
12
10
|
:iso_md5 => "e7e9433973f082a297793c3c5010b2c5",
|
13
11
|
:iso_download_timeout => "1000",
|
14
12
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -4,9 +4,7 @@ Veewee::Definition.declare({
|
|
4
4
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
5
5
|
:os_type_id => 'Debian',
|
6
6
|
:iso_file => "debian-7.4.0-i386-netinst.iso",
|
7
|
-
:iso_src => "",
|
8
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
9
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.4.0/i386/ and download it via torrent or jigdo",
|
7
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.4.0/i386/iso-cd/debian-7.4.0-i386-netinst.iso",
|
10
8
|
:iso_md5 => "7339b668a81b417ac023d73739dc6a03",
|
11
9
|
:iso_download_timeout => "1000",
|
12
10
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -6,9 +6,7 @@ Veewee::Definition.declare({
|
|
6
6
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
7
7
|
:os_type_id => 'Debian_64',
|
8
8
|
:iso_file => "debian-7.5.0-amd64-netinst.iso",
|
9
|
-
:iso_src => "",
|
10
|
-
:iso_download_instructions => "- You need to download this manually as the ISO is no longer directly downloadable.\n"+
|
11
|
-
"Visit http://cdimage.debian.org/cdimage/archive/7.5.0/amd64/ and download it via torrent or jigdo",
|
9
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.5.0/amd64/iso-cd/debian-7.5.0-amd64-netinst.iso",
|
12
10
|
:iso_md5 => "8fdb6715228ea90faba58cb84644d296",
|
13
11
|
:iso_download_timeout => "1000",
|
14
12
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -4,7 +4,7 @@ Veewee::Definition.declare({
|
|
4
4
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
5
5
|
:os_type_id => 'Debian',
|
6
6
|
:iso_file => "debian-7.5.0-i386-netinst.iso",
|
7
|
-
:iso_src => "http://
|
7
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.5.0/i386/iso-cd/debian-7.5.0-i386-netinst.iso",
|
8
8
|
:iso_md5 => "0e6eaacb5a5828473afe90f6df9c8f16",
|
9
9
|
:iso_download_timeout => "1000",
|
10
10
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -6,7 +6,7 @@ Veewee::Definition.declare({
|
|
6
6
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
7
7
|
:os_type_id => 'Debian_64',
|
8
8
|
:iso_file => "debian-7.6.0-amd64-netinst.iso",
|
9
|
-
:iso_src => "http://
|
9
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.6.0/amd64/iso-cd/debian-7.6.0-amd64-netinst.iso",
|
10
10
|
:iso_md5 => "8a3c2ad7fd7a9c4c7e9bcb5cae38c135",
|
11
11
|
:iso_download_timeout => "1000",
|
12
12
|
:boot_wait => "10", :boot_cmd_sequence => [
|
@@ -4,7 +4,7 @@ Veewee::Definition.declare({
|
|
4
4
|
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
|
5
5
|
:os_type_id => 'Debian',
|
6
6
|
:iso_file => "debian-7.6.0-i386-netinst.iso",
|
7
|
-
:iso_src => "http://
|
7
|
+
:iso_src => "http://mirror.i3d.net/pub/debian-cd/7.6.0/i386/iso-cd/debian-7.6.0-i386-netinst.iso",
|
8
8
|
:iso_md5 => "528e1a7315da1bbf50bd4d187880a519",
|
9
9
|
:iso_download_timeout => "1000",
|
10
10
|
:boot_wait => "10", :boot_cmd_sequence => [
|
data/veewee.gemspec
CHANGED
@@ -5,6 +5,7 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = "veewee"
|
6
6
|
s.version = Veewee::VERSION
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
|
+
s.license = 'MIT'
|
8
9
|
s.authors = ["Patrick Debois"]
|
9
10
|
s.email = ["patrick.debois@jedi.be"]
|
10
11
|
s.homepage = "http://github.com/jedi4ever/veewee/"
|
@@ -34,7 +35,7 @@ Gem::Specification.new do |s|
|
|
34
35
|
s.add_dependency "fog", "~> 1.8"
|
35
36
|
s.add_dependency "childprocess"
|
36
37
|
s.add_dependency "grit"
|
37
|
-
s.add_dependency "fission", "0.
|
38
|
+
s.add_dependency "fission", "0.5.0"
|
38
39
|
s.add_dependency "to_slug"
|
39
40
|
s.add_dependency "os", "~> 0.9.6"
|
40
41
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: veewee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Debois
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
@@ -198,14 +198,14 @@ dependencies:
|
|
198
198
|
requirements:
|
199
199
|
- - '='
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: 0.
|
201
|
+
version: 0.5.0
|
202
202
|
type: :runtime
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - '='
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version: 0.
|
208
|
+
version: 0.5.0
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: to_slug
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -2327,7 +2327,8 @@ files:
|
|
2327
2327
|
- validation/vagrant.pub
|
2328
2328
|
- veewee.gemspec
|
2329
2329
|
homepage: http://github.com/jedi4ever/veewee/
|
2330
|
-
licenses:
|
2330
|
+
licenses:
|
2331
|
+
- MIT
|
2331
2332
|
metadata: {}
|
2332
2333
|
post_install_message:
|
2333
2334
|
rdoc_options: []
|