Fixes #1244, Add a check for upload iso hash to ESXi Driver
This commit is contained in:
parent
dbb6151b03
commit
6ff38c86ea
@ -84,7 +84,7 @@ func (d *ESX5Driver) Unregister(vmxPathLocal string) error {
|
|||||||
return d.sh("vim-cmd", "vmsvc/unregister", d.vmId)
|
return d.sh("vim-cmd", "vmsvc/unregister", d.vmId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *ESX5Driver) UploadISO(localPath string) (string, error) {
|
func (d *ESX5Driver) UploadISO(localPath string, checksum string, checksumType string) (string, error) {
|
||||||
cacheRoot, _ := filepath.Abs(".")
|
cacheRoot, _ := filepath.Abs(".")
|
||||||
targetFile, err := filepath.Rel(cacheRoot, localPath)
|
targetFile, err := filepath.Rel(cacheRoot, localPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -96,6 +96,12 @@ func (d *ESX5Driver) UploadISO(localPath string) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("Verifying checksum of %s", finalPath)
|
||||||
|
if d.verifyChecksum(checksumType, checksum, finalPath) {
|
||||||
|
log.Println("Initial checksum matched, no upload needed.")
|
||||||
|
return finalPath, nil
|
||||||
|
}
|
||||||
|
|
||||||
if err := d.upload(finalPath, localPath); err != nil {
|
if err := d.upload(finalPath, localPath); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ type RemoteDriver interface {
|
|||||||
// UploadISO uploads a local ISO to the remote side and returns the
|
// UploadISO uploads a local ISO to the remote side and returns the
|
||||||
// new path that should be used in the VMX along with an error if it
|
// new path that should be used in the VMX along with an error if it
|
||||||
// exists.
|
// exists.
|
||||||
UploadISO(string) (string, error)
|
UploadISO(string, string, string) (string, error)
|
||||||
|
|
||||||
// Adds a VM to inventory specified by the path to the VMX given.
|
// Adds a VM to inventory specified by the path to the VMX given.
|
||||||
Register(string) error
|
Register(string) error
|
||||||
|
@ -21,7 +21,7 @@ type RemoteDriverMock struct {
|
|||||||
UnregisterErr error
|
UnregisterErr error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *RemoteDriverMock) UploadISO(path string) (string, error) {
|
func (d *RemoteDriverMock) UploadISO(path string, checksum string, checksumType string) (string, error) {
|
||||||
d.UploadISOCalled = true
|
d.UploadISOCalled = true
|
||||||
d.UploadISOPath = path
|
d.UploadISOPath = path
|
||||||
return d.UploadISOResult, d.UploadISOErr
|
return d.UploadISOResult, d.UploadISOErr
|
||||||
|
@ -29,9 +29,13 @@ func (s *stepRemoteUpload) Run(state multistep.StateBag) multistep.StepAction {
|
|||||||
return multistep.ActionContinue
|
return multistep.ActionContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config := state.Get("config").(*config)
|
||||||
|
checksum := config.ISOChecksum
|
||||||
|
checksumType := config.ISOChecksumType
|
||||||
|
|
||||||
ui.Say(s.Message)
|
ui.Say(s.Message)
|
||||||
log.Printf("Remote uploading: %s", path)
|
log.Printf("Remote uploading: %s", path)
|
||||||
newPath, err := remote.UploadISO(path)
|
newPath, err := remote.UploadISO(path, checksum, checksumType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error uploading file: %s", err)
|
err := fmt.Errorf("Error uploading file: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user