Merge pull request #1250 from higebu/check-upload-iso-hash

builder/vmware/esxi: checksum iso upload to not always upload
This commit is contained in:
Mitchell Hashimoto 2014-07-19 09:42:26 -07:00
commit 67bad68c9f
4 changed files with 14 additions and 4 deletions

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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)