Commit 6ff38c86 authored by Yuya Kusakabe's avatar Yuya Kusakabe

Fixes #1244, Add a check for upload iso hash to ESXi Driver

parent dbb6151b
...@@ -84,7 +84,7 @@ func (d *ESX5Driver) Unregister(vmxPathLocal string) error { ...@@ -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) { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment