builder/vmware-esxi: Add configuration options for remote cache path
Add configuration option to explicitly control where Packer uploads ISO and floppy files to on ESXi hosts. The `remote_cache_datastore` defaults to the `remote_datastore` value. The 'remote_cache_directory' defaults to 'packer_cache', similar to the local caching capabilities. Addresses issues with [GH-1218] and [GH-1221] where paths for uploaded ISO and floppy files are not written to a valid location in the datastore.
This commit is contained in:
parent
0bf293f193
commit
b6eb3eba1d
|
@ -45,12 +45,14 @@ type config struct {
|
|||
SkipCompaction bool `mapstructure:"skip_compaction"`
|
||||
VMXTemplatePath string `mapstructure:"vmx_template_path"`
|
||||
|
||||
RemoteType string `mapstructure:"remote_type"`
|
||||
RemoteDatastore string `mapstructure:"remote_datastore"`
|
||||
RemoteHost string `mapstructure:"remote_host"`
|
||||
RemotePort uint `mapstructure:"remote_port"`
|
||||
RemoteUser string `mapstructure:"remote_username"`
|
||||
RemotePassword string `mapstructure:"remote_password"`
|
||||
RemoteType string `mapstructure:"remote_type"`
|
||||
RemoteDatastore string `mapstructure:"remote_datastore"`
|
||||
RemoteCacheDatastore string `mapstructure:"remote_cache_datastore"`
|
||||
RemoteCacheDirectory string `mapstructure:"remote_cache_directory"`
|
||||
RemoteHost string `mapstructure:"remote_host"`
|
||||
RemotePort uint `mapstructure:"remote_port"`
|
||||
RemoteUser string `mapstructure:"remote_username"`
|
||||
RemotePassword string `mapstructure:"remote_password"`
|
||||
|
||||
RawSingleISOUrl string `mapstructure:"iso_url"`
|
||||
|
||||
|
@ -118,24 +120,34 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
|
|||
b.config.RemoteDatastore = "datastore1"
|
||||
}
|
||||
|
||||
if b.config.RemoteCacheDatastore == "" {
|
||||
b.config.RemoteCacheDatastore = b.config.RemoteDatastore
|
||||
}
|
||||
|
||||
if b.config.RemoteCacheDirectory == "" {
|
||||
b.config.RemoteCacheDirectory = "packer_cache"
|
||||
}
|
||||
|
||||
if b.config.RemotePort == 0 {
|
||||
b.config.RemotePort = 22
|
||||
}
|
||||
|
||||
// Errors
|
||||
templates := map[string]*string{
|
||||
"disk_name": &b.config.DiskName,
|
||||
"guest_os_type": &b.config.GuestOSType,
|
||||
"iso_checksum": &b.config.ISOChecksum,
|
||||
"iso_checksum_type": &b.config.ISOChecksumType,
|
||||
"iso_url": &b.config.RawSingleISOUrl,
|
||||
"vm_name": &b.config.VMName,
|
||||
"vmx_template_path": &b.config.VMXTemplatePath,
|
||||
"remote_type": &b.config.RemoteType,
|
||||
"remote_host": &b.config.RemoteHost,
|
||||
"remote_datastore": &b.config.RemoteDatastore,
|
||||
"remote_user": &b.config.RemoteUser,
|
||||
"remote_password": &b.config.RemotePassword,
|
||||
"disk_name": &b.config.DiskName,
|
||||
"guest_os_type": &b.config.GuestOSType,
|
||||
"iso_checksum": &b.config.ISOChecksum,
|
||||
"iso_checksum_type": &b.config.ISOChecksumType,
|
||||
"iso_url": &b.config.RawSingleISOUrl,
|
||||
"vm_name": &b.config.VMName,
|
||||
"vmx_template_path": &b.config.VMXTemplatePath,
|
||||
"remote_type": &b.config.RemoteType,
|
||||
"remote_host": &b.config.RemoteHost,
|
||||
"remote_datastore": &b.config.RemoteDatastore,
|
||||
"remote_cache_datastore": &b.config.RemoteCacheDatastore,
|
||||
"remote_cache_directory": &b.config.RemoteCacheDirectory,
|
||||
"remote_user": &b.config.RemoteUser,
|
||||
"remote_password": &b.config.RemotePassword,
|
||||
}
|
||||
|
||||
for n, ptr := range templates {
|
||||
|
|
|
@ -17,11 +17,13 @@ func NewDriver(config *config) (vmwcommon.Driver, error) {
|
|||
|
||||
drivers = []vmwcommon.Driver{
|
||||
&ESX5Driver{
|
||||
Host: config.RemoteHost,
|
||||
Port: config.RemotePort,
|
||||
Username: config.RemoteUser,
|
||||
Password: config.RemotePassword,
|
||||
Datastore: config.RemoteDatastore,
|
||||
Host: config.RemoteHost,
|
||||
Port: config.RemotePort,
|
||||
Username: config.RemoteUser,
|
||||
Password: config.RemotePassword,
|
||||
Datastore: config.RemoteDatastore,
|
||||
CacheDatastore: config.RemoteCacheDatastore,
|
||||
CacheDirectory: config.RemoteCacheDirectory,
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ type ESX5Driver struct {
|
|||
Username string
|
||||
Password string
|
||||
Datastore string
|
||||
CacheDatastore string
|
||||
CacheDirectory string
|
||||
|
||||
comm packer.Communicator
|
||||
outputDir string
|
||||
|
@ -84,13 +86,7 @@ func (d *ESX5Driver) Unregister(vmxPathLocal string) error {
|
|||
}
|
||||
|
||||
func (d *ESX5Driver) UploadISO(localPath string, checksum string, checksumType string) (string, error) {
|
||||
cacheRoot, _ := filepath.Abs(".")
|
||||
targetFile, err := filepath.Rel(cacheRoot, localPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
finalPath := d.datastorePath(targetFile)
|
||||
finalPath := d.cachePath(localPath)
|
||||
if err := d.mkdir(filepath.ToSlash(filepath.Dir(finalPath))); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -297,6 +293,10 @@ func (d *ESX5Driver) datastorePath(path string) string {
|
|||
return filepath.ToSlash(filepath.Join("/vmfs/volumes", d.Datastore, baseDir, filepath.Base(path)))
|
||||
}
|
||||
|
||||
func (d *ESX5Driver) cachePath(path string) string {
|
||||
return filepath.ToSlash(filepath.Join("/vmfs/volumes", d.CacheDatastore, d.CacheDirectory, filepath.Base(path)))
|
||||
}
|
||||
|
||||
func (d *ESX5Driver) connect() error {
|
||||
address := fmt.Sprintf("%s:%d", d.Host, d.Port)
|
||||
|
||||
|
|
Loading…
Reference in New Issue