veewee 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|