提交 d5640561 编写于 作者: M Matt Rickard

vendor: update docker-machine for hyper-v fix

上级 24f052a8
{
"ImportPath": "k8s.io/minikube",
"GoVersion": "go1.9",
"GoVersion": "go1.10",
"GodepVersion": "v79",
"Packages": [
"./..."
......@@ -1161,17 +1161,17 @@
},
{
"ImportPath": "github.com/docker/go-connections/nat",
"Comment": "v0.3.0",
"Comment": "v0.2.1-30-g3ede32e",
"Rev": "3ede32e2033de7505e6500d6c868c2b9ed9f169d"
},
{
"ImportPath": "github.com/docker/go-connections/sockets",
"Comment": "v0.3.0",
"Comment": "v0.2.1-30-g3ede32e",
"Rev": "3ede32e2033de7505e6500d6c868c2b9ed9f169d"
},
{
"ImportPath": "github.com/docker/go-connections/tlsconfig",
"Comment": "v0.3.0",
"Comment": "v0.2.1-30-g3ede32e",
"Rev": "3ede32e2033de7505e6500d6c868c2b9ed9f169d"
},
{
......@@ -1190,163 +1190,163 @@
},
{
"ImportPath": "github.com/docker/machine/commands/mcndirs",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/drivers/errdriver",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/drivers/hyperv",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/drivers/none",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/drivers/virtualbox",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/drivers/vmwarefusion",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/auth",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/cert",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/check",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/drivers",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/drivers/plugin",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/drivers/plugin/localbinary",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/drivers/rpc",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/engine",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/host",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/log",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/mcndockerclient",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/mcnerror",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/mcnflag",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/mcnutils",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/persist",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/provision",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/provision/pkgaction",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/provision/serviceaction",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/shell",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/ssh",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/state",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/swarm",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/version",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/libmachine/versioncmp",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/machine/version",
"Comment": "docs-v0.8.2-2016-09-26-351-ga950319e",
"Rev": "a950319ea4041615add4a243e684b1baadb6436f"
"Comment": "docs-v0.8.2-2016-09-26-366-ge501d1bc",
"Rev": "e501d1bcb54f09de8ff71aa20010321d18425d19"
},
{
"ImportPath": "github.com/docker/spdystream",
......@@ -2011,7 +2011,6 @@
},
{
"ImportPath": "github.com/inconshreveable/mousetrap",
"Comment": "v1.0",
"Rev": "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75"
},
{
......@@ -2053,7 +2052,6 @@
},
{
"ImportPath": "github.com/juju/ratelimit",
"Comment": "1.0",
"Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342"
},
{
......@@ -2297,7 +2295,6 @@
},
{
"ImportPath": "github.com/pelletier/go-buffruneio",
"Comment": "v0.1.0",
"Rev": "df1e16fde7fc330a0ca68167c23bf7ed6ac31d6d"
},
{
......@@ -2369,17 +2366,17 @@
},
{
"ImportPath": "github.com/r2d4/external-storage/lib/controller",
"Comment": "v1.0.0-26-g8c0e860",
"Comment": "v1.0.0-26-g8c0e8605",
"Rev": "8c0e8605dc7b85893e144efd8e76d4a473f4bc7d"
},
{
"ImportPath": "github.com/r2d4/external-storage/lib/leaderelection",
"Comment": "v1.0.0-26-g8c0e860",
"Comment": "v1.0.0-26-g8c0e8605",
"Rev": "8c0e8605dc7b85893e144efd8e76d4a473f4bc7d"
},
{
"ImportPath": "github.com/r2d4/external-storage/lib/leaderelection/resourcelock",
"Comment": "v1.0.0-26-g8c0e860",
"Comment": "v1.0.0-26-g8c0e8605",
"Rev": "8c0e8605dc7b85893e144efd8e76d4a473f4bc7d"
},
{
......@@ -2462,7 +2459,6 @@
},
{
"ImportPath": "github.com/spf13/viper",
"Comment": "v1.0.0",
"Rev": "25b30aa063fc18e48662b86996252eabdcf2f0c7"
},
{
......@@ -2629,7 +2625,6 @@
},
{
"ImportPath": "github.com/xiang90/probing",
"Comment": "0.0.1",
"Rev": "07dd2e8dfe18522e9c447ba95f2fe95262f63bb2"
},
{
......
......@@ -128,7 +128,7 @@ func (d *Driver) GetURL() (string, error) {
}
func (d *Driver) GetState() (state.State, error) {
stdout, err := cmdOut("(", "hyper-v\\Get-VM", d.MachineName, ").state")
stdout, err := cmdOut("(", "Hyper-V\\Get-VM", d.MachineName, ").state")
if err != nil {
return state.None, fmt.Errorf("Failed to find the VM status")
}
......@@ -205,7 +205,7 @@ func (d *Driver) Create() error {
return err
}
if err := cmd("hyper-v\\New-VM",
if err := cmd("Hyper-V\\New-VM",
d.MachineName,
"-Path", fmt.Sprintf("'%s'", d.ResolveStorePath(".")),
"-SwitchName", quote(virtualSwitch),
......@@ -214,7 +214,7 @@ func (d *Driver) Create() error {
}
if d.CPU > 1 {
if err := cmd("hyper-v\\Set-VMProcessor",
if err := cmd("Hyper-V\\Set-VMProcessor",
d.MachineName,
"-Count", fmt.Sprintf("%d", d.CPU)); err != nil {
return err
......@@ -222,7 +222,7 @@ func (d *Driver) Create() error {
}
if d.MacAddr != "" {
if err := cmd("hyper-v\\Set-VMNetworkAdapter",
if err := cmd("Hyper-V\\Set-VMNetworkAdapter",
"-VMName", d.MachineName,
"-StaticMacAddress", fmt.Sprintf("\"%s\"", d.MacAddr)); err != nil {
return err
......@@ -230,7 +230,7 @@ func (d *Driver) Create() error {
}
if d.VLanID > 0 {
if err := cmd("hyper-v\\Set-VMNetworkAdapterVlan",
if err := cmd("Hyper-V\\Set-VMNetworkAdapterVlan",
"-VMName", d.MachineName,
"-Access",
"-VlanId", fmt.Sprintf("%d", d.VLanID)); err != nil {
......@@ -238,13 +238,13 @@ func (d *Driver) Create() error {
}
}
if err := cmd("hyper-v\\Set-VMDvdDrive",
if err := cmd("Hyper-V\\Set-VMDvdDrive",
"-VMName", d.MachineName,
"-Path", quote(d.ResolveStorePath("boot2docker.iso"))); err != nil {
return err
}
if err := cmd("hyper-v\\Add-VMHardDiskDrive",
if err := cmd("Hyper-V\\Add-VMHardDiskDrive",
"-VMName", d.MachineName,
"-Path", quote(diskImage)); err != nil {
return err
......@@ -257,7 +257,7 @@ func (d *Driver) Create() error {
func (d *Driver) chooseVirtualSwitch() (string, error) {
if d.VSwitch == "" {
// Default to the first external switche and in the process avoid DockerNAT
stdout, err := cmdOut("(hyper-v\\Get-VMSwitch -SwitchType External).Name")
stdout, err := cmdOut("(Hyper-V\\Get-VMSwitch -SwitchType External).Name")
if err != nil {
return "", err
}
......@@ -271,7 +271,7 @@ func (d *Driver) chooseVirtualSwitch() (string, error) {
return switches[0], nil
}
stdout, err := cmdOut("(hyper-v\\Get-VMSwitch).Name")
stdout, err := cmdOut("(Hyper-V\\Get-VMSwitch).Name")
if err != nil {
return "", err
}
......@@ -327,7 +327,7 @@ func (d *Driver) waitStopped() error {
// Start starts an host
func (d *Driver) Start() error {
if err := cmd("hyper-v\\Start-VM", d.MachineName); err != nil {
if err := cmd("Hyper-V\\Start-VM", d.MachineName); err != nil {
return err
}
......@@ -343,7 +343,7 @@ func (d *Driver) Start() error {
// Stop stops an host
func (d *Driver) Stop() error {
if err := cmd("hyper-v\\Stop-VM", d.MachineName); err != nil {
if err := cmd("Hyper-V\\Stop-VM", d.MachineName); err != nil {
return err
}
......@@ -369,7 +369,7 @@ func (d *Driver) Remove() error {
}
}
return cmd("hyper-v\\Remove-VM", d.MachineName, "-Force")
return cmd("Hyper-V\\Remove-VM", d.MachineName, "-Force")
}
// Restart stops and starts an host
......@@ -384,7 +384,7 @@ func (d *Driver) Restart() error {
// Kill force stops an host
func (d *Driver) Kill() error {
if err := cmd("hyper-v\\Stop-VM", d.MachineName, "-TurnOff"); err != nil {
if err := cmd("Hyper-V\\Stop-VM", d.MachineName, "-TurnOff"); err != nil {
return err
}
......@@ -406,7 +406,7 @@ func (d *Driver) GetIP() (string, error) {
return "", drivers.ErrHostIsNotRunning
}
stdout, err := cmdOut("((", "hyper-v\\Get-VM", d.MachineName, ").networkadapters[0]).ipaddresses[0]")
stdout, err := cmdOut("((", "Hyper-V\\Get-VM", d.MachineName, ").networkadapters[0]).ipaddresses[0]")
if err != nil {
return "", err
}
......@@ -440,7 +440,7 @@ func (d *Driver) generateDiskImage() (string, error) {
}
log.Infof("Creating VHD")
if err := cmd("hyper-v\\New-VHD", "-Path", quote(fixed), "-SizeBytes", fixedDiskSize, "-Fixed"); err != nil {
if err := cmd("Hyper-V\\New-VHD", "-Path", quote(fixed), "-SizeBytes", fixedDiskSize, "-Fixed"); err != nil {
return "", err
}
......@@ -462,12 +462,12 @@ func (d *Driver) generateDiskImage() (string, error) {
}
file.Close()
if err := cmd("hyper-v\\Convert-VHD", "-Path", quote(fixed), "-DestinationPath", quote(diskImage), "-VHDType", "Dynamic", "-DeleteSource"); err != nil {
if err := cmd("Hyper-V\\Convert-VHD", "-Path", quote(fixed), "-DestinationPath", quote(diskImage), "-VHDType", "Dynamic", "-DeleteSource"); err != nil {
return "", err
}
if isWindowsAdmin {
if err := cmd("hyper-v\\Resize-VHD", "-Path", quote(diskImage), "-SizeBytes", toMb(d.DiskSize)); err != nil {
if err := cmd("Hyper-V\\Resize-VHD", "-Path", quote(diskImage), "-SizeBytes", toMb(d.DiskSize)); err != nil {
return "", err
}
}
......
......@@ -55,7 +55,7 @@ func parseLines(stdout string) []string {
}
func hypervAvailable() error {
stdout, err := cmdOut("@(Get-Command hyper-v\\Get-VM).ModuleName")
stdout, err := cmdOut("@(Get-Module -ListAvailable hyper-v).Name | Get-Unique")
if err != nil {
return err
}
......
......@@ -10,13 +10,74 @@ import (
"github.com/docker/machine/libmachine/mcnutils"
)
func BootstrapCertificates(authOptions *auth.Options) error {
func createCACert(authOptions *auth.Options, caOrg string, bits int) error {
caCertPath := authOptions.CaCertPath
caPrivateKeyPath := authOptions.CaPrivateKeyPath
log.Infof("Creating CA: %s", caCertPath)
// check if the key path exists; if so, error
if _, err := os.Stat(caPrivateKeyPath); err == nil {
return errors.New("certificate authority key already exists")
}
if err := GenerateCACertificate(caCertPath, caPrivateKeyPath, caOrg, bits); err != nil {
return fmt.Errorf("generating CA certificate failed: %s", err)
}
return nil
}
func createCert(authOptions *auth.Options, org string, bits int) error {
certDir := authOptions.CertDir
caCertPath := authOptions.CaCertPath
caPrivateKeyPath := authOptions.CaPrivateKeyPath
clientCertPath := authOptions.ClientCertPath
clientKeyPath := authOptions.ClientKeyPath
log.Infof("Creating client certificate: %s", clientCertPath)
if _, err := os.Stat(certDir); err != nil {
if os.IsNotExist(err) {
if err := os.Mkdir(certDir, 0700); err != nil {
return fmt.Errorf("failure creating machine client cert dir: %s", err)
}
} else {
return err
}
}
// check if the key path exists; if so, error
if _, err := os.Stat(clientKeyPath); err == nil {
return errors.New("client key already exists")
}
// Used to generate the client certificate.
certOptions := &Options{
Hosts: []string{""},
CertFile: clientCertPath,
KeyFile: clientKeyPath,
CAFile: caCertPath,
CAKeyFile: caPrivateKeyPath,
Org: org,
Bits: bits,
SwarmMaster: false,
}
if err := GenerateCert(certOptions); err != nil {
return fmt.Errorf("failure generating client certificate: %s", err)
}
return nil
}
func BootstrapCertificates(authOptions *auth.Options) error {
certDir := authOptions.CertDir
caCertPath := authOptions.CaCertPath
clientCertPath := authOptions.ClientCertPath
clientKeyPath := authOptions.ClientKeyPath
caPrivateKeyPath := authOptions.CaPrivateKeyPath
// TODO: I'm not super happy about this use of "org", the user should
// have to specify it explicitly instead of implicitly basing it on
// $USER.
......@@ -28,7 +89,7 @@ func BootstrapCertificates(authOptions *auth.Options) error {
if _, err := os.Stat(certDir); err != nil {
if os.IsNotExist(err) {
if err := os.MkdirAll(certDir, 0700); err != nil {
return fmt.Errorf("Creating machine certificate dir failed: %s", err)
return fmt.Errorf("creating machine certificate dir failed: %s", err)
}
} else {
return err
......@@ -36,50 +97,38 @@ func BootstrapCertificates(authOptions *auth.Options) error {
}
if _, err := os.Stat(caCertPath); os.IsNotExist(err) {
log.Infof("Creating CA: %s", caCertPath)
// check if the key path exists; if so, error
if _, err := os.Stat(caPrivateKeyPath); err == nil {
return errors.New("certificate authority key already exists")
if err := createCACert(authOptions, caOrg, bits); err != nil {
return err
}
if err := GenerateCACertificate(caCertPath, caPrivateKeyPath, caOrg, bits); err != nil {
return fmt.Errorf("Generating CA certificate failed: %s", err)
} else {
current, err := CheckCertificateDate(caCertPath)
if err != nil {
return err
}
}
if _, err := os.Stat(clientCertPath); os.IsNotExist(err) {
log.Infof("Creating client certificate: %s", clientCertPath)
if _, err := os.Stat(certDir); err != nil {
if os.IsNotExist(err) {
if err := os.Mkdir(certDir, 0700); err != nil {
return fmt.Errorf("failure creating machine client cert dir: %s", err)
}
} else {
if !current {
log.Info("CA certificate is outdated and needs to be regenerated")
os.Remove(caPrivateKeyPath)
if err := createCACert(authOptions, caOrg, bits); err != nil {
return err
}
}
}
// check if the key path exists; if so, error
if _, err := os.Stat(clientKeyPath); err == nil {
return errors.New("client key already exists")
if _, err := os.Stat(clientCertPath); os.IsNotExist(err) {
if err := createCert(authOptions, org, bits); err != nil {
return err
}
// Used to generate the client certificate.
certOptions := &Options{
Hosts: []string{""},
CertFile: clientCertPath,
KeyFile: clientKeyPath,
CAFile: caCertPath,
CAKeyFile: caPrivateKeyPath,
Org: org,
Bits: bits,
SwarmMaster: false,
} else {
current, err := CheckCertificateDate(clientCertPath)
if err != nil {
return err
}
if err := GenerateCert(certOptions); err != nil {
return fmt.Errorf("failure generating client certificate: %s", err)
if !current {
log.Info("Client certificate is outdated and needs to be regenerated")
os.Remove(clientKeyPath)
if err := createCert(authOptions, org, bits); err != nil {
return err
}
}
}
......
......@@ -267,3 +267,28 @@ func (xcg *X509CertGenerator) ValidateCertificate(addr string, authOptions *auth
return true, nil
}
func CheckCertificateDate(certPath string) (bool, error) {
log.Debugf("Reading certificate data from %s", certPath)
certBytes, err := ioutil.ReadFile(certPath)
if err != nil {
return false, err
}
log.Debug("Decoding PEM data...")
pemBlock, _ := pem.Decode(certBytes)
if pemBlock == nil {
return false, errors.New("Failed to decode PEM data")
}
log.Debug("Parsing certificate...")
cert, err := x509.ParseCertificate(pemBlock.Bytes)
if err != nil {
return false, err
}
if time.Now().After(cert.NotAfter) {
return false, nil
}
return true, nil
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册