veewee 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +29 -26
- data/README.md +51 -26
- data/Rakefile +41 -36
- data/lib/veewee/scancode.rb +1 -1
- data/lib/veewee/session.rb +156 -159
- data/lib/veewee/version.rb +1 -1
- data/templates/CentOS-4.8-i386/postinstall.sh +1 -1
- data/templates/CentOS-5.5-x86_64-netboot/definition.rb +16 -0
- data/templates/CentOS-5.5-x86_64-netboot/ks.cfg +46 -0
- data/templates/CentOS-5.5-x86_64-netboot/postinstall.sh +60 -0
- data/templates/CentOS-5.6-i386-netboot/definition.rb +1 -1
- data/templates/CentOS-5.6-i386-netboot/ks.cfg +2 -2
- data/templates/CentOS-5.6-i386-netboot/postinstall.sh +1 -1
- data/templates/CentOS-5.6-i386/postinstall.sh +1 -1
- data/templates/CentOS-5.6-x86_64-netboot/definition.rb +1 -1
- data/templates/CentOS-5.6-x86_64-netboot/ks.cfg +1 -1
- data/templates/CentOS-5.6-x86_64-netboot/postinstall.sh +3 -2
- data/templates/CentOS-5.7-i386-netboot/definition.rb +16 -0
- data/templates/CentOS-5.7-i386-netboot/ks.cfg +45 -0
- data/templates/CentOS-5.7-i386-netboot/postinstall.sh +53 -0
- data/templates/CentOS-5.7-x86_64-netboot/definition.rb +16 -0
- data/templates/CentOS-5.7-x86_64-netboot/ks.cfg +45 -0
- data/templates/CentOS-5.7-x86_64-netboot/postinstall.sh +60 -0
- data/templates/CentOS-6.0-i386-netboot/ks.cfg +1 -1
- data/templates/CentOS-6.0-i386-netboot/postinstall.sh +1 -1
- data/templates/CentOS-6.0-i386/postinstall.sh +2 -2
- data/templates/CentOS-6.0-x86_64-minimal/definition.rb +17 -0
- data/templates/CentOS-6.0-x86_64-minimal/ks.cfg +37 -0
- data/templates/CentOS-6.0-x86_64-minimal/postinstall.sh +50 -0
- data/templates/CentOS-6.0-x86_64-netboot/ks.cfg +1 -1
- data/templates/CentOS-6.0-x86_64-netboot/postinstall.sh +1 -1
- data/templates/CentOS-6.0-x86_64/postinstall.sh +2 -2
- data/templates/Debian-5.0.8-amd64-netboot/postinstall.sh +1 -1
- data/templates/Debian-5.0.8-i386-netboot/postinstall.sh +1 -1
- data/templates/{Debian-6.0.2-amd64-netboot → Debian-6.0.3-amd64-netboot}/definition.rb +3 -3
- data/templates/Debian-6.0.3-amd64-netboot/postinstall.sh +80 -0
- data/templates/{Debian-6.0.2-amd64-netboot → Debian-6.0.3-amd64-netboot}/preseed.cfg +0 -0
- data/templates/{Debian-6.0.2-i386-netboot → Debian-6.0.3-i386-netboot}/definition.rb +3 -3
- data/templates/{Debian-6.0.2-i386-netboot → Debian-6.0.3-i386-netboot}/postinstall.sh +2 -2
- data/templates/{Debian-6.0.2-i386-netboot → Debian-6.0.3-i386-netboot}/preseed.cfg +0 -0
- data/templates/Fedora-14-amd64-netboot/definition.rb +1 -1
- data/templates/Fedora-14-amd64-netboot/postinstall.sh +1 -1
- data/templates/Fedora-14-amd64/definition.rb +1 -1
- data/templates/Fedora-14-amd64/postinstall.sh +1 -1
- data/templates/Fedora-14-i386-netboot/postinstall.sh +1 -1
- data/templates/Fedora-14-i386/postinstall.sh +1 -1
- data/templates/Fedora-15-x86_64-netboot/definition.rb +29 -0
- data/templates/Fedora-15-x86_64-netboot/ks.cfg +64 -0
- data/templates/Fedora-15-x86_64-netboot/postinstall.sh +33 -0
- data/templates/Fedora-15-x86_64/definition.rb +17 -0
- data/templates/Fedora-15-x86_64/ks.cfg +64 -0
- data/templates/Fedora-15-x86_64/postinstall.sh +33 -0
- data/templates/archlinux-i386-netboot/aif.cfg +28 -0
- data/templates/archlinux-i386-netboot/definition.rb +26 -0
- data/templates/archlinux-i386-netboot/postinstall.sh +75 -0
- data/templates/archlinux-i386-netboot/postinstall2.sh +30 -0
- data/templates/archlinux-i386/postinstall.sh +12 -1
- data/templates/archlinux-x86_64-netboot/aif.cfg +28 -0
- data/templates/archlinux-x86_64-netboot/definition.rb +26 -0
- data/templates/archlinux-x86_64-netboot/postinstall.sh +75 -0
- data/templates/archlinux-x86_64-netboot/postinstall2.sh +30 -0
- data/templates/archlinux-x86_64/aif.cfg +1 -1
- data/templates/archlinux-x86_64/definition.rb +1 -1
- data/templates/archlinux-x86_64/postinstall.sh +16 -21
- data/templates/archlinux-x86_64/postinstall2.sh +38 -0
- data/templates/freebsd-8.2-pcbsd-i386-netboot/definition.rb +2 -4
- data/templates/freebsd-8.2-pcbsd-i386-netboot/postinstall.sh +1 -1
- data/templates/freebsd-8.2-pcbsd-i386/definition.rb +3 -2
- data/templates/freebsd-8.2-pcbsd-i386/postinstall.sh +1 -1
- data/templates/gentoo-latest-i386-experimental/definition.rb +4 -4
- data/templates/gentoo-latest-i386-experimental/postinstall.sh +1 -1
- data/templates/openSUSE-11.4-DVD-i586/autoinst_de.xml +1284 -0
- data/templates/openSUSE-11.4-DVD-i586/autoinst_en.xml +1284 -0
- data/templates/openSUSE-11.4-DVD-i586/definition.rb +28 -0
- data/templates/openSUSE-11.4-DVD-i586/postinstall.sh +43 -0
- data/templates/openSUSE-11.4-DVD-x86_64/autoinst_de.xml +1459 -0
- data/templates/openSUSE-11.4-DVD-x86_64/autoinst_en.xml +1459 -0
- data/templates/openSUSE-11.4-DVD-x86_64/definition.rb +28 -0
- data/templates/openSUSE-11.4-DVD-x86_64/postinstall.sh +43 -0
- data/templates/openSUSE-11.4-NET-i586/autoinst_de.xml +1278 -0
- data/templates/openSUSE-11.4-NET-i586/autoinst_en.xml +1278 -0
- data/templates/openSUSE-11.4-NET-i586/definition.rb +28 -0
- data/templates/openSUSE-11.4-NET-i586/postinstall.sh +43 -0
- data/templates/openSUSE-11.4-NET-x86_64/autoinst_de.xml +1453 -0
- data/templates/openSUSE-11.4-NET-x86_64/autoinst_en.xml +1453 -0
- data/templates/openSUSE-11.4-NET-x86_64/definition.rb +28 -0
- data/templates/openSUSE-11.4-NET-x86_64/postinstall.sh +43 -0
- data/templates/openindiana-148-ai-x86/postinstall.sh +1 -1
- data/templates/opensuse-11.4-i386-experimental/postinstall.sh +1 -1
- data/templates/scientificlinux-6.1-i386-netboot/definition.rb +16 -0
- data/templates/scientificlinux-6.1-i386-netboot/ks.cfg +53 -0
- data/templates/scientificlinux-6.1-i386-netboot/postinstall.sh +30 -0
- data/templates/scientificlinux-6.1-x86_64-netboot/definition.rb +16 -0
- data/templates/scientificlinux-6.1-x86_64-netboot/ks.cfg +53 -0
- data/templates/scientificlinux-6.1-x86_64-netboot/postinstall.sh +30 -0
- data/templates/solaris-11-express-i386/postinstall.sh +1 -1
- data/templates/ubuntu-10.04.2-amd64-netboot/postinstall.sh +1 -1
- data/templates/ubuntu-10.04.2-server-i386-netboot/postinstall.sh +1 -1
- data/templates/{ubuntu-10.04.2-server-amd64-alt → ubuntu-10.04.3-server-amd64-alt}/definition.rb +4 -4
- data/templates/{ubuntu-10.04.2-server-amd64-alt → ubuntu-10.04.3-server-amd64-alt}/postinstall.sh +1 -1
- data/templates/{ubuntu-10.04.2-server-amd64-alt → ubuntu-10.04.3-server-amd64-alt}/preseed.cfg +0 -0
- data/templates/{ubuntu-10.04.2-server-amd64 → ubuntu-10.04.3-server-amd64}/definition.rb +3 -6
- data/templates/{ubuntu-10.04.2-server-amd64 → ubuntu-10.04.3-server-amd64}/postinstall.sh +1 -1
- data/templates/{ubuntu-10.04.2-server-amd64 → ubuntu-10.04.3-server-amd64}/preseed.cfg +0 -0
- data/templates/{ubuntu-10.04.2-server-i386 → ubuntu-10.04.3-server-i386}/definition.rb +4 -4
- data/templates/{ubuntu-10.04.2-server-i386 → ubuntu-10.04.3-server-i386}/postinstall.sh +1 -1
- data/templates/{ubuntu-10.04.2-server-i386 → ubuntu-10.04.3-server-i386}/preseed.cfg +0 -0
- data/templates/ubuntu-10.10-server-amd64-netboot/postinstall.sh +1 -1
- data/templates/ubuntu-10.10-server-amd64/postinstall.sh +1 -1
- data/templates/ubuntu-10.10-server-i386-netboot/postinstall.sh +1 -1
- data/templates/ubuntu-10.10-server-i386/postinstall.sh +1 -1
- data/templates/ubuntu-11.04-server-amd64/postinstall.sh +7 -1
- data/templates/ubuntu-11.04-server-i386/definition.rb +1 -1
- data/templates/ubuntu-11.04-server-i386/postinstall.sh +1 -1
- data/templates/ubuntu-11.10-server-amd64-ishaya/definition.rb +24 -0
- data/templates/{Debian-6.0.2-amd64-netboot → ubuntu-11.10-server-amd64-ishaya}/postinstall.sh +42 -23
- data/templates/ubuntu-11.10-server-amd64-ishaya/preseed.cfg +87 -0
- data/templates/ubuntu-11.10-server-amd64-ruby192/definition.rb +24 -0
- data/templates/ubuntu-11.10-server-amd64-ruby192/postinstall.sh +90 -0
- data/templates/ubuntu-11.10-server-amd64-ruby192/preseed.cfg +87 -0
- data/templates/ubuntu-11.10-server-amd64/definition.rb +35 -0
- data/templates/ubuntu-11.10-server-amd64/postinstall.sh +88 -0
- data/templates/ubuntu-11.10-server-amd64/preseed.cfg +87 -0
- data/templates/ubuntu-11.10-server-i386/definition.rb +35 -0
- data/templates/ubuntu-11.10-server-i386/postinstall.sh +88 -0
- data/templates/ubuntu-11.10-server-i386/preseed.cfg +87 -0
- data/templates/ubuntu-8.04.4-server-amd64/definition.rb +1 -0
- data/templates/ubuntu-8.04.4-server-amd64/postinstall.sh +8 -7
- data/templates/ubuntu-8.04.4-server-amd64/preseed.cfg +0 -1
- data/templates/ubuntu-8.04.4-server-i386/postinstall.sh +25 -3
- data/templates/windows-2008R2-amd64/postinstall.sh +1 -1
- data/validation/features/steps/ssh_steps.rb +1 -1
- data/validation/vagrant.feature +35 -35
- data/veewee.gemspec +6 -6
- metadata +109 -103
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
veewee (0.2.
|
4
|
+
veewee (0.2.1)
|
5
5
|
cucumber (~> 1.0.2)
|
6
6
|
highline (~> 1.6.1)
|
7
7
|
net-ssh (~> 2.1.0)
|
8
8
|
popen4 (~> 0.1.2)
|
9
9
|
progressbar
|
10
|
-
rspec (~> 2.5
|
10
|
+
rspec (~> 2.5)
|
11
11
|
thor (~> 0.14.6)
|
12
|
-
vagrant (~> 0.8.
|
12
|
+
vagrant (~> 0.8.2)
|
13
13
|
|
14
14
|
GEM
|
15
15
|
remote: http://rubygems.org/
|
@@ -17,52 +17,55 @@ GEM
|
|
17
17
|
Platform (0.4.0)
|
18
18
|
archive-tar-minitar (0.5.2)
|
19
19
|
builder (3.0.0)
|
20
|
-
cucumber (1.0.
|
20
|
+
cucumber (1.0.6)
|
21
21
|
builder (>= 2.1.2)
|
22
22
|
diff-lcs (>= 1.1.2)
|
23
|
-
gherkin (~> 2.4.
|
23
|
+
gherkin (~> 2.4.18)
|
24
24
|
json (>= 1.4.6)
|
25
|
-
term-ansicolor (>= 1.0.
|
26
|
-
diff-lcs (1.1.
|
25
|
+
term-ansicolor (>= 1.0.6)
|
26
|
+
diff-lcs (1.1.3)
|
27
27
|
erubis (2.7.0)
|
28
|
-
ffi (1.0.
|
29
|
-
gherkin (2.4.
|
28
|
+
ffi (1.0.11)
|
29
|
+
gherkin (2.4.21)
|
30
30
|
json (>= 1.4.6)
|
31
|
-
highline (1.6.
|
32
|
-
i18n (0.
|
33
|
-
json (1.5.
|
31
|
+
highline (1.6.8)
|
32
|
+
i18n (0.6.0)
|
33
|
+
json (1.5.4)
|
34
34
|
net-scp (1.0.4)
|
35
35
|
net-ssh (>= 1.99.1)
|
36
36
|
net-ssh (2.1.4)
|
37
|
-
open4 (1.
|
37
|
+
open4 (1.3.0)
|
38
38
|
popen4 (0.1.2)
|
39
39
|
Platform (>= 0.4.0)
|
40
40
|
open4 (>= 0.4.0)
|
41
|
-
progressbar (0.9.
|
42
|
-
|
43
|
-
|
44
|
-
rspec-
|
45
|
-
rspec-
|
46
|
-
|
47
|
-
rspec-
|
41
|
+
progressbar (0.9.2)
|
42
|
+
rake (0.9.2.2)
|
43
|
+
rspec (2.7.0)
|
44
|
+
rspec-core (~> 2.7.0)
|
45
|
+
rspec-expectations (~> 2.7.0)
|
46
|
+
rspec-mocks (~> 2.7.0)
|
47
|
+
rspec-core (2.7.1)
|
48
|
+
rspec-expectations (2.7.0)
|
48
49
|
diff-lcs (~> 1.1.2)
|
49
|
-
rspec-mocks (2.
|
50
|
-
term-ansicolor (1.0.
|
50
|
+
rspec-mocks (2.7.0)
|
51
|
+
term-ansicolor (1.0.7)
|
51
52
|
thor (0.14.6)
|
52
|
-
vagrant (0.8.
|
53
|
+
vagrant (0.8.7)
|
53
54
|
archive-tar-minitar (= 0.5.2)
|
54
55
|
erubis (~> 2.7.0)
|
55
|
-
i18n (~> 0.
|
56
|
+
i18n (~> 0.6.0)
|
56
57
|
json (~> 1.5.1)
|
57
58
|
net-scp (~> 1.0.4)
|
58
59
|
net-ssh (~> 2.1.4)
|
59
60
|
thor (~> 0.14.6)
|
60
|
-
virtualbox (~> 0.9.
|
61
|
-
virtualbox (0.9.
|
61
|
+
virtualbox (~> 0.9.1)
|
62
|
+
virtualbox (0.9.2)
|
62
63
|
ffi (~> 1.0.9)
|
63
64
|
|
64
65
|
PLATFORMS
|
65
66
|
ruby
|
66
67
|
|
67
68
|
DEPENDENCIES
|
69
|
+
bundler (>= 1.0.0)
|
70
|
+
rake
|
68
71
|
veewee!
|
data/README.md
CHANGED
@@ -32,39 +32,64 @@ If you don't use rvm, be sure to execute vagrant through bundle exec
|
|
32
32
|
|
33
33
|
$ vagrant basebox templates
|
34
34
|
The following templates are available:
|
35
|
-
vagrant basebox define '<boxname>' '
|
36
|
-
vagrant basebox define '<boxname>' '
|
37
|
-
vagrant basebox define '<boxname>' '
|
38
|
-
vagrant basebox define '<boxname>' '
|
35
|
+
vagrant basebox define '<boxname>' 'CentOS-4.8-i386'
|
36
|
+
vagrant basebox define '<boxname>' 'CentOS-5.5-x86_64-netboot'
|
37
|
+
vagrant basebox define '<boxname>' 'CentOS-5.6-i386'
|
38
|
+
vagrant basebox define '<boxname>' 'CentOS-5.6-i386-netboot'
|
39
|
+
vagrant basebox define '<boxname>' 'CentOS-5.6-x86_64-netboot'
|
40
|
+
vagrant basebox define '<boxname>' 'CentOS-5.7-i386-netboot'
|
41
|
+
vagrant basebox define '<boxname>' 'CentOS-5.7-x86_64-netboot'
|
42
|
+
vagrant basebox define '<boxname>' 'CentOS-6.0-i386'
|
43
|
+
vagrant basebox define '<boxname>' 'CentOS-6.0-i386-netboot'
|
44
|
+
vagrant basebox define '<boxname>' 'CentOS-6.0-x86_64'
|
45
|
+
vagrant basebox define '<boxname>' 'CentOS-6.0-x86_64-minimal'
|
46
|
+
vagrant basebox define '<boxname>' 'CentOS-6.0-x86_64-netboot'
|
47
|
+
vagrant basebox define '<boxname>' 'Debian-5.0.8-amd64-netboot'
|
48
|
+
vagrant basebox define '<boxname>' 'Debian-5.0.8-i386-netboot'
|
49
|
+
vagrant basebox define '<boxname>' 'Debian-6.0.2-amd64-netboot'
|
50
|
+
vagrant basebox define '<boxname>' 'Debian-6.0.2-i386-netboot'
|
51
|
+
vagrant basebox define '<boxname>' 'Debian-6.0.3-amd64-netboot'
|
52
|
+
vagrant basebox define '<boxname>' 'Debian-6.0.3-i386-netboot'
|
53
|
+
vagrant basebox define '<boxname>' 'Fedora-14-amd64'
|
39
54
|
vagrant basebox define '<boxname>' 'Fedora-14-amd64-netboot'
|
40
|
-
vagrant basebox define '<boxname>' '
|
55
|
+
vagrant basebox define '<boxname>' 'Fedora-14-i386'
|
56
|
+
vagrant basebox define '<boxname>' 'Fedora-14-i386-netboot'
|
57
|
+
vagrant basebox define '<boxname>' 'Fedora-15-i386'
|
58
|
+
vagrant basebox define '<boxname>' 'Fedora-15-i386-netboot'
|
59
|
+
vagrant basebox define '<boxname>' 'Fedora-15-x86_64'
|
60
|
+
vagrant basebox define '<boxname>' 'Fedora-15-x86_64-netboot'
|
61
|
+
vagrant basebox define '<boxname>' 'Sysrescuecd-2.0.0-experimental'
|
62
|
+
vagrant basebox define '<boxname>' 'archlinux-i386'
|
63
|
+
vagrant basebox define '<boxname>' 'archlinux-i386-netboot'
|
64
|
+
vagrant basebox define '<boxname>' 'archlinux-x86_64'
|
65
|
+
vagrant basebox define '<boxname>' 'archlinux-x86_64-netboot'
|
41
66
|
vagrant basebox define '<boxname>' 'freebsd-8.2-experimental'
|
42
|
-
vagrant basebox define '<boxname>' '
|
43
|
-
vagrant basebox define '<boxname>' '
|
67
|
+
vagrant basebox define '<boxname>' 'freebsd-8.2-pcbsd-i386'
|
68
|
+
vagrant basebox define '<boxname>' 'freebsd-8.2-pcbsd-i386-netboot'
|
69
|
+
vagrant basebox define '<boxname>' 'gentoo-latest-i386-experimental'
|
70
|
+
vagrant basebox define '<boxname>' 'openSUSE-11.4-DVD-i586'
|
71
|
+
vagrant basebox define '<boxname>' 'openSUSE-11.4-DVD-x86_64'
|
72
|
+
vagrant basebox define '<boxname>' 'openSUSE-11.4-NET-i586'
|
73
|
+
vagrant basebox define '<boxname>' 'openSUSE-11.4-NET-x86_64'
|
44
74
|
vagrant basebox define '<boxname>' 'openindiana-148-ai-x86'
|
45
|
-
vagrant basebox define '<boxname>' '
|
46
|
-
vagrant basebox define '<boxname>' '
|
75
|
+
vagrant basebox define '<boxname>' 'opensuse-11.4-i386-experimental'
|
76
|
+
vagrant basebox define '<boxname>' 'solaris-11-express-i386'
|
47
77
|
vagrant basebox define '<boxname>' 'ubuntu-10.04.2-amd64-netboot'
|
48
|
-
vagrant basebox define '<boxname>' 'Sysrescuecd-2.0.0-experimental'
|
49
|
-
vagrant basebox define '<boxname>' 'Debian-6.0.1a-amd64-netboot'
|
50
|
-
vagrant basebox define '<boxname>' 'freebsd-8.2-pcbsd-i386'
|
51
|
-
vagrant basebox define '<boxname>' 'Fedora-14-i386'
|
52
|
-
vagrant basebox define '<boxname>' 'Fedora-14-amd64'
|
53
78
|
vagrant basebox define '<boxname>' 'ubuntu-10.04.2-server-i386-netboot'
|
54
|
-
vagrant basebox define '<boxname>' '
|
55
|
-
vagrant basebox define '<boxname>' '
|
56
|
-
vagrant basebox define '<boxname>' 'ubuntu-10.04.
|
79
|
+
vagrant basebox define '<boxname>' 'ubuntu-10.04.3-server-amd64'
|
80
|
+
vagrant basebox define '<boxname>' 'ubuntu-10.04.3-server-amd64-alt'
|
81
|
+
vagrant basebox define '<boxname>' 'ubuntu-10.04.3-server-i386'
|
82
|
+
vagrant basebox define '<boxname>' 'ubuntu-10.10-server-amd64'
|
83
|
+
vagrant basebox define '<boxname>' 'ubuntu-10.10-server-amd64-netboot'
|
84
|
+
vagrant basebox define '<boxname>' 'ubuntu-10.10-server-i386'
|
85
|
+
vagrant basebox define '<boxname>' 'ubuntu-10.10-server-i386-netboot'
|
86
|
+
vagrant basebox define '<boxname>' 'ubuntu-11.04-server-amd64'
|
87
|
+
vagrant basebox define '<boxname>' 'ubuntu-11.04-server-i386'
|
88
|
+
vagrant basebox define '<boxname>' 'ubuntu-11.10-server-amd64'
|
89
|
+
vagrant basebox define '<boxname>' 'ubuntu-11.10-server-i386'
|
57
90
|
vagrant basebox define '<boxname>' 'ubuntu-8.04.4-server-amd64'
|
58
|
-
vagrant basebox define '<boxname>' 'gentoo-latest-i386-experimental'
|
59
91
|
vagrant basebox define '<boxname>' 'ubuntu-8.04.4-server-i386'
|
60
92
|
vagrant basebox define '<boxname>' 'windows-2008R2-amd64'
|
61
|
-
vagrant basebox define '<boxname>' 'Fedora-14-i386-netboot'
|
62
|
-
vagrant basebox define '<boxname>' 'archlinux-64-experimental'
|
63
|
-
vagrant basebox define '<boxname>' 'Debian-6.0.1a-i386-netboot'
|
64
|
-
vagrant basebox define '<boxname>' 'ubuntu-10.10-server-amd64'
|
65
|
-
vagrant basebox define '<boxname>' 'archlinux-64-aif-experimental'
|
66
|
-
vagrant basebox define '<boxname>' 'ubuntu-11.04-server-i386'
|
67
|
-
vagrant basebox define '<boxname>' 'CentOS-5.6-i386'
|
68
93
|
|
69
94
|
|
70
95
|
## Define a new box
|
@@ -131,7 +156,7 @@ Put your isofile inside the 'currentdir'/iso directory or if you don't run
|
|
131
156
|
- Mount the ISO File :iso_file
|
132
157
|
- Boot up the machine and wait for :boot_time
|
133
158
|
- Send the keystrokes in :boot_cmd_sequence
|
134
|
-
- Startup a webserver on :kickstart_port to wait for a request for the :kickstart_file
|
159
|
+
- Startup a webserver on :kickstart_port to wait for a request for the :kickstart_file (don't navigate to the file in your browser or the server will stop and the installer will not be able to find your preseed)
|
135
160
|
- Wait for ssh login to work with :ssh_user , :ssh_password
|
136
161
|
- Sudo execute the :postinstall_files
|
137
162
|
|
data/Rakefile
CHANGED
@@ -4,67 +4,72 @@ require 'bundler/setup'
|
|
4
4
|
Bundler::GemHelper.install_tasks
|
5
5
|
|
6
6
|
#Setup some base variables to use
|
7
|
-
veewee_dir= "."
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
veewee_dir = "."
|
8
|
+
lib_dir = File.expand_path(File.join(veewee_dir, "lib"))
|
9
|
+
box_dir = File.expand_path(File.join(veewee_dir, "boxes"))
|
10
|
+
vbox_dir = File.expand_path(File.join(veewee_dir, "tmp"))
|
11
|
+
tmp_dir = File.expand_path(File.join(veewee_dir, "tmp"))
|
12
|
+
iso_dir = File.expand_path(File.join(veewee_dir, "iso"))
|
13
|
+
definition_dir = File.expand_path(File.join(veewee_dir, "definitions"))
|
14
|
+
template_dir = File.expand_path(File.join(veewee_dir, "templates"))
|
15
15
|
|
16
16
|
|
17
17
|
#Load Veewee::Session libraries
|
18
|
-
Dir.glob(File.join(lib_dir, '**','*.rb')).each {|f|
|
19
|
-
require f }
|
18
|
+
Dir.glob(File.join(lib_dir, '**','*.rb')).each { |f| require f }
|
20
19
|
|
21
20
|
#Initialize
|
22
|
-
Veewee::Session.setenv({
|
23
|
-
|
21
|
+
Veewee::Session.setenv({
|
22
|
+
:veewee_dir => veewee_dir,
|
23
|
+
:definition_dir => definition_dir,
|
24
|
+
:template_dir => template_dir,
|
25
|
+
:iso_dir => iso_dir,
|
26
|
+
:box_dir => box_dir,
|
27
|
+
:tmp_dir => tmp_dir
|
28
|
+
})
|
24
29
|
|
25
30
|
desc 'Default: list templates'
|
26
31
|
task :default => [:templates]
|
27
32
|
|
28
33
|
desc 'List templates'
|
29
34
|
task :templates do
|
30
|
-
|
35
|
+
Veewee::Session.list_templates
|
31
36
|
end
|
32
37
|
|
33
38
|
desc 'Define box'
|
34
39
|
task :define, [:boxname,:template_name] do |t,args|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
+
if args.to_hash.size!=2
|
41
|
+
puts "needs two arguments: rake define['boxname','template_name']"
|
42
|
+
exit
|
43
|
+
end
|
44
|
+
Veewee::Session.define(args.boxname,args.template_name)
|
40
45
|
end
|
41
46
|
|
42
47
|
desc 'Undefine box'
|
43
48
|
task :undefine, [:boxname] do |t,args|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
if args.to_hash.size!=1
|
50
|
+
puts "needs one arguments: rake undefine[\"yourname\"]"
|
51
|
+
exit
|
52
|
+
end
|
53
|
+
Veewee::Session.undefine(args.boxname)
|
49
54
|
end
|
50
55
|
|
51
56
|
desc 'List Definitions'
|
52
|
-
task :definitions do
|
53
|
-
|
57
|
+
task :definitions do
|
58
|
+
Veewee::Session.list_definitions
|
54
59
|
end
|
55
60
|
|
56
61
|
desc 'Build box'
|
57
62
|
task :build, [:boxname] do |t,args|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
+
if args.to_hash.size!=1
|
64
|
+
puts "needs one arguments: rake build['boxname']"
|
65
|
+
exit
|
66
|
+
end
|
67
|
+
Veewee::Session.build(args.boxname)
|
63
68
|
end
|
64
69
|
|
65
70
|
desc 'List boxes'
|
66
71
|
task :boxes do
|
67
|
-
|
72
|
+
Veewee::Session.list_boxes
|
68
73
|
end
|
69
74
|
|
70
75
|
desc 'Export box'
|
@@ -73,20 +78,20 @@ task :export, [:boxname] do |t,args|
|
|
73
78
|
puts "needs one arguments: rake export['boxname']"
|
74
79
|
exit
|
75
80
|
end
|
76
|
-
|
81
|
+
Veewee::Session.export_box(args.boxname)
|
77
82
|
end
|
78
83
|
|
79
84
|
desc 'Remove box'
|
80
85
|
task :remove_box, [:boxname] do |t,args|
|
81
|
-
|
86
|
+
Veewee::Session.remove_box(args.boxname)
|
82
87
|
end
|
83
88
|
|
84
89
|
desc 'List ostypes available'
|
85
90
|
task :list_ostypes do |t,args|
|
86
|
-
|
91
|
+
Veewee::Session.list_ostypes
|
87
92
|
end
|
88
93
|
|
89
94
|
desc 'Clean all unfinished builds'
|
90
|
-
task :clean do
|
91
|
-
|
95
|
+
task :clean do
|
96
|
+
Veewee::Session.clean
|
92
97
|
end
|
data/lib/veewee/scancode.rb
CHANGED
@@ -67,7 +67,7 @@ module Veewee
|
|
67
67
|
k['\\'] = '2b ab'; k['|'] = '2a 2b aa 8b';
|
68
68
|
|
69
69
|
k['[']='1a 9a'; k[']']='1b 9b';
|
70
|
-
k['<']='2a 33 aa b3'; k['>']='2a 34 aa b4';
|
70
|
+
k['<']='2a 33 aa b3'; k['>']='2a 34 aa b4'; k['?']='2a 35 aa b5';
|
71
71
|
k['$']='2a 05 aa 85';
|
72
72
|
k['+']='2a 0d aa 8d';
|
73
73
|
|
data/lib/veewee/session.rb
CHANGED
@@ -7,13 +7,10 @@ require 'progressbar'
|
|
7
7
|
require 'highline/import'
|
8
8
|
require 'tempfile'
|
9
9
|
require 'virtualbox'
|
10
|
-
require 'virtualbox/abstract_model'
|
11
|
-
require 'virtualbox/ext/byte_normalizer'
|
12
|
-
|
13
10
|
|
14
11
|
module Veewee
|
15
12
|
class Session
|
16
|
-
|
13
|
+
|
17
14
|
attr_accessor :veewee_dir
|
18
15
|
attr_accessor :definition_dir
|
19
16
|
attr_accessor :template_dir
|
@@ -30,10 +27,10 @@ module Veewee
|
|
30
27
|
@iso_dir=env[:iso_dir]
|
31
28
|
@tmp_dir=env[:tmp_dir]
|
32
29
|
end
|
33
|
-
|
30
|
+
|
34
31
|
def self.declare(options)
|
35
32
|
defaults={
|
36
|
-
:cpu_count => '1', :memory_size=> '256',
|
33
|
+
:cpu_count => '1', :memory_size=> '256',
|
37
34
|
:disk_size => '10240', :disk_format => 'VDI', :hostiocache => 'off' ,
|
38
35
|
:os_type_id => 'Ubuntu',
|
39
36
|
:iso_file => "ubuntu-10.10-server-i386.iso", :iso_src => "", :iso_md5 => "", :iso_download_timeout => 1000,
|
@@ -44,16 +41,16 @@ module Veewee
|
|
44
41
|
:sudo_cmd => "echo '%p'|sudo -S sh '%f'",
|
45
42
|
:shutdown_cmd => "shutdown -h now",
|
46
43
|
:postinstall_files => [ "postinstall.sh"],:postinstall_timeout => 10000}
|
47
|
-
|
44
|
+
|
48
45
|
@definition=defaults.merge(options)
|
49
|
-
|
46
|
+
|
50
47
|
end
|
51
|
-
|
48
|
+
|
52
49
|
def self.define(boxname,template_name,options = {})
|
53
50
|
#Check if template_name exists
|
54
|
-
|
51
|
+
|
55
52
|
options = { "force" => false, "format" => "vagrant" }.merge(options)
|
56
|
-
|
53
|
+
|
57
54
|
if File.directory?(File.join(@template_dir,template_name))
|
58
55
|
else
|
59
56
|
puts "This template can not be found, use vagrant basebox templates to list all templates"
|
@@ -62,7 +59,7 @@ module Veewee
|
|
62
59
|
if !File.exists?(@definition_dir)
|
63
60
|
FileUtils.mkdir(@definition_dir)
|
64
61
|
end
|
65
|
-
|
62
|
+
|
66
63
|
if File.directory?(File.join(@definition_dir,boxname))
|
67
64
|
if !options["force"]
|
68
65
|
puts "The definition for #{boxname} already exists. Use --force to overwrite"
|
@@ -75,18 +72,18 @@ module Veewee
|
|
75
72
|
puts "The basebox '#{boxname}' has been successfully created from the template ''#{template_name}'"
|
76
73
|
puts "You can now edit the definition files stored in definitions/#{boxname}"
|
77
74
|
puts "or build the box with:"
|
78
|
-
if (options["format"]=='vagrant')
|
75
|
+
if (options["format"]=='vagrant')
|
79
76
|
puts "vagrant basebox build '#{boxname}'"
|
80
77
|
end
|
81
78
|
if (options["format"]=='veewee')
|
82
79
|
puts "veewee build '#{boxname}'"
|
83
80
|
end
|
84
|
-
|
81
|
+
|
85
82
|
end
|
86
83
|
|
87
84
|
|
88
85
|
|
89
|
-
|
86
|
+
|
90
87
|
def self.definition_exists?(boxname)
|
91
88
|
if File.directory?(File.join(@definition_dir,boxname))
|
92
89
|
if File.exists?(File.join(@definition_dir,boxname,'definition.rb'))
|
@@ -97,7 +94,7 @@ module Veewee
|
|
97
94
|
else
|
98
95
|
return false
|
99
96
|
end
|
100
|
-
|
97
|
+
|
101
98
|
end
|
102
99
|
|
103
100
|
def self.undefine(boxname)
|
@@ -114,13 +111,13 @@ module Veewee
|
|
114
111
|
|
115
112
|
def self.list_templates( options = { :format => 'vagrant'})
|
116
113
|
puts "The following templates are available:"
|
117
|
-
subdirs=Dir.glob("#{@template_dir}/*")
|
114
|
+
subdirs=Dir.glob("#{@template_dir}/*").sort_by {|f| File.basename f}
|
118
115
|
subdirs.each do |sub|
|
119
116
|
if File.directory?("#{sub}")
|
120
117
|
definition=Dir.glob("#{sub}/definition.rb")
|
121
118
|
if definition.length!=0
|
122
119
|
name=sub.sub(/#{@template_dir}\//,'')
|
123
|
-
if (options[:format]=='vagrant')
|
120
|
+
if (options[:format]=='vagrant')
|
124
121
|
puts "vagrant basebox define '<boxname>' '#{name}'"
|
125
122
|
end
|
126
123
|
if (options[:format]=='veewee')
|
@@ -149,7 +146,7 @@ module Veewee
|
|
149
146
|
|
150
147
|
def self.verify_iso(filename,autodownload = false)
|
151
148
|
if File.exists?(File.join(@iso_dir,filename))
|
152
|
-
puts
|
149
|
+
puts
|
153
150
|
puts "Verifying the isofile #{filename} is ok."
|
154
151
|
else
|
155
152
|
|
@@ -157,7 +154,7 @@ module Veewee
|
|
157
154
|
path1=Pathname.new(full_path)
|
158
155
|
path2=Pathname.new(Dir.pwd)
|
159
156
|
rel_path=path1.relative_path_from(path2).to_s
|
160
|
-
|
157
|
+
|
161
158
|
puts
|
162
159
|
puts "We did not find an isofile in <currentdir>/iso. \n\nThe definition provided the following download information:"
|
163
160
|
unless "#{@definition[:iso_src]}"==""
|
@@ -166,7 +163,7 @@ module Veewee
|
|
166
163
|
puts "- Md5 Checksum: #{@definition[:iso_md5]}"
|
167
164
|
puts "#{@definition[:iso_download_instructions]}"
|
168
165
|
puts
|
169
|
-
|
166
|
+
|
170
167
|
if @definition[:iso_src] == ""
|
171
168
|
puts "Please follow the instructions above:"
|
172
169
|
puts "- to get the ISO"
|
@@ -175,60 +172,60 @@ module Veewee
|
|
175
172
|
puts
|
176
173
|
exit
|
177
174
|
else
|
178
|
-
|
175
|
+
|
179
176
|
question=ask("Download? (Yes/No)") {|q| q.default="No"}
|
180
177
|
if question.downcase == "yes"
|
181
178
|
if !File.exists?(@iso_dir)
|
182
179
|
puts "Creating an iso directory"
|
183
180
|
FileUtils.mkdir(@iso_dir)
|
184
181
|
end
|
185
|
-
|
182
|
+
|
186
183
|
download_progress(@definition[:iso_src],full_path)
|
187
184
|
else
|
188
185
|
puts "You have choosen for manual download: "
|
189
186
|
puts "curl -C - -L '#{@definition[:iso_src]}' -o '#{rel_path}'"
|
190
187
|
puts "md5 '#{rel_path}' "
|
191
|
-
puts
|
188
|
+
puts
|
192
189
|
exit
|
193
190
|
end
|
194
|
-
|
191
|
+
|
195
192
|
end
|
196
193
|
end
|
197
|
-
|
194
|
+
|
198
195
|
end
|
199
196
|
|
200
197
|
def self.export_box(boxname)
|
201
198
|
#Now we have to load the definition (reads definition.rb)
|
202
199
|
load_definition(boxname)
|
203
|
-
|
200
|
+
|
204
201
|
Veewee::Export.vagrant(boxname,@box_dir,@definition)
|
205
202
|
#vagrant removes the mapping
|
206
203
|
#we need to restore it in order to be able to login again
|
207
204
|
add_ssh_nat_mapping(boxname)
|
208
|
-
|
205
|
+
|
209
206
|
end
|
210
|
-
|
207
|
+
|
211
208
|
def self.remove_box(boxname)
|
212
209
|
puts "Not yet implemented"
|
213
210
|
end
|
214
211
|
|
215
212
|
def self.build(boxname,options)
|
216
|
-
|
213
|
+
|
217
214
|
options = { "force" => false, "format" => "vagrant", "nogui" => false }.merge(options)
|
218
|
-
|
215
|
+
|
219
216
|
#Now we have to load the definition (reads definition.rb)
|
220
217
|
load_definition(boxname)
|
221
218
|
|
222
219
|
#Command to execute locally
|
223
220
|
@vboxcmd=determine_vboxcmd
|
224
|
-
|
221
|
+
|
225
222
|
ssh_options={ :user => @definition[:ssh_user], :port => @definition[:ssh_host_port], :password => @definition[:ssh_password],
|
226
|
-
:timeout => @definition[:ssh_timeout]}
|
227
|
-
|
223
|
+
:timeout => @definition[:ssh_timeout]}
|
224
|
+
|
228
225
|
#Suppress those annoying virtualbox messages
|
229
|
-
suppress_messages
|
230
|
-
|
231
|
-
|
226
|
+
suppress_messages
|
227
|
+
|
228
|
+
|
232
229
|
vm=VirtualBox::VM.find(boxname)
|
233
230
|
|
234
231
|
if (!vm.nil? && (vm.saved?))
|
@@ -236,7 +233,7 @@ module Veewee
|
|
236
233
|
vm.discard_state
|
237
234
|
vm.reload
|
238
235
|
end
|
239
|
-
|
236
|
+
|
240
237
|
if (!vm.nil? && !(vm.powered_off?))
|
241
238
|
puts "Shutting down vm #{boxname}"
|
242
239
|
#We force it here, maybe vm.shutdown is cleaner
|
@@ -250,32 +247,32 @@ module Veewee
|
|
250
247
|
end
|
251
248
|
sleep 3
|
252
249
|
end
|
253
|
-
|
254
|
-
|
250
|
+
|
251
|
+
|
255
252
|
verify_iso(@definition[:iso_file])
|
256
|
-
|
253
|
+
|
257
254
|
if (options["force"]==false)
|
258
|
-
else
|
255
|
+
else
|
259
256
|
puts "Forcing build by destroying #{boxname} machine"
|
260
257
|
destroy_vm(boxname)
|
261
258
|
end
|
262
|
-
|
259
|
+
|
263
260
|
if Veewee::Utils.is_port_open?("localhost", @definition[:ssh_host_port])
|
264
261
|
puts "Hmm, the port #{@definition[:ssh_host_port]} is open. And we shut down?"
|
265
262
|
exit
|
266
263
|
end
|
267
|
-
|
264
|
+
|
268
265
|
checksums=calculate_checksums(@definition,boxname)
|
269
|
-
|
266
|
+
|
270
267
|
transaction(boxname,"0-initial-#{checksums[0]}",checksums) do
|
271
|
-
|
268
|
+
|
272
269
|
#Create the Virtualmachine and set all the memory and other stuff
|
273
270
|
create_vm(boxname)
|
274
|
-
|
271
|
+
|
275
272
|
#Create a disk with the same name as the boxname
|
276
273
|
create_disk(boxname)
|
277
|
-
|
278
|
-
|
274
|
+
|
275
|
+
|
279
276
|
#These command actually call the commandline of Virtualbox, I hope to use the virtualbox-ruby library in the future
|
280
277
|
add_ide_controller(boxname)
|
281
278
|
add_sata_controller(boxname)
|
@@ -290,13 +287,13 @@ module Veewee
|
|
290
287
|
else
|
291
288
|
start_vm(boxname,"gui")
|
292
289
|
end
|
293
|
-
|
290
|
+
|
294
291
|
#waiting for it to boot
|
295
292
|
puts "Waiting for the machine to boot"
|
296
293
|
sleep @definition[:boot_wait].to_i
|
297
|
-
|
294
|
+
|
298
295
|
Veewee::Scancode.send_sequence("#{@vboxcmd}","#{boxname}",@definition[:boot_cmd_sequence],@definition[:kickstart_port])
|
299
|
-
|
296
|
+
|
300
297
|
kickstartfile=@definition[:kickstart_file]
|
301
298
|
if kickstartfile.nil? || kickstartfile.length == 0
|
302
299
|
puts "Skipping webserver as no kickstartfile was specified"
|
@@ -307,7 +304,7 @@ module Veewee
|
|
307
304
|
Veewee::Web.wait_for_request(kickstartfile,{:port => @definition[:kickstart_port],
|
308
305
|
:host => @definition[:kickstart_ip], :timeout => @definition[:kickstart_timeout],
|
309
306
|
:web_dir => File.join(@definition_dir,boxname)})
|
310
|
-
end
|
307
|
+
end
|
311
308
|
if kickstartfile.is_a? Array
|
312
309
|
kickstartfiles=kickstartfile
|
313
310
|
kickstartfiles.each do |kickfile|
|
@@ -317,10 +314,10 @@ module Veewee
|
|
317
314
|
end
|
318
315
|
end
|
319
316
|
end
|
320
|
-
|
321
|
-
|
317
|
+
|
318
|
+
|
322
319
|
Veewee::Ssh.when_ssh_login_works("localhost",ssh_options) do
|
323
|
-
#Transfer version of Virtualbox to $HOME/.vbox_version
|
320
|
+
#Transfer version of Virtualbox to $HOME/.vbox_version
|
324
321
|
versionfile=Tempfile.open("vbox.version")
|
325
322
|
versionfile.puts "#{VirtualBox::Global.global.lib.virtualbox.version.split('_')[0]}"
|
326
323
|
versionfile.rewind
|
@@ -335,16 +332,16 @@ module Veewee
|
|
335
332
|
versionfile.delete
|
336
333
|
end
|
337
334
|
end #initial Transaction
|
338
|
-
|
339
|
-
|
335
|
+
|
336
|
+
|
340
337
|
counter=1
|
341
338
|
@definition[:postinstall_files].each do |postinstall_file|
|
342
|
-
|
343
|
-
|
344
|
-
filename=File.join(@definition_dir,boxname,postinstall_file)
|
345
|
-
|
339
|
+
|
340
|
+
|
341
|
+
filename=File.join(@definition_dir,boxname,postinstall_file)
|
342
|
+
|
346
343
|
transaction(boxname,"#{counter}-#{postinstall_file}-#{checksums[counter]}",checksums) do
|
347
|
-
|
344
|
+
|
348
345
|
Veewee::Ssh.when_ssh_login_works("localhost",ssh_options) do
|
349
346
|
begin
|
350
347
|
Veewee::Ssh.transfer_file("localhost",filename,File.basename(filename),ssh_options)
|
@@ -359,30 +356,30 @@ module Veewee
|
|
359
356
|
puts "***#{newcommand}"
|
360
357
|
Veewee::Ssh.execute("localhost","#{newcommand}",ssh_options)
|
361
358
|
end
|
362
|
-
|
359
|
+
|
363
360
|
end
|
364
361
|
counter+=1
|
365
|
-
|
366
|
-
end
|
367
|
-
|
362
|
+
|
363
|
+
end
|
364
|
+
|
368
365
|
puts "#{boxname} was built successfully. "
|
369
366
|
puts ""
|
370
367
|
puts "Now you can: "
|
371
368
|
puts "- verify your box by running : vagrant basebox validate #{boxname}"
|
372
369
|
puts "- export your vm to a .box file by running : vagrant basebox export #{boxname}"
|
373
|
-
|
370
|
+
|
374
371
|
end
|
375
372
|
|
376
|
-
|
373
|
+
|
377
374
|
def self.determine_vboxcmd
|
378
375
|
return "VBoxManage"
|
379
376
|
end
|
380
|
-
|
377
|
+
|
381
378
|
def self.start_vm(boxname,mode)
|
382
379
|
vm=VirtualBox::VM.find(boxname)
|
383
380
|
vm.start(mode)
|
384
381
|
end
|
385
|
-
|
382
|
+
|
386
383
|
def self.load_definition(boxname)
|
387
384
|
|
388
385
|
if definition_exists?(boxname)
|
@@ -392,14 +389,14 @@ module Veewee
|
|
392
389
|
rescue LoadError
|
393
390
|
puts "Error loading definition of #{boxname}"
|
394
391
|
exit
|
395
|
-
end
|
392
|
+
end
|
396
393
|
else
|
397
394
|
puts "Error: definition for basebox '#{boxname}' does not exist."
|
398
395
|
list_definitions
|
399
396
|
exit
|
400
397
|
end
|
401
398
|
end
|
402
|
-
|
399
|
+
|
403
400
|
def self.add_ssh_nat_mapping(boxname)
|
404
401
|
vm=VirtualBox::VM.find(boxname)
|
405
402
|
#Map SSH Ports
|
@@ -410,24 +407,24 @@ module Veewee
|
|
410
407
|
port.hostport = @definition[:ssh_host_port].to_i
|
411
408
|
vm.network_adapters[0].nat_driver.forwarded_ports << port
|
412
409
|
port.save
|
413
|
-
vm.save
|
410
|
+
vm.save
|
414
411
|
end
|
415
|
-
|
412
|
+
|
416
413
|
def self.destroy_vm(boxname)
|
417
|
-
|
414
|
+
|
418
415
|
load_definition(boxname)
|
419
|
-
@vboxcmd=determine_vboxcmd
|
416
|
+
@vboxcmd=determine_vboxcmd
|
420
417
|
#:destroy_medium => :delete, will delete machine + all media attachments
|
421
418
|
#vm.destroy(:destroy_medium => :delete)
|
422
419
|
##vm.destroy(:destroy_image => true)
|
423
|
-
|
420
|
+
|
424
421
|
#VBoxManage unregistervm "test-machine" --delete
|
425
422
|
#because the destroy does remove the .vbox file on 4.0.x
|
426
423
|
#PDB
|
427
424
|
#vm.destroy()
|
428
|
-
|
429
|
-
|
430
|
-
|
425
|
+
|
426
|
+
|
427
|
+
|
431
428
|
vm=VirtualBox::VM.find(boxname)
|
432
429
|
|
433
430
|
if (!vm.nil? && !(vm.powered_off?))
|
@@ -441,50 +438,50 @@ module Veewee
|
|
441
438
|
exit
|
442
439
|
end
|
443
440
|
sleep 3
|
444
|
-
end
|
441
|
+
end
|
442
|
+
|
445
443
|
|
446
|
-
|
447
|
-
command="#{@vboxcmd} unregistervm '#{boxname}' --delete"
|
444
|
+
command="#{@vboxcmd} unregistervm '#{boxname}' --delete"
|
448
445
|
puts command
|
449
446
|
puts "Deleting vm #{boxname}"
|
450
|
-
|
447
|
+
|
451
448
|
#Exec and system stop the execution here
|
452
449
|
Veewee::Shell.execute("#{command}")
|
453
450
|
sleep 1
|
454
|
-
|
451
|
+
|
455
452
|
#if the disk was not attached when the machine was destroyed we also need to delete the disk
|
456
453
|
location=boxname+"."+@definition[:disk_format].downcase
|
457
|
-
found=false
|
454
|
+
found=false
|
458
455
|
VirtualBox::HardDrive.all.each do |d|
|
459
456
|
if d.location.match(/#{location}/)
|
460
|
-
|
461
|
-
if File.exists?(d.location)
|
457
|
+
|
458
|
+
if File.exists?(d.location)
|
462
459
|
command="#{@vboxcmd} closemedium disk '#{d.location}' --delete"
|
463
460
|
else
|
464
|
-
command="#{@vboxcmd} closemedium disk '#{d.location}'"
|
461
|
+
command="#{@vboxcmd} closemedium disk '#{d.location}'"
|
465
462
|
end
|
466
|
-
|
463
|
+
|
467
464
|
#command="#{@vboxcmd} closemedium disk '#{d.location}' --delete"
|
468
465
|
puts "Deleting disk #{d.location}"
|
469
466
|
puts "#{command}"
|
470
467
|
|
471
|
-
Veewee::Shell.execute("#{command}")
|
472
|
-
|
473
|
-
if File.exists?(d.location)
|
468
|
+
Veewee::Shell.execute("#{command}")
|
469
|
+
|
470
|
+
if File.exists?(d.location)
|
474
471
|
puts "We tried to delete the disk file via virtualbox '#{d.location} but failed"
|
475
472
|
puts "Removing it manually"
|
476
473
|
FileUtils.rm(d.location)
|
477
474
|
exit
|
478
|
-
end
|
475
|
+
end
|
479
476
|
#v.3
|
480
477
|
#d.destroy(true)
|
481
478
|
break
|
482
479
|
end
|
483
|
-
end
|
480
|
+
end
|
484
481
|
end
|
485
|
-
|
482
|
+
|
486
483
|
def self.create_vm(boxname,force=false)
|
487
|
-
|
484
|
+
|
488
485
|
#Verifying the os.id with the :os_type_id specified
|
489
486
|
matchfound=false
|
490
487
|
VirtualBox::Global.global.lib.virtualbox.guest_os_types.collect { |os|
|
@@ -504,9 +501,9 @@ module Veewee
|
|
504
501
|
puts "shutting down box"
|
505
502
|
#We force it here, maybe vm.shutdown is cleaner
|
506
503
|
vm.stop
|
507
|
-
end
|
504
|
+
end
|
508
505
|
|
509
|
-
if !vm.nil?
|
506
|
+
if !vm.nil?
|
510
507
|
puts "Box already exists"
|
511
508
|
#vm.stop
|
512
509
|
#vm.destroy
|
@@ -521,7 +518,7 @@ module Veewee
|
|
521
518
|
|
522
519
|
# Modify the vm to enable or disable hw virtualization extensions
|
523
520
|
vm_flags=%w{pagefusion acpi ioapic pae hpet hwvirtex hwvirtexcl nestedpaging largepages vtxvpid synthxcpu rtcuseutc}
|
524
|
-
|
521
|
+
|
525
522
|
vm_flags.each do |vm_flag|
|
526
523
|
unless @definition[vm_flag.to_sym].nil?
|
527
524
|
puts "Setting VM Flag #{vm_flag} to #{@definition[vm_flag.to_sym]}"
|
@@ -532,7 +529,7 @@ module Veewee
|
|
532
529
|
|
533
530
|
# Todo Check for java
|
534
531
|
# Todo check output of commands
|
535
|
-
|
532
|
+
|
536
533
|
# Check for floppy
|
537
534
|
unless @definition[:floppy_files].nil?
|
538
535
|
require 'tmpdir'
|
@@ -546,20 +543,20 @@ module Veewee
|
|
546
543
|
command="java -jar #{javacode_dir}/dir2floppy.jar '#{temp_dir}' '#{floppy_file}'"
|
547
544
|
puts "#{command}"
|
548
545
|
Veewee::Shell.execute("#{command}")
|
549
|
-
|
546
|
+
|
550
547
|
# Create floppy controller
|
551
548
|
command="#{@vboxcmd} storagectl '#{boxname}' --name 'Floppy Controller' --add floppy"
|
552
549
|
puts "#{command}"
|
553
550
|
Veewee::Shell.execute("#{command}")
|
554
|
-
|
551
|
+
|
555
552
|
# Attach floppy to machine (the vfd extension is crucial to detect msdos type floppy)
|
556
553
|
command="#{@vboxcmd} storageattach '#{boxname}' --storagectl 'Floppy Controller' --port 0 --device 0 --type fdd --medium '#{floppy_file}'"
|
557
554
|
puts "#{command}"
|
558
|
-
Veewee::Shell.execute("#{command}")
|
559
|
-
|
555
|
+
Veewee::Shell.execute("#{command}")
|
556
|
+
|
560
557
|
end
|
561
|
-
|
562
|
-
|
558
|
+
|
559
|
+
|
563
560
|
#Exec and system stop the execution here
|
564
561
|
Veewee::Shell.execute("#{command}")
|
565
562
|
|
@@ -575,43 +572,43 @@ module Veewee
|
|
575
572
|
puts "but now it's gone"
|
576
573
|
exit
|
577
574
|
end
|
578
|
-
|
579
|
-
#Set all params we know
|
575
|
+
|
576
|
+
#Set all params we know
|
580
577
|
vm.memory_size=@definition[:memory_size].to_i
|
581
578
|
vm.os_type_id=@definition[:os_type_id]
|
582
579
|
vm.cpu_count=@definition[:cpu_count].to_i
|
583
580
|
vm.name=boxname
|
584
581
|
|
585
582
|
puts "Creating vm #{vm.name} : #{vm.memory_size}M - #{vm.cpu_count} CPU - #{vm.os_type_id}"
|
586
|
-
#setting bootorder
|
583
|
+
#setting bootorder
|
587
584
|
vm.boot_order[0]=:hard_disk
|
588
585
|
vm.boot_order[1]=:dvd
|
589
586
|
vm.boot_order[2]=:null
|
590
587
|
vm.boot_order[3]=:null
|
591
588
|
vm.validate
|
592
589
|
vm.save
|
593
|
-
|
590
|
+
|
594
591
|
end
|
595
|
-
|
592
|
+
|
596
593
|
def self.create_disk(boxname)
|
597
594
|
#Now check the disks
|
598
595
|
#Maybe one day we can use the name, now we have to check location
|
599
596
|
#disk=VirtualBox::HardDrive.find(boxname)
|
600
597
|
location=boxname+"."+@definition[:disk_format].downcase
|
601
|
-
|
602
|
-
found=false
|
598
|
+
|
599
|
+
found=false
|
603
600
|
VirtualBox::HardDrive.all.each do |d|
|
604
601
|
if !d.location.match(/#{location}/).nil?
|
605
602
|
found=true
|
606
603
|
break
|
607
604
|
end
|
608
|
-
end
|
605
|
+
end
|
609
606
|
|
610
607
|
@vboxcmd=determine_vboxcmd
|
611
|
-
|
608
|
+
|
612
609
|
if !found
|
613
610
|
puts "Creating new harddrive of size #{@definition[:disk_size].to_i} "
|
614
|
-
|
611
|
+
|
615
612
|
#newdisk=VirtualBox::HardDrive.new
|
616
613
|
#newdisk.format=@definition[:disk_format]
|
617
614
|
#newdisk.logical_size=@definition[:disk_size].to_i
|
@@ -620,38 +617,38 @@ module Veewee
|
|
620
617
|
##PDB: again problems with the virtualbox GEM
|
621
618
|
##VirtualBox::Global.global.max_vdi_size=1000000
|
622
619
|
#newdisk.save
|
623
|
-
|
620
|
+
|
624
621
|
command="#{@vboxcmd} list systemproperties|grep '^Default machine'|cut -d ':' -f 2|sed -e 's/^[ ]*//'"
|
625
622
|
results=IO.popen("#{command}")
|
626
623
|
place=results.gets.chop
|
627
624
|
results.close
|
628
|
-
|
625
|
+
|
629
626
|
command ="#{@vboxcmd} createhd --filename '#{place}/#{boxname}/#{boxname}.#{@definition[:disk_format].downcase}' --size '#{@definition[:disk_size].to_i}' --format #{@definition[:disk_format].downcase} > /dev/null"
|
630
627
|
puts "#{command}"
|
631
628
|
Veewee::Shell.execute("#{command}")
|
632
|
-
|
629
|
+
|
633
630
|
end
|
634
|
-
|
631
|
+
|
635
632
|
end
|
636
|
-
|
633
|
+
|
637
634
|
def self.add_ide_controller(boxname)
|
638
635
|
#unless => "${vboxcmd} showvminfo '${vname}' | grep 'IDE Controller' "
|
639
636
|
command ="#{@vboxcmd} storagectl '#{boxname}' --name 'IDE Controller' --add ide"
|
640
637
|
Veewee::Shell.execute("#{command}")
|
641
638
|
end
|
642
|
-
|
639
|
+
|
643
640
|
def self.add_sata_controller(boxname)
|
644
641
|
#unless => "${vboxcmd} showvminfo '${vname}' | grep 'SATA Controller' ";
|
645
|
-
command ="#{@vboxcmd} storagectl '#{boxname}' --name 'SATA Controller' --add sata --hostiocache #{@definition[:hostiocache]}"
|
642
|
+
command ="#{@vboxcmd} storagectl '#{boxname}' --name 'SATA Controller' --add sata --sataportcount 1 --hostiocache #{@definition[:hostiocache]}"
|
646
643
|
Veewee::Shell.execute("#{command}")
|
647
644
|
end
|
648
|
-
|
649
|
-
|
645
|
+
|
646
|
+
|
650
647
|
def self.attach_disk(boxname)
|
651
648
|
location=boxname+"."+@definition[:disk_format].downcase
|
652
|
-
|
649
|
+
|
653
650
|
@vboxcmd=determine_vboxcmd
|
654
|
-
|
651
|
+
|
655
652
|
command="#{@vboxcmd} list systemproperties|grep '^Default machine'|cut -d ':' -f 2|sed -e 's/^[ ]*//'"
|
656
653
|
results=IO.popen("#{command}")
|
657
654
|
place=results.gets.chop
|
@@ -659,13 +656,13 @@ module Veewee
|
|
659
656
|
|
660
657
|
location="#{place}/#{boxname}/"+location
|
661
658
|
puts "Attaching disk: #{location}"
|
662
|
-
|
659
|
+
|
663
660
|
#command => "${vboxcmd} storageattach '${vname}' --storagectl 'SATA Controller' --port 0 --device 0 --type hdd --medium '${vname}.vdi'",
|
664
661
|
command ="#{@vboxcmd} storageattach '#{boxname}' --storagectl 'SATA Controller' --port 0 --device 0 --type hdd --medium '#{location}'"
|
665
662
|
Veewee::Shell.execute("#{command}")
|
666
663
|
|
667
664
|
end
|
668
|
-
|
665
|
+
|
669
666
|
def self.mount_isofile(boxname,isofile)
|
670
667
|
full_iso_file=File.join(@iso_dir,isofile)
|
671
668
|
puts "Mounting cdrom: #{full_iso_file}"
|
@@ -673,9 +670,9 @@ module Veewee
|
|
673
670
|
command ="#{@vboxcmd} storageattach '#{boxname}' --storagectl 'IDE Controller' --type dvddrive --port 1 --device 0 --medium '#{full_iso_file}'"
|
674
671
|
Veewee::Shell.execute("#{command}")
|
675
672
|
end
|
676
|
-
|
677
|
-
|
678
|
-
|
673
|
+
|
674
|
+
|
675
|
+
|
679
676
|
def self.suppress_messages
|
680
677
|
#Setting this annoying messages to register
|
681
678
|
VirtualBox::ExtraData.global["GUI/RegistrationData"]="triesLeft=0"
|
@@ -684,7 +681,7 @@ module Veewee
|
|
684
681
|
VirtualBox::ExtraData.global["GUI/UpdateCheckCount"]="60"
|
685
682
|
update_date=Time.now+86400
|
686
683
|
VirtualBox::ExtraData.global["GUI/UpdateDate"]="1 d, #{update_date.year}-#{update_date.month}-#{update_date.day}, stable"
|
687
|
-
|
684
|
+
|
688
685
|
VirtualBox::ExtraData.global.save
|
689
686
|
end
|
690
687
|
|
@@ -698,7 +695,7 @@ module Veewee
|
|
698
695
|
ensure
|
699
696
|
Socket.do_not_reverse_lookup = orig
|
700
697
|
end
|
701
|
-
|
698
|
+
|
702
699
|
def self.validate_box(boxname,options)
|
703
700
|
require 'cucumber'
|
704
701
|
|
@@ -725,16 +722,16 @@ module Veewee
|
|
725
722
|
end
|
726
723
|
|
727
724
|
end
|
728
|
-
|
725
|
+
|
729
726
|
def self.list_ostypes
|
730
727
|
puts
|
731
728
|
puts "Available os types:"
|
732
729
|
VirtualBox::Global.global.lib.virtualbox.guest_os_types.collect { |os|
|
733
730
|
puts "#{os.id}: #{os.description}"
|
734
|
-
}
|
731
|
+
}
|
735
732
|
end
|
736
|
-
|
737
|
-
|
733
|
+
|
734
|
+
|
738
735
|
def self.calculate_checksums(definition,boxname)
|
739
736
|
|
740
737
|
#TODO: get rid of definitiondir and so one
|
@@ -752,7 +749,7 @@ module Veewee
|
|
752
749
|
unless postinstall_files.nil?
|
753
750
|
for filename in postinstall_files
|
754
751
|
begin
|
755
|
-
full_filename=File.join(@definition_dir,boxname,filename)
|
752
|
+
full_filename=File.join(@definition_dir,boxname,filename)
|
756
753
|
|
757
754
|
checksums << Digest::MD5.hexdigest(File.read(full_filename))
|
758
755
|
rescue
|
@@ -782,14 +779,14 @@ module Veewee
|
|
782
779
|
dst.write(src.read)
|
783
780
|
}
|
784
781
|
}
|
785
|
-
|
782
|
+
|
786
783
|
end
|
787
|
-
|
784
|
+
|
788
785
|
def self.transaction(boxname,step_name,checksums,&block)
|
789
786
|
|
790
787
|
current_step_nr=step_name.split("-")[0].to_i
|
791
788
|
|
792
|
-
vm=VirtualBox::VM.find(boxname)
|
789
|
+
vm=VirtualBox::VM.find(boxname)
|
793
790
|
snapnames=Array.new
|
794
791
|
|
795
792
|
#If vm exists , look for snapshots
|
@@ -801,9 +798,9 @@ module Veewee
|
|
801
798
|
while (snapshot!=nil)
|
802
799
|
#puts "#{counter}:#{snapshot.name}"
|
803
800
|
snapnames[counter]=snapshot.name
|
804
|
-
counter=counter+1
|
801
|
+
counter=counter+1
|
805
802
|
snapshot=snapshot.children[0]
|
806
|
-
end
|
803
|
+
end
|
807
804
|
end
|
808
805
|
|
809
806
|
#find the last snapshot matching the state
|
@@ -815,7 +812,7 @@ module Veewee
|
|
815
812
|
# puts "we found a bad state"
|
816
813
|
last_good_state=c-1
|
817
814
|
break
|
818
|
-
end
|
815
|
+
end
|
819
816
|
end
|
820
817
|
#puts "Last good state: #{last_good_state}"
|
821
818
|
|
@@ -854,13 +851,13 @@ module Veewee
|
|
854
851
|
|
855
852
|
#puts "last good state #{last_good_state}"
|
856
853
|
|
857
|
-
|
854
|
+
|
858
855
|
if (current_step_nr > last_good_state)
|
859
856
|
|
860
857
|
if (last_good_state==-1)
|
861
858
|
#no initial snapshot is found, clean machine!
|
862
|
-
vm=VirtualBox::VM.find(boxname)
|
863
|
-
|
859
|
+
vm=VirtualBox::VM.find(boxname)
|
860
|
+
|
864
861
|
if !vm.nil?
|
865
862
|
if vm.running?
|
866
863
|
puts "Stopping machine"
|
@@ -869,7 +866,7 @@ module Veewee
|
|
869
866
|
sleep 1
|
870
867
|
end
|
871
868
|
end
|
872
|
-
|
869
|
+
|
873
870
|
#detaching cdroms (used to work in 3.x)
|
874
871
|
# vm.medium_attachments.each do |m|
|
875
872
|
# if m.type==:dvd
|
@@ -877,21 +874,21 @@ module Veewee
|
|
877
874
|
# m.detach
|
878
875
|
# end
|
879
876
|
# end
|
880
|
-
|
877
|
+
|
881
878
|
vm.reload
|
882
879
|
puts "We found no good state so we are destroying the previous machine+disks"
|
883
880
|
destroy_vm(boxname)
|
884
881
|
end
|
885
|
-
|
882
|
+
|
886
883
|
end
|
887
884
|
|
888
885
|
#puts "(re-)executing step #{step_name}"
|
889
|
-
|
890
|
-
|
886
|
+
|
887
|
+
|
891
888
|
yield
|
892
|
-
|
889
|
+
|
893
890
|
#Need to look it up again because if it was an initial load
|
894
|
-
vm=VirtualBox::VM.find(boxname)
|
891
|
+
vm=VirtualBox::VM.find(boxname)
|
895
892
|
puts "Step [#{current_step_nr}] was successfully - saving state"
|
896
893
|
vm.save_state
|
897
894
|
sleep 2 #waiting for it to be ok
|
@@ -900,11 +897,11 @@ module Veewee
|
|
900
897
|
vm.take_snapshot(step_name,"snapshot taken by veewee")
|
901
898
|
sleep 2 #waiting for it to be started again
|
902
899
|
vm.start
|
903
|
-
end
|
900
|
+
end
|
904
901
|
|
905
902
|
#pp snapnames
|
906
903
|
end
|
907
|
-
|
904
|
+
|
908
905
|
|
909
906
|
end #End Class
|
910
907
|
end #End Module
|