veewee 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +8 -8
  2. data/doc/customize.md +25 -0
  3. data/lib/veewee/command/group_base.rb +3 -3
  4. data/lib/veewee/command/helpers.rb +2 -1
  5. data/lib/veewee/config/ostypes.yml +7 -7
  6. data/lib/veewee/definition.rb +7 -0
  7. data/lib/veewee/environment.rb +13 -6
  8. data/lib/veewee/provider/core/box/ssh.rb +13 -7
  9. data/lib/veewee/provider/core/helper/iso.rb +9 -8
  10. data/lib/veewee/provider/core/helper/shell.rb +19 -14
  11. data/lib/veewee/provider/core/helper/ssh.rb +197 -193
  12. data/lib/veewee/provider/kvm/box/helper/ssh_options.rb +5 -11
  13. data/lib/veewee/provider/parallels/box/export.rb +1 -1
  14. data/lib/veewee/provider/parallels/box/helper/ssh_options.rb +1 -7
  15. data/lib/veewee/provider/virtualbox/box/helper/ssh_options.rb +8 -14
  16. data/lib/veewee/provider/vmfusion/box/helper/ssh_options.rb +1 -7
  17. data/lib/veewee/provider/vmfusion/provider.rb +2 -2
  18. data/lib/veewee/version.rb +1 -1
  19. data/templates/Debian-7.0-amd64-netboot/definition.rb +1 -3
  20. data/templates/Debian-7.0-i386-netboot/definition.rb +1 -3
  21. data/templates/Debian-7.1.0-amd64-netboot/definition.rb +1 -3
  22. data/templates/Debian-7.1.0-i386-netboot/definition.rb +1 -3
  23. data/templates/Debian-7.2.0-amd64-netboot/definition.rb +1 -3
  24. data/templates/Debian-7.2.0-amd64-netboot/vagrant.sh +3 -2
  25. data/templates/Debian-7.2.0-i386-netboot/definition.rb +1 -3
  26. data/templates/Debian-7.2.0-i386-netboot/vagrant.sh +3 -2
  27. data/templates/Debian-7.3.0-amd64-netboot/definition.rb +1 -3
  28. data/templates/Debian-7.3.0-i386-netboot/definition.rb +1 -3
  29. data/templates/Debian-7.4.0-amd64-netboot/definition.rb +1 -3
  30. data/templates/Debian-7.4.0-i386-netboot/definition.rb +1 -3
  31. data/templates/Debian-7.5.0-amd64-netboot/definition.rb +1 -3
  32. data/templates/Debian-7.5.0-i386-netboot/definition.rb +1 -1
  33. data/templates/Debian-7.6.0-amd64-netboot/definition.rb +1 -1
  34. data/templates/Debian-7.6.0-i386-netboot/definition.rb +1 -1
  35. data/veewee.gemspec +2 -1
  36. metadata +6 -5
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZGJiYzY0MzVhMmQ3NWE3YWMzODhkZjg0NzJkOTVmYzEzYjg1YmM5OQ==
4
+ NjZjNmNkY2FiMjZjZGM0ZTk0ODUwYThmYzhiMzBmYWZkOGI4YmFkOA==
5
5
  data.tar.gz: !binary |-
6
- MmQzNmI5ZDI4OWIzM2QyNjM3MGY0NTVjNmZhMTYwZDgxZmVmNzkwMg==
6
+ MjUyM2UzZWIzOTJiNDk2YzBjOTU0YmYwOGMxNmIwNDcxNjYzMmEwMg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MjIyMGM1YmVkMmI1YzU4ZjA2MzFmYTcwNmU3OWYwZDRhNWJmNTk4YmRjZDZi
10
- ZTI3MmFkNDA3MWI3MmZjNjA1MzdmY2MxYTQyOTEwNjZhMzgwMzA3ZDhiOGJm
11
- NDY3NTRhYmFhYjVhY2NlYWQwNjhiZjZjNWI4ZTkzOWU4OWUyNDc=
9
+ OTM3MzVlYzQ3NTZhNTEyODIwMjQ3NDcyMDNjNzFhZGNmOTk0MmViOTE1ZGVi
10
+ OTAyNjM3OWM4ZTY2MGQ2N2I2N2IxODA1YWJkMzE5MWEyNTYyZDliZTA4NDZh
11
+ NzVhOWNkN2M0M2FkMDM0OTY3YmU5MmUxYmVlNTYxOTA0ODBiNWY=
12
12
  data.tar.gz: !binary |-
