diff --git a/builder/vmware/iso/driver_esx5.go b/builder/vmware/iso/driver_esx5.go index d72c65062..c422e20c9 100644 --- a/builder/vmware/iso/driver_esx5.go +++ b/builder/vmware/iso/driver_esx5.go @@ -84,7 +84,7 @@ func (d *ESX5Driver) Unregister(vmxPathLocal string) error { 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(".") targetFile, err := filepath.Rel(cacheRoot, localPath) if err != nil { @@ -96,6 +96,12 @@ func (d *ESX5Driver) UploadISO(localPath string) (string, error) { 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 { return "", err } diff --git a/builder/vmware/iso/remote_driver.go b/builder/vmware/iso/remote_driver.go index d020cb800..b597d530a 100644 --- a/builder/vmware/iso/remote_driver.go +++ b/builder/vmware/iso/remote_driver.go @@ -10,7 +10,7 @@ type RemoteDriver interface { // 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 // exists. - UploadISO(string) (string, error) + UploadISO(string, string, string) (string, error) // Adds a VM to inventory specified by the path to the VMX given. Register(string) error diff --git a/builder/vmware/iso/remote_driver_mock.go b/builder/vmware/iso/remote_driver_mock.go index fe494fd86..233056ae3 100644 --- a/builder/vmware/iso/remote_driver_mock.go +++ b/builder/vmware/iso/remote_driver_mock.go @@ -21,7 +21,7 @@ type RemoteDriverMock struct { 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.UploadISOPath = path return d.UploadISOResult, d.UploadISOErr diff --git a/builder/vmware/iso/step_remote_upload.go b/builder/vmware/iso/step_remote_upload.go index e739196ab..927c16c2a 100644 --- a/builder/vmware/iso/step_remote_upload.go +++ b/builder/vmware/iso/step_remote_upload.go @@ -29,9 +29,13 @@ func (s *stepRemoteUpload) Run(state multistep.StateBag) multistep.StepAction { return multistep.ActionContinue } + config := state.Get("config").(*config) + checksum := config.ISOChecksum + checksumType := config.ISOChecksumType + ui.Say(s.Message) log.Printf("Remote uploading: %s", path) - newPath, err := remote.UploadISO(path) + newPath, err := remote.UploadISO(path, checksum, checksumType) if err != nil { err := fmt.Errorf("Error uploading file: %s", err) state.Put("error", err)