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:
commit
67bad68c9f
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue