vagrant-export 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/vagrant-export/command.rb +1 -1
- data/lib/vagrant-export/exporter.rb +65 -49
- data/lib/vagrant-export/version.rb +1 -1
- data/lib/vagrant-export.rb +2 -2
- data/res/cleanup.sh +10 -43
- data/vagrant-export.gemspec +1 -1
- metadata +11 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 22ffb620520d9ce8de162db23c13534aaf2c6066
|
4
|
+
data.tar.gz: 9384052c5d82e9e8a6927c660dccf4373758a13f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9cc20fffcfe53286ff5900d86a1d17ebc6f8bed5b3263499580273f960a6b90260779c210bb888d17eae989b2a7a5fd61bd4fe42f38d8fbc85ae0749a0bd45b3
|
7
|
+
data.tar.gz: 1f619a25c1733c7eca78d84bef249873ff0f5ebd31d1de98d7b3654a609bf7f4f9d3f20adcd4c8dffa515080b748aa8c45455bd0a367fa018ee4d8d33ffed526
|
@@ -19,7 +19,7 @@ module VagrantPlugins
|
|
19
19
|
# @param vm Vagrant::Machine
|
20
20
|
# @param fast Boolean
|
21
21
|
# @param bare Boolean
|
22
|
-
def handle
|
22
|
+
def handle(vm, fast, bare)
|
23
23
|
@vm = vm
|
24
24
|
@did_run = false
|
25
25
|
|
@@ -27,16 +27,13 @@ module VagrantPlugins
|
|
27
27
|
if can_compress
|
28
28
|
compress
|
29
29
|
else
|
30
|
-
@env.uid.error
|
30
|
+
@env.uid.error('Cannot compress this type of machine')
|
31
31
|
return 1
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
return 1 unless export
|
36
|
-
|
37
|
-
unless bare
|
38
|
-
return 1 unless files
|
39
|
-
end
|
36
|
+
return 1 unless files(bare)
|
40
37
|
|
41
38
|
finalize
|
42
39
|
end
|
@@ -48,14 +45,14 @@ module VagrantPlugins
|
|
48
45
|
if @vm.state.short_description == 'running'
|
49
46
|
@did_run = true
|
50
47
|
else
|
51
|
-
@env.ui.info
|
52
|
-
@vm.action
|
48
|
+
@env.ui.info('Machine not running, bringing it up')
|
49
|
+
@vm.action(:up)
|
53
50
|
end
|
54
51
|
|
55
52
|
compress_supported = false
|
56
53
|
|
57
54
|
if @vm.config.vm.communicator != :winrm
|
58
|
-
@vm.communicate.execute
|
55
|
+
@vm.communicate.execute('lsb_release -i -s', error_key: :ssh_bad_exit_status_muted) do |type, data|
|
59
56
|
if type == :stdout && data.to_s =~ /mint|ubuntu|debian/i
|
60
57
|
compress_supported = true
|
61
58
|
end
|
@@ -71,25 +68,25 @@ module VagrantPlugins
|
|
71
68
|
source_script = File.expand_path('../../../res/cleanup.sh', __FILE__)
|
72
69
|
comm = @vm.communicate
|
73
70
|
|
74
|
-
@logger.debug
|
75
|
-
comm.upload
|
71
|
+
@logger.debug("Uploading #{source_script} to #{target_script}")
|
72
|
+
comm.upload(source_script, target_script)
|
76
73
|
|
77
|
-
sudo
|
78
|
-
sudo
|
74
|
+
sudo(comm, "chmod +x #{target_script}")
|
75
|
+
sudo(comm, "#{target_script}")
|
79
76
|
|
80
77
|
0
|
81
78
|
end
|
82
79
|
|
83
|
-
def sudo
|
84
|
-
@logger.debug
|
85
|
-
communicator.sudo
|
80
|
+
def sudo(communicator, command)
|
81
|
+
@logger.debug("Execute '#{command}'")
|
82
|
+
communicator.sudo(command, error_key: :ssh_bad_exit_status_muted) do |type, data|
|
86
83
|
if [:stderr, :stdout].include?(type)
|
87
84
|
return if data.empty?
|
88
85
|
data = data.to_s.chomp.strip
|
89
86
|
if type == :stdout
|
90
|
-
|
87
|
+
@vm.ui.info(data)
|
91
88
|
else
|
92
|
-
@vm.ui.error
|
89
|
+
@vm.ui.error(data)
|
93
90
|
end
|
94
91
|
end
|
95
92
|
end
|
@@ -98,56 +95,74 @@ module VagrantPlugins
|
|
98
95
|
def export
|
99
96
|
# Halt the machine
|
100
97
|
if @vm.state.short_description == 'running'
|
101
|
-
@env.ui.info
|
98
|
+
@env.ui.info('Halting VM for export')
|
102
99
|
@vm.action(:halt)
|
103
100
|
end
|
104
101
|
|
105
102
|
# Export to file
|
106
|
-
exported_path = File.join
|
103
|
+
exported_path = File.join(@env.tmp_path, Time.now.to_i.to_s)
|
107
104
|
@tmp_path = exported_path
|
108
|
-
FileUtils.
|
105
|
+
FileUtils.mkdir_p(exported_path)
|
109
106
|
|
110
|
-
@env.ui.info
|
107
|
+
@env.ui.info('Exporting machine')
|
111
108
|
@vm.provider.driver.export File.join(exported_path, 'box.ovf') do |progress|
|
112
109
|
@env.ui.clear_line
|
113
|
-
@env.ui.report_progress
|
110
|
+
@env.ui.report_progress(progress.percent, 100, false)
|
114
111
|
end
|
115
112
|
|
116
|
-
@logger.debug
|
113
|
+
@logger.debug("Exported VM to #{exported_path}")
|
117
114
|
end
|
118
115
|
|
119
|
-
def files
|
116
|
+
def files(bare)
|
120
117
|
|
121
118
|
# Add metadata json
|
122
119
|
begin
|
123
120
|
metadata = File.open(File.join(@tmp_path, 'metadata.json'), 'wb')
|
124
|
-
metadata.write
|
121
|
+
metadata.write('{"provider":"' + @vm.provider_name.to_s + '"}')
|
125
122
|
ensure
|
126
123
|
metadata.close
|
127
124
|
end
|
128
125
|
|
129
|
-
target_include_path = File.join
|
130
|
-
source_include_path = File.join
|
126
|
+
target_include_path = File.join(@tmp_path, 'include')
|
127
|
+
source_include_path = File.join(@vm.box.directory, 'include')
|
131
128
|
|
132
129
|
# Copy includes
|
133
|
-
if Dir.exist?
|
134
|
-
FileUtils.cp_r
|
130
|
+
if Dir.exist?(source_include_path) && !bare
|
131
|
+
FileUtils.cp_r(source_include_path, @tmp_path)
|
132
|
+
end
|
135
133
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
134
|
+
original_vagrantfile = File.join(@vm.box.directory, 'include')
|
135
|
+
vagrantfile_exists = File.exist?(original_vagrantfile)
|
136
|
+
vagrantfile_has_mac = false
|
137
|
+
|
138
|
+
# Check the original vagrant file for a mac settings
|
139
|
+
if vagrantfile_exists
|
140
|
+
File.readlines(original_vagrantfile).each { |line|
|
141
|
+
if line.to_s =~ /base_mac\s*=\s*("|')[a-z0-9]+("|')/i
|
142
|
+
vagrantfile_has_mac = true
|
142
143
|
end
|
143
|
-
|
144
|
+
}
|
144
145
|
end
|
145
146
|
|
146
|
-
#
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
147
|
+
# Otherwise, just put copy it
|
148
|
+
if vagrantfile_has_mac
|
149
|
+
FileUtils.cp(original_vagrantfile, File.join(@tmp_path, 'Vagrantfile'))
|
150
|
+
|
151
|
+
# If none, create a new one that has the mac setting,
|
152
|
+
# and includes the original
|
153
|
+
# The new Vagrantfile will include the old one, which
|
154
|
+
# is put into the includeds directory
|
155
|
+
else
|
156
|
+
File.open(File.join(@tmp_path, 'Vagrantfile'), 'wb') do |file|
|
157
|
+
file.write(Vagrant::Util::TemplateRenderer.render('package_Vagrantfile', {
|
158
|
+
base_mac: @vm.provider.driver.read_mac_address
|
159
|
+
}))
|
160
|
+
end
|
161
|
+
|
162
|
+
if vagrantfile_exists
|
163
|
+
FileUtils.mkdir_p(target_include_path) unless Dir.exist?(target_include_path)
|
164
|
+
FileUtils.cp(original_vagrantfile, File.join(target_include_path, '_Vagrantfile'))
|
165
|
+
end
|
151
166
|
end
|
152
167
|
|
153
168
|
# Make a box file out of it
|
@@ -163,19 +178,20 @@ module VagrantPlugins
|
|
163
178
|
|
164
179
|
def finalize
|
165
180
|
# Rename the box file
|
166
|
-
if File.exist?
|
167
|
-
box_name = @vm.box.name.gsub
|
168
|
-
target_box = File.join
|
169
|
-
|
181
|
+
if File.exist?(@box_file_name)
|
182
|
+
box_name = @vm.box.name.gsub('/', '_')
|
183
|
+
target_box = File.join(@env.cwd, box_name + '.box')
|
184
|
+
FileUtils.mv(@box_file_name, target_box)
|
185
|
+
@env.ui.info('Created ' + target_box)
|
170
186
|
end
|
171
187
|
|
172
188
|
# Remove the tmp files
|
173
|
-
FileUtils.rm_rf
|
189
|
+
FileUtils.rm_rf(@tmp_path)
|
174
190
|
|
175
191
|
# Resume the machine
|
176
192
|
if @did_run
|
177
|
-
@env.ui.info
|
178
|
-
@vm.action
|
193
|
+
@env.ui.info('Bringing the machine back up')
|
194
|
+
@vm.action(:up)
|
179
195
|
end
|
180
196
|
end
|
181
197
|
end
|
data/lib/vagrant-export.rb
CHANGED
data/res/cleanup.sh
CHANGED
@@ -1,83 +1,50 @@
|
|
1
|
-
#!/bin/bash
|
1
|
+
#!/bin/bash
|
2
2
|
|
3
|
-
|
3
|
+
echo "Removing old kernel packages"
|
4
4
|
apt-get -y --purge remove $(dpkg --list | grep '^rc' | awk '{print $2}')
|
5
5
|
apt-get -y --purge remove $(dpkg --list | egrep 'linux-image-[0-9]' | awk '{print $3,$2}' | sort -nr | tail -n +2 | grep -v $(uname -r) | awk '{ print $2}')
|
6
6
|
|
7
|
-
|
7
|
+
echo "Cleaning up apt"
|
8
8
|
apt-get -y --purge autoremove
|
9
9
|
apt-get -y clean
|
10
10
|
rm -rf /var/lib/apt/lists/*
|
11
11
|
rm -rf /var/lib/aptitude/*
|
12
12
|
|
13
|
-
|
13
|
+
echo "Cleaning up home"
|
14
14
|
rm -rf $HOME/.cache
|
15
15
|
rm -rf $HOME/.local
|
16
16
|
rm -rf $HOME/.npm
|
17
17
|
rm -rf $HOME/tmp
|
18
18
|
|
19
|
-
# Empty TYPO3 CMS temp files
|
20
19
|
if [[ -d /var/www/typo3temp ]]; then
|
20
|
+
echo "Empty TYPO3 CMS temp files"
|
21
21
|
find /var/www/typo3temp -type f -exec rm -f {} \;
|
22
22
|
fi
|
23
23
|
|
24
|
-
# Empty Flow temp files
|
25
24
|
if [[ -d /var/www/Data/Temporary ]]; then
|
26
|
-
|
25
|
+
echo "Empty TYPO3 Flow temp files"
|
26
|
+
rm -rf /var/www/Data/Temporary/*
|
27
27
|
fi
|
28
28
|
|
29
|
-
|
30
|
-
# Empty Magento temp files
|
31
29
|
if [[ -d /var/www/downloader/.cache ]]; then
|
30
|
+
echo "Empty Magento temp files"
|
32
31
|
rm -rf /var/www/downloader/.cache/*
|
33
|
-
fi
|
34
|
-
|
35
|
-
if [[ -d /var/www/downloader/pearlib/cache ]]; then
|
36
32
|
rm -rf /var/www/downloader/pearlib/cache/*
|
37
|
-
fi
|
38
|
-
|
39
|
-
if [[ -d /var/www/downloader/pearlib/download ]]; then
|
40
33
|
rm -rf /var/www/downloader/pearlib/download/*
|
41
|
-
fi
|
42
|
-
|
43
|
-
if [[ -d /var/www/var/cache ]]; then
|
44
34
|
rm -rf /var/www/var/cache/*
|
45
|
-
fi
|
46
|
-
|
47
|
-
if [[ -d /var/www/var/locks ]]; then
|
48
35
|
rm -rf /var/www/var/locks/*
|
49
|
-
fi
|
50
|
-
|
51
|
-
if [[ -d /var/www/var/log ]]; then
|
52
36
|
rm -rf /var/www/var/log/*
|
53
|
-
fi
|
54
|
-
|
55
|
-
if [[ -d /var/www/var/report ]]; then
|
56
37
|
rm -rf /var/www/var/report/*
|
57
|
-
fi
|
58
|
-
|
59
|
-
if [[ -d /var/www/var/cache ]]; then
|
60
|
-
rm -rf /var/www/var/cache/*
|
61
|
-
fi
|
62
|
-
|
63
|
-
if [[ -d /var/www/var/session ]]; then
|
64
38
|
rm -rf /var/www/var/session/*
|
65
|
-
fi
|
66
|
-
|
67
|
-
if [[ -d /var/www/var/tmp ]]; then
|
68
39
|
rm -rf /var/www/var/tmp/*
|
69
40
|
fi
|
70
41
|
|
71
|
-
|
72
|
-
# Empty tmp
|
73
|
-
rm -rf /tmp/*
|
74
|
-
|
75
|
-
# Make sure we sync before the next step
|
42
|
+
echo "Sync to disc"
|
76
43
|
sync
|
77
44
|
|
78
|
-
# Zero out the free space to save space in the final image:
|
79
45
|
echo "Zeroing device to make space..."
|
80
46
|
dd if=/dev/zero of=/EMPTY bs=1M
|
81
47
|
rm -f /EMPTY
|
82
48
|
|
49
|
+
echo "Exit happily"
|
83
50
|
exit 0
|
data/vagrant-export.gemspec
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-export
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Georg Großberger
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-24 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Export boxes to .box files including the original Vagrantfile and some
|
15
14
|
cleanups inside the VM
|
@@ -18,39 +17,38 @@ executables: []
|
|
18
17
|
extensions: []
|
19
18
|
extra_rdoc_files: []
|
20
19
|
files:
|
20
|
+
- ".gitignore"
|
21
21
|
- Gemfile
|
22
22
|
- lib/vagrant-export.rb
|
23
|
-
- lib/vagrant-export/exporter.rb
|
24
|
-
- lib/vagrant-export/version.rb
|
25
23
|
- lib/vagrant-export/command.rb
|
24
|
+
- lib/vagrant-export/exporter.rb
|
26
25
|
- lib/vagrant-export/plugin.rb
|
27
|
-
- vagrant-export.
|
26
|
+
- lib/vagrant-export/version.rb
|
28
27
|
- res/cleanup.sh
|
29
|
-
- .
|
28
|
+
- vagrant-export.gemspec
|
30
29
|
homepage: https://github.com/trenker/vagrant-export
|
31
30
|
licenses:
|
32
31
|
- MIT
|
32
|
+
metadata: {}
|
33
33
|
post_install_message:
|
34
34
|
rdoc_options: []
|
35
35
|
require_paths:
|
36
36
|
- lib
|
37
37
|
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
38
|
requirements:
|
40
|
-
- -
|
39
|
+
- - ">="
|
41
40
|
- !ruby/object:Gem::Version
|
42
41
|
version: '0'
|
43
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
43
|
requirements:
|
46
|
-
- -
|
44
|
+
- - ">="
|
47
45
|
- !ruby/object:Gem::Version
|
48
46
|
version: '0'
|
49
47
|
requirements: []
|
50
48
|
rubyforge_project:
|
51
|
-
rubygems_version:
|
49
|
+
rubygems_version: 2.2.2
|
52
50
|
signing_key:
|
53
|
-
specification_version:
|
51
|
+
specification_version: 4
|
54
52
|
summary: Export boxes to .box files including the original Vagrantfile and some cleanups
|
55
53
|
inside the VM
|
56
54
|
test_files: []
|