mirror of https://github.com/docker/docs.git
114 lines
3.3 KiB
Go
114 lines
3.3 KiB
Go
package libmachine
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
"github.com/docker/machine/libmachine/auth"
|
|
"github.com/docker/machine/libmachine/engine"
|
|
"github.com/docker/machine/libmachine/swarm"
|
|
"github.com/docker/machine/utils"
|
|
)
|
|
|
|
// In the 0.0.1 => 0.0.2 transition, the JSON representation of
|
|
// machines changed from a "flat" to a more "nested" structure
|
|
// for various options and configuration settings. To preserve
|
|
// compatibility with existing machines, these migration functions
|
|
// have been introduced. They preserve backwards compat at the expense
|
|
// of some duplicated information.
|
|
|
|
// validates host config and modifies if needed
|
|
// this is used for configuration updates
|
|
func MigrateHostV0ToHostV1(hostV0 *HostV0) *Host {
|
|
host := &Host{}
|
|
|
|
certInfoV0 := getCertInfoFromHost(hostV0)
|
|
|
|
host.HostOptions = &HostOptions{}
|
|
host.HostOptions.EngineOptions = &engine.EngineOptions{}
|
|
host.HostOptions.SwarmOptions = &swarm.SwarmOptions{
|
|
Address: "",
|
|
Discovery: hostV0.SwarmDiscovery,
|
|
Host: hostV0.SwarmHost,
|
|
Master: hostV0.SwarmMaster,
|
|
}
|
|
host.HostOptions.AuthOptions = &auth.AuthOptions{
|
|
StorePath: hostV0.StorePath,
|
|
CaCertPath: certInfoV0.CaCertPath,
|
|
CaCertRemotePath: "",
|
|
ServerCertPath: certInfoV0.ServerCertPath,
|
|
ServerKeyPath: certInfoV0.ServerKeyPath,
|
|
ClientKeyPath: certInfoV0.ClientKeyPath,
|
|
ServerCertRemotePath: "",
|
|
ServerKeyRemotePath: "",
|
|
PrivateKeyPath: certInfoV0.CaKeyPath,
|
|
ClientCertPath: certInfoV0.ClientCertPath,
|
|
}
|
|
|
|
return host
|
|
}
|
|
|
|
// fills nested host metadata and modifies if needed
|
|
// this is used for configuration updates
|
|
func MigrateHostMetadataV0ToHostMetadataV1(m *HostMetadataV0) *HostMetadata {
|
|
hostMetadata := &HostMetadata{}
|
|
hostMetadata.DriverName = m.DriverName
|
|
hostMetadata.HostOptions.EngineOptions = &engine.EngineOptions{}
|
|
hostMetadata.HostOptions.AuthOptions = &auth.AuthOptions{
|
|
StorePath: m.StorePath,
|
|
CaCertPath: m.CaCertPath,
|
|
CaCertRemotePath: "",
|
|
ServerCertPath: m.ServerCertPath,
|
|
ServerKeyPath: m.ServerKeyPath,
|
|
ClientKeyPath: "",
|
|
ServerCertRemotePath: "",
|
|
ServerKeyRemotePath: "",
|
|
PrivateKeyPath: m.PrivateKeyPath,
|
|
ClientCertPath: m.ClientCertPath,
|
|
}
|
|
|
|
return hostMetadata
|
|
}
|
|
|
|
func getCertInfoFromHost(h *HostV0) CertPathInfo {
|
|
// setup cert paths
|
|
caCertPath := h.CaCertPath
|
|
caKeyPath := h.PrivateKeyPath
|
|
clientCertPath := h.ClientCertPath
|
|
clientKeyPath := h.ClientKeyPath
|
|
serverCertPath := h.ServerCertPath
|
|
serverKeyPath := h.ServerKeyPath
|
|
|
|
if caCertPath == "" {
|
|
caCertPath = filepath.Join(utils.GetMachineCertDir(), "ca.pem")
|
|
}
|
|
|
|
if caKeyPath == "" {
|
|
caKeyPath = filepath.Join(utils.GetMachineCertDir(), "ca-key.pem")
|
|
}
|
|
|
|
if clientCertPath == "" {
|
|
clientCertPath = filepath.Join(utils.GetMachineCertDir(), "cert.pem")
|
|
}
|
|
|
|
if clientKeyPath == "" {
|
|
clientKeyPath = filepath.Join(utils.GetMachineCertDir(), "key.pem")
|
|
}
|
|
|
|
if serverCertPath == "" {
|
|
serverCertPath = filepath.Join(utils.GetMachineCertDir(), "server.pem")
|
|
}
|
|
|
|
if serverKeyPath == "" {
|
|
serverKeyPath = filepath.Join(utils.GetMachineCertDir(), "server-key.pem")
|
|
}
|
|
|
|
return CertPathInfo{
|
|
CaCertPath: caCertPath,
|
|
CaKeyPath: caKeyPath,
|
|
ClientCertPath: clientCertPath,
|
|
ClientKeyPath: clientKeyPath,
|
|
ServerCertPath: serverCertPath,
|
|
ServerKeyPath: serverKeyPath,
|
|
}
|
|
}
|