13
- M2FiMDk4M2Q4ZWU0YTczZWJkM2YyOTczYWRkOGJjZmE3NzM3YTM4NWMxMGFm
14
- Yjg1OWUyMGRhZDhjMjJjOWFjZDUxZjc1MzkzYjM2NmVlNDllNmNjNThjNWVm
15
- NjNkY2I1M2VhMWQ1OTYzNTc1ZTc2YTY4MWFiNGYwNzFkMjMyNmI=
13
+ OWU3ZmQwMTRmY2JjNTI0YTFhYzNlMWU1YWExZDhjZWRjYjFjOGI1MjFlOTM5
14
+ OWI5ODlhMjA0MGJmN2NmNmQwMjVlY2U3ZjExYTM1YWYyNTNlOGQ2MGRlOWM0
15
+ NWI3MmYwODM4ZWVkMDI5NzhhMjFjMGFiODE2OTM1YzlkMDQyMGY=
@@ -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(:@@command, options[:command])
96
- self.class_variable_set(:@@description, options[:description])
97
- self.class_variable_set(:@@provider, options[:provider])
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
 
@@ -6,8 +6,9 @@ module Veewee
6
6
  def initialize_environment(args, options, config)
7
7
  raise Errors::CLIMissingEnvironment if !config[:env]
8
8
  @env = config[:env]
9
+ @env.cwd = File.expand_path(@options[:cwd]) if @options[:cwd]
9
10
  end
10
11
 
11
12
  end
12
13
  end
13
- end
14
+ end
@@ -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:
@@ -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
 
@@ -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
- attr_accessor :definition_dir
30
- attr_accessor :iso_dir
29
+ attr_writer :definition_dir
30
+ attr_writer :iso_dir
31
31
  attr_accessor :validation_dir
32
- attr_accessor :tmp_dir
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
- ssh_execute(host_ip,command,ssh_options)
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 !(definition.ssh_key.nil? || definition.ssh_key.empty?)
44
- # Filenames of SSH keys are relative to their definition
45
- ssh_key = File.join(definition.path, definition.ssh_key)
46
- command_options << "-i #{ssh_key}"
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
- if t && 0 < t
36
- pbar = ProgressBar.new("Fetching file", t)
37
- pbar.file_transfer_mode
38
- end
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
- pbar.set s if pbar
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 = {:mute => true,:status => 0,:stderr => "&1"})
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
- IO.popen("#{escaped_command}"+ " 2>#{stderr_redirect}") { |p|
34
- p.each_line{ |l|
35
- result.stdout+=l
36
- ui.info(l,{:new_line => false}) unless options[:mute]
37
- env.logger.debug(l.chomp)
38
- }
39
- result.status=Process.waitpid2(p.pid)[1].exitstatus
40
- if result.status.to_i!=options[:status]
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
- module Ssh
19
-
20
- require 'socket'
21
-
22
- # nonblocking ssh connection check
23
- def tcp_test_ssh(hostname, port, timeout = 2)
24
-
25
- addr = Socket.getaddrinfo(hostname, nil)
26
- sockaddr = Socket.pack_sockaddr_in(port, addr[0][3])
27
-
28
- Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0).tap do |socket|
29
- socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
30
- begin
31
- socket.connect_nonblock(sockaddr)
32
-
33
- rescue IO::WaitWritable
34
- if IO.select(nil, [socket], nil, timeout)
35
- begin
36
- result = socket.connect_nonblock(sockaddr)
37
- if result == 0
38
- socket.close
39
- return true
40
- end
41
- rescue Errno::EISCONN
42
- socket.close
43
- return true
44
- rescue
45
- socket.close
46
- return false
47
- end
48
- else
49
- socket.close
50
- return false
51
- end
52
- end
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
- false
66
+ rescue Errno::EISCONN
67
+ socket.close
68
+ return true
69
+ rescue
70
+ socket.close
71
+ return false
55
72
  end
56
-
57
- require 'net/ssh'
58
- require 'net/scp'
59
-
60
- def when_ssh_login_works(ip="127.0.0.1", options = { } , &block)
61
-
62
- defaults={ :port => '22', :timeout => 20000 }
63
-
64
- options=defaults.merge(options)
65
-
66
- timeout = options[:timeout]
67
- timeout=ENV['VEEWEE_TIMEOUT'].to_i unless ENV['VEEWEE_TIMEOUT'].nil?
68
-
69
- unless options[:mute]
70
- ui.info "Waiting for ssh login on #{ip} with user #{options[:user]} to sshd on port => #{options[:port]} to work, timeout=#{timeout} sec"
71
- end
72
-
73
- run_hook(:before_ssh)
74
-
75
- begin
76
- Timeout::timeout(timeout) do
77
- connected=false
78
- while !connected do
79
- begin
80
- env.ui.info ".",{:new_line => false , :prefix => false} unless options[:mute]
81
- if tcp_test_ssh(ip, options[:port])
82
- Net::SSH.start(ip, options[:user],
83
- { :port => options[:port],
84
- :password => options[:password],
85
- :auth_methods => ['password','publickey','keyboard-interactive'],
86
- :paranoid => false ,
87
- :timeout => timeout }) do |ssh|
88
-
89
- ui.info "\n", {:prefix => false} unless options[:mute]
90
- block.call(ip);
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
- rescue IOError
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
- ui.info ""
108
- return false
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
- def ssh_transfer_file(host,filename,destination = '.' , options = {})
113
-
114
- defaults={
115
- :paranoid => false,
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
- def ssh_execute(host,command, options = { :progress => "on"} )
132
- defaults= { :port => "22", :exitcode => "0", :user => "root"}
133
- options=defaults.merge(options)
134
- pid=""
135
- stdin=command
136
- stdout=""
137
- stderr=""
138
- status=-99999
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
- end #Class
222
- end #Module
223
- end #Module
224
- end #Module
225
- end #Module
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
- ssh_options={
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 # End Module
17
- end # End Module
18
- end # End Module
19
- end # End Module
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 --buildmap --hdd #{path_to_hdd}"
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
- ssh_options={
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
- port=definition.ssh_host_port
8
- if self.exists?
9
- forward=self.forwarding("guestssh")
10
- unless forward.nil?
11
- port=forward[:host_port]
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
- ssh_options={
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 (shell_results.stdout == "")
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
@@ -4,5 +4,5 @@ end
4
4
 
5
5
  # Only set the version constant if it wasn't set before
6
6
  unless defined?(Veewee::VERSION)
7
- ::Veewee::VERSION="0.4.0"
7
+ ::Veewee::VERSION="0.4.1"
8
8
  end
@@ -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 -Lo /home/vagrant/.ssh/authorized_keys \
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 -Lo /home/vagrant/.ssh/authorized_keys \
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://cdimage.debian.org/cdimage/archive/7.5.0/i386/iso-cd/debian-7.5.0-i386-netinst.iso",
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://cdimage.debian.org/debian-cd/7.6.0/amd64/iso-cd/debian-7.6.0-amd64-netinst.iso",
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://cdimage.debian.org/debian-cd/7.6.0/i386/iso-cd/debian-7.6.0-i386-netinst.iso",
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 => [
@@ -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.4.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.0
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-01 00:00:00.000000000 Z
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.4.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.4.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: []