mirror of https://github.com/docker/docs.git
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package host
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
|
|
"github.com/docker/machine/libmachine/log"
|
|
)
|
|
|
|
type RawHost struct {
|
|
Driver *json.RawMessage
|
|
}
|
|
|
|
func MigrateHostV2ToHostV3(hostV2 *V2, data []byte, storePath string) *Host {
|
|
// Migrate to include RawDriver so that driver plugin will work
|
|
// smoothly.
|
|
rawHost := &RawHost{}
|
|
if err := json.Unmarshal(data, &rawHost); err != nil {
|
|
log.Warnf("Could not unmarshal raw host for RawDriver information: %s", err)
|
|
}
|
|
|
|
m := make(map[string]interface{})
|
|
|
|
// Must migrate to include store path in driver since it was not
|
|
// previously stored in drivers directly
|
|
d := json.NewDecoder(bytes.NewReader(*rawHost.Driver))
|
|
d.UseNumber()
|
|
if err := d.Decode(&m); err != nil {
|
|
log.Warnf("Could not unmarshal raw host into map[string]interface{}: %s", err)
|
|
}
|
|
|
|
m["StorePath"] = storePath
|
|
|
|
// Now back to []byte
|
|
rawDriver, err := json.Marshal(m)
|
|
if err != nil {
|
|
log.Warnf("Could not re-marshal raw driver: %s", err)
|
|
}
|
|
|
|
h := &Host{
|
|
ConfigVersion: 2,
|
|
DriverName: hostV2.DriverName,
|
|
Name: hostV2.Name,
|
|
HostOptions: hostV2.HostOptions,
|
|
RawDriver: rawDriver,
|
|
}
|
|
|
|
return h
|
|
}
|