vagrant-vmware-esxi 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +7 -2
- data/example_box/Vagrantfile +7 -3
- data/lib/vagrant-vmware-esxi/action.rb +8 -0
- data/lib/vagrant-vmware-esxi/action/createvm.rb +2 -2
- data/lib/vagrant-vmware-esxi/action/package.rb +139 -0
- data/lib/vagrant-vmware-esxi/errors.rb +9 -0
- data/lib/vagrant-vmware-esxi/version.rb +1 -1
- data/locales/en.yml +6 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a4b0a4a1d1fb0d75a31e089a5768c08f39e4a97
|
4
|
+
data.tar.gz: f05e33dc43287a63abe340df0129a6fe1bcaf4b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7cc652733e6811873f6fa2d1abc282120adc43fefee116f271ab96890d236d014b2ce9bf89a3b6b886ab69000d4b4f9b38e522f00bf644f9ff5c8659d641efb
|
7
|
+
data.tar.gz: 2c5590cb4815ef1a793f8f1c2e74dbda26d13d635a92f2c96d1b193f84b1a6ca69c71e5043c30fd5334eb772d7ffee1712bba54a33db0ae508364504793f6195
|
data/README.md
CHANGED
@@ -18,6 +18,7 @@ Features and Compatibility
|
|
18
18
|
* snapshots.
|
19
19
|
* rsync & NFS using built-in Vagrant synced folders.
|
20
20
|
* Provision using built-in Vagrant provisioner.
|
21
|
+
* package
|
21
22
|
|
22
23
|
Requirements
|
23
24
|
------------
|
@@ -51,7 +52,7 @@ Vagrant.configure("2") do |config|
|
|
51
52
|
# https://www.vmware.com/support/developer/ovf/
|
52
53
|
#
|
53
54
|
# If your box is stuck at "Powered On", then most likely
|
54
|
-
# the system
|
55
|
+
# the system doesn't have the vmware tools installed.
|
55
56
|
#
|
56
57
|
# Here are some of the MANY examples....
|
57
58
|
config.vm.box = 'hashicorp/precise64'
|
@@ -60,6 +61,9 @@ Vagrant.configure("2") do |config|
|
|
60
61
|
#config.vm.box = 'laravel/homestead'
|
61
62
|
#config.vm.box = 'centos/7'
|
62
63
|
#config.vm.box = 'bento/ubuntu-14.04'
|
64
|
+
#config.vm.box = 'generic/fedora26'
|
65
|
+
#config.vm.box = 'generic/alpine36'
|
66
|
+
|
63
67
|
|
64
68
|
# Supports type rsync and NFS.
|
65
69
|
config.vm.synced_folder('.', '/Vagrantfiles', type: 'rsync')
|
@@ -148,6 +152,7 @@ Vagrant.configure("2") do |config|
|
|
148
152
|
# when you run vagrant up. ie, if the vmname already exists,
|
149
153
|
# it will be destroyed, then over written... This is helpful
|
150
154
|
# if you have a VM that became an orphan (vagrant lost association).
|
155
|
+
# This will also overwrite your box when using vagrant package.
|
151
156
|
#esxi.allow_overwrite = 'True'
|
152
157
|
|
153
158
|
end
|
@@ -173,7 +178,7 @@ Basic usage
|
|
173
178
|
Known issues with vmware_esxi
|
174
179
|
-----------------------------
|
175
180
|
* Cleanup doesn't always destroy a VM that has been partially built. Use the allow_overwrite = 'True' option if you need to force a rebuild.
|
176
|
-
* ovftool for windows doesn't put ovftool.exe in your path. You can manually set your path, or install ovftool in the \HashiCorp\Vagrant\bin directory.
|
181
|
+
* ovftool installer for windows doesn't put ovftool.exe in your path. You can manually set your path, or install ovftool in the \HashiCorp\Vagrant\bin directory.
|
177
182
|
* Built-in Vagrant synced folders using NFS fails if you try to re-provision.
|
178
183
|
* In general I find NFS synced folders pretty "flakey" anyways...
|
179
184
|
* Multi machines may not provision one VM if the boxes are different.
|
data/example_box/Vagrantfile
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
Vagrant.configure("2") do |config|
|
2
2
|
|
3
|
-
#
|
3
|
+
# Select any box created for VMware that is compatible with
|
4
4
|
# the ovftool. To get maximum compatiblity You should download
|
5
5
|
# and install the latest version for your OS.
|
6
6
|
# https://www.vmware.com/support/developer/ovf/
|
7
7
|
#
|
8
8
|
# If your box is stuck at "Powered On", then most likely
|
9
|
-
# the system
|
9
|
+
# the system doesn't have the vmware tools installed.
|
10
10
|
#
|
11
|
-
# Here are some of the MANY examples....
|
11
|
+
# Here are some of the MANY box examples....
|
12
12
|
config.vm.box = 'hashicorp/precise64'
|
13
13
|
#config.vm.box = 'steveant/CentOS-7.0-1406-Minimal-x64'
|
14
14
|
#config.vm.box = 'geerlingguy/ubuntu1604'
|
15
15
|
#config.vm.box = 'laravel/homestead'
|
16
16
|
#config.vm.box = 'centos/7'
|
17
17
|
#config.vm.box = 'bento/ubuntu-14.04'
|
18
|
+
#config.vm.box = 'generic/fedora26'
|
19
|
+
#config.vm.box = 'generic/alpine36'
|
20
|
+
|
18
21
|
|
19
22
|
# Supports type rsync and NFS.
|
20
23
|
config.vm.synced_folder('.', '/Vagrantfiles', type: 'rsync')
|
@@ -103,6 +106,7 @@ Vagrant.configure("2") do |config|
|
|
103
106
|
# when you run vagrant up. ie, if the vmname already exists,
|
104
107
|
# it will be destroyed, then over written... This is helpful
|
105
108
|
# if you have a VM that became an orphan (vagrant lost association).
|
109
|
+
# This will also overwrite your box when using vagrant package.
|
106
110
|
#esxi.allow_overwrite = 'True'
|
107
111
|
|
108
112
|
end
|
@@ -147,6 +147,13 @@ module VagrantPlugins
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
+
def self.action_package
|
151
|
+
Vagrant::Action::Builder.new.tap do |b|
|
152
|
+
b.use ReadState
|
153
|
+
b.use Package
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
150
157
|
action_root = Pathname.new(File.expand_path('../action', __FILE__))
|
151
158
|
autoload :ConnectESXi, action_root.join('connect_esxi')
|
152
159
|
autoload :CreateVM, action_root.join('createvm')
|
@@ -157,6 +164,7 @@ module VagrantPlugins
|
|
157
164
|
autoload :Destroy, action_root.join('destroy')
|
158
165
|
autoload :Suspend, action_root.join('suspend')
|
159
166
|
autoload :Resume, action_root.join('resume')
|
167
|
+
autoload :Package, action_root.join('package')
|
160
168
|
autoload :SnapshotInfo, action_root.join('snapshot_info')
|
161
169
|
autoload :SnapshotList, action_root.join('snapshot_list')
|
162
170
|
autoload :SnapshotSave, action_root.join('snapshot_save')
|
@@ -261,7 +261,7 @@ module VagrantPlugins
|
|
261
261
|
# Using ovftool, import vmx in box folder, export to ESXi server
|
262
262
|
#
|
263
263
|
unless system 'ovftool --version'
|
264
|
-
raise Errors::
|
264
|
+
raise Errors::OVFToolError,
|
265
265
|
message: 'ovftool not found or not in your path.'\
|
266
266
|
" Please download and "\
|
267
267
|
' install from http://www.vmware.com.'
|
@@ -276,7 +276,7 @@ module VagrantPlugins
|
|
276
276
|
# Security bug if unremarked! Password will be exposed in log file.
|
277
277
|
# @logger.info("vagrant-vmware-esxi, createvm: ovf_cmd #{ovf_cmd}")
|
278
278
|
unless system "#{ovf_cmd}"
|
279
|
-
raise Errors::
|
279
|
+
raise Errors::OVFToolError, message: ''
|
280
280
|
end
|
281
281
|
|
282
282
|
# VMX file is not needed any longer
|
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'net/ssh/simple'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module ESXi
|
7
|
+
module Action
|
8
|
+
# This action will save (create) a new snapshot
|
9
|
+
class Package
|
10
|
+
def initialize(app, env)
|
11
|
+
@app = app
|
12
|
+
@logger = Log4r::Logger.new('vagrant_vmware_esxi::action::package')
|
13
|
+
env['package.files'] ||= {}
|
14
|
+
env['package.output'] ||= 'package'
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(env)
|
18
|
+
suspend(env)
|
19
|
+
@app.call(env)
|
20
|
+
end
|
21
|
+
|
22
|
+
def suspend(env)
|
23
|
+
@logger.info('vagrant-vmware-esxi, package: start...')
|
24
|
+
|
25
|
+
# Get config.
|
26
|
+
machine = env[:machine]
|
27
|
+
config = env[:machine].provider_config
|
28
|
+
|
29
|
+
@logger.info("vagrant-vmware-esxi, package: machine id: #{machine.id}")
|
30
|
+
@logger.info("vagrant-vmware-esxi, package: current state: #{env[:machine_state]}")
|
31
|
+
|
32
|
+
if env[:machine_state].to_s != 'powered_off'
|
33
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
34
|
+
message: 'Cannot package in this state, must '\
|
35
|
+
'be powered off.')
|
36
|
+
else
|
37
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
38
|
+
message: 'Attempting to package')
|
39
|
+
|
40
|
+
if (config.allow_overwrite =~ %r{true}i) ||
|
41
|
+
(config.allow_overwrite =~ %r{yes}i)
|
42
|
+
overwrite_opts = '--overwrite'
|
43
|
+
else
|
44
|
+
overwrite_opts = nil
|
45
|
+
end
|
46
|
+
|
47
|
+
boxname = env['package.output'].gsub('/', '-VAGRANTSLASH-')
|
48
|
+
tmpdir = "ZZZZ_tmpdir"
|
49
|
+
Dir.mkdir(tmpdir) unless File.exists?(tmpdir)
|
50
|
+
|
51
|
+
env[:ui].info I18n.t('vagrant_vmware_esxi.vagrant_vmware_esxi_message',
|
52
|
+
message: "boxname: #{boxname}.box")
|
53
|
+
|
54
|
+
if File.exists?("#{boxname}.box") && overwrite_opts.nil?
|
55
|
+
raise Errors::GeneralError,
|
56
|
+
message: "#{boxname}.box already exists. Set \n"\
|
57
|
+
" allow_overwrite='True' in Vagrantfile for force."
|
58
|
+
end
|
59
|
+
|
60
|
+
# Find a tar/bsdtar
|
61
|
+
if system 'tar --version >/dev/null 2>&1'
|
62
|
+
tar_cmd = 'tar'
|
63
|
+
elsif system 'bsdtar --version >/dev/null 2>&1'
|
64
|
+
tar_cmd = 'bsdtar'
|
65
|
+
else
|
66
|
+
raise Errors::ESXiConfigError,
|
67
|
+
message: 'unable to find tar in your path.'
|
68
|
+
end
|
69
|
+
|
70
|
+
# Check if user files and Vagrantfile exists
|
71
|
+
if env['package.include']
|
72
|
+
env['package.include'].each do |f|
|
73
|
+
unless File.exists?(f)
|
74
|
+
raise Errors::GeneralError,
|
75
|
+
message: "file not found #{f}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
if env['package.vagrantfile']
|
80
|
+
unless File.exists?(env['package.vagrantfile'])
|
81
|
+
raise Errors::GeneralError,
|
82
|
+
message: "file not found #{env['package.vagrantfile']}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Using ovftool, import vmx in box folder, export to ESXi server
|
88
|
+
#
|
89
|
+
unless system 'ovftool --version'
|
90
|
+
raise Errors::OVFToolError,
|
91
|
+
message: 'ovftool not found or not in your path.'\
|
92
|
+
" Please download and "\
|
93
|
+
' install from http://www.vmware.com.'
|
94
|
+
end
|
95
|
+
|
96
|
+
ovf_cmd = "ovftool --noSSLVerify -tt=VMX --name=\"#{boxname}\" "\
|
97
|
+
"#{overwrite_opts} vi://#{config.esxi_username}:"\
|
98
|
+
"#{config.esxi_password}@#{config.esxi_hostname}"\
|
99
|
+
"?moref=vim.VirtualMachine:#{machine.id} #{tmpdir}"
|
100
|
+
|
101
|
+
unless system "#{ovf_cmd}"
|
102
|
+
raise Errors::OVFToolError, message: ''
|
103
|
+
end
|
104
|
+
|
105
|
+
# Add user files, Vagrantfile & metadata
|
106
|
+
if env['package.include']
|
107
|
+
env['package.include'].each do |f|
|
108
|
+
env[:ui].info("Including user file: #{f}")
|
109
|
+
FileUtils.cp(f, "#{tmpdir}/#{boxname}/")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
if env['package.vagrantfile']
|
113
|
+
env[:ui].info('Including user Vagrantfile')
|
114
|
+
FileUtils.cp(env['package.vagrantfile'], "#{tmpdir}/#{boxname}/")
|
115
|
+
end
|
116
|
+
# Add metadata.json
|
117
|
+
File.open("#{tmpdir}/#{boxname}/metadata.json", "w") do |f|
|
118
|
+
unless f.write('{"provider":"vmware"}')
|
119
|
+
raise Errors::GeneralError, message: 'cannot create metadata.json'
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
env[:ui].info("tarring #{boxname}.box")
|
124
|
+
unless system "cd #{tmpdir}/#{boxname} ; #{tar_cmd} cvf ../../#{boxname}.box *"
|
125
|
+
raise Errors::GeneralError,
|
126
|
+
message: 'tar command failed.'
|
127
|
+
end
|
128
|
+
|
129
|
+
env[:ui].info("Doing cleanup.")
|
130
|
+
unless FileUtils.rm_r tmpdir
|
131
|
+
raise Errors::GeneralError,
|
132
|
+
message: "unable to remove tmpdir. (#{tmpdir})"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -17,6 +17,15 @@ module VagrantPlugins
|
|
17
17
|
class ESXiConfigError < VagrantESXiErrors
|
18
18
|
error_key(:esxi_config_error)
|
19
19
|
end
|
20
|
+
|
21
|
+
# Error class
|
22
|
+
class OVFToolError < VagrantESXiErrors
|
23
|
+
error_key(:esxi_ovftool_error)
|
24
|
+
end
|
25
|
+
# Error class
|
26
|
+
class GeneralError < VagrantESXiErrors
|
27
|
+
error_key(:general_error)
|
28
|
+
end
|
20
29
|
end
|
21
30
|
end
|
22
31
|
end
|
data/locales/en.yml
CHANGED
@@ -18,6 +18,12 @@ en:
|
|
18
18
|
esxi_config_error: |-
|
19
19
|
There was an ESXi configuration error.
|
20
20
|
%{message}
|
21
|
+
esxi_ovftool_error: |-
|
22
|
+
There was an OVF Tool error.
|
23
|
+
%{message}
|
24
|
+
general_error: |-
|
25
|
+
There was an error.
|
26
|
+
%{message}
|
21
27
|
vagrant_vmware_esxi_message: |-
|
22
28
|
--- %{message}
|
23
29
|
vmbuild_not_done: |-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-vmware-esxi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Senkerik
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- lib/vagrant-vmware-esxi/action/createvm.rb
|
129
129
|
- lib/vagrant-vmware-esxi/action/destroy.rb
|
130
130
|
- lib/vagrant-vmware-esxi/action/halt.rb
|
131
|
+
- lib/vagrant-vmware-esxi/action/package.rb
|
131
132
|
- lib/vagrant-vmware-esxi/action/read_ssh_info.rb
|
132
133
|
- lib/vagrant-vmware-esxi/action/read_state.rb
|
133
134
|
- lib/vagrant-vmware-esxi/action/resume.rb
|