mirror of https://github.com/docker/docs.git
Refactor Hyper-V for new CLI.
Signed-off-by: Jeff Mendoza <jeffmendoza@live.com>
This commit is contained in:
parent
1d10b7bfb5
commit
3265a38d0a
|
|
@ -13,7 +13,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
log "github.com/Sirupsen/logrus"
|
log "github.com/Sirupsen/logrus"
|
||||||
flag "github.com/docker/docker/pkg/mflag"
|
"github.com/codegangsta/cli"
|
||||||
"github.com/docker/docker/utils"
|
"github.com/docker/docker/utils"
|
||||||
"github.com/docker/machine/drivers"
|
"github.com/docker/machine/drivers"
|
||||||
"github.com/docker/machine/ssh"
|
"github.com/docker/machine/ssh"
|
||||||
|
|
@ -31,31 +31,49 @@ type Driver struct {
|
||||||
memSize int
|
memSize int
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateFlags struct {
|
|
||||||
boot2DockerURL *string
|
|
||||||
boot2DockerLoc *string
|
|
||||||
vSwitch *string
|
|
||||||
diskSize *int
|
|
||||||
memSize *int
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
drivers.Register("hyper-v", &drivers.RegisteredDriver{
|
drivers.Register("hyper-v", &drivers.RegisteredDriver{
|
||||||
New: NewDriver,
|
New: NewDriver,
|
||||||
RegisterCreateFlags: RegisterCreateFlags,
|
GetCreateFlags: GetCreateFlags,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterCreateFlags registers the flags this driver adds to
|
// GetCreateFlags registers the flags this driver adds to
|
||||||
// "docker hosts create"
|
// "docker hosts create"
|
||||||
func RegisterCreateFlags(cmd *flag.FlagSet) interface{} {
|
func GetCreateFlags() []cli.Flag {
|
||||||
createFlags := new(CreateFlags)
|
return []cli.Flag{
|
||||||
createFlags.boot2DockerURL = cmd.String([]string{"-hyper-v-boot2docker-url"}, "", "The URL of the boot2docker image. Defaults to the latest available version.")
|
cli.StringFlag{
|
||||||
createFlags.boot2DockerLoc = cmd.String([]string{"-hyper-v-boot2docker-location"}, "", "Local boot2docker iso. Overrides URL.")
|
Name: "hyper-v-boot2docker-url",
|
||||||
createFlags.vSwitch = cmd.String([]string{"-hyper-v-virtual-switch"}, "", "Name of virtual switch. Defaults to first found.")
|
Usage: "The URL of the boot2docker image. Defaults to the latest available version.",
|
||||||
createFlags.diskSize = cmd.Int([]string{"-hyper-v-disk-size"}, 20000, "Size of disk for host in MB.")
|
},
|
||||||
createFlags.memSize = cmd.Int([]string{"-hyper-v-memory"}, 1024, "Size of memory for host in MB.")
|
cli.StringFlag{
|
||||||
return createFlags
|
Name: "hyper-v-boot2docker-location",
|
||||||
|
Usage: "Local boot2docker iso. Overrides URL.",
|
||||||
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "hyper-v-virtual-switch",
|
||||||
|
Usage: "Name of virtual switch. Defaults to first found.",
|
||||||
|
},
|
||||||
|
cli.IntFlag{
|
||||||
|
Name: "hyper-v-disk-size",
|
||||||
|
Usage: "Size of disk for host in MB.",
|
||||||
|
Value: 20000,
|
||||||
|
},
|
||||||
|
cli.IntFlag{
|
||||||
|
Name: "hyper-v-memory",
|
||||||
|
Usage: "Size of memory for host in MB.",
|
||||||
|
Value: 1024,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
|
||||||
|
d.boot2DockerURL = flags.String("hyper-v-boot2docker-url")
|
||||||
|
d.boot2DockerLoc = flags.String("hyper-v-boot2docker-location")
|
||||||
|
d.vSwitch = flags.String("hyper-v-virtual-switch")
|
||||||
|
d.diskSize = flags.Int("hyper-v-disk-size")
|
||||||
|
d.memSize = flags.Int("hyper-v-memory")
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDriver(storePath string) (drivers.Driver, error) {
|
func NewDriver(storePath string) (drivers.Driver, error) {
|
||||||
|
|
@ -211,12 +229,20 @@ func (d *Driver) Create() error {
|
||||||
|
|
||||||
log.Infof("Adding key to authorized-keys.d...")
|
log.Infof("Adding key to authorized-keys.d...")
|
||||||
|
|
||||||
|
cmd, err := d.GetSSHCommand("sudo chown -R docker /var/lib/docker/auth.d")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if err := drivers.AddPublicKeyToAuthorizedHosts(d, "/var/lib/docker/auth.d"); err != nil {
|
if err := drivers.AddPublicKeyToAuthorizedHosts(d, "/var/lib/docker/auth.d"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("Restart docker...")
|
log.Infof("Restart docker...")
|
||||||
cmd, err := d.GetSSHCommand("sudo /etc/init.d/docker restart")
|
cmd, err = d.GetSSHCommand("sudo /etc/init.d/docker restart")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -245,23 +271,10 @@ func (d *Driver) chooseVirtualSwitch() (string, error) {
|
||||||
return "", fmt.Errorf("no vswitch found")
|
return "", fmt.Errorf("no vswitch found")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Driver) SetConfigFromFlags(flagsInterface interface{}) error {
|
|
||||||
flags := flagsInterface.(*CreateFlags)
|
|
||||||
d.boot2DockerURL = *flags.boot2DockerURL
|
|
||||||
d.boot2DockerLoc = *flags.boot2DockerLoc
|
|
||||||
d.vSwitch = *flags.vSwitch
|
|
||||||
d.diskSize = *flags.diskSize
|
|
||||||
d.memSize = *flags.memSize
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Driver) wait() error {
|
func (d *Driver) wait() error {
|
||||||
log.Infof("Waiting for host to start...")
|
log.Infof("Waiting for host to start...")
|
||||||
for {
|
for {
|
||||||
ip, err := d.GetIP()
|
ip, _ := d.GetIP()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if ip != "" {
|
if ip != "" {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
@ -384,7 +397,7 @@ func (d *Driver) GetIP() (string, error) {
|
||||||
func (d *Driver) GetSSHCommand(args ...string) (*exec.Cmd, error) {
|
func (d *Driver) GetSSHCommand(args ...string) (*exec.Cmd, error) {
|
||||||
ip, err := d.GetIP()
|
ip, err := d.GetIP()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return nil, err
|
||||||
}
|
}
|
||||||
return ssh.GetSSHCommand(ip, 22, "docker", d.sshKeyPath(), args...), nil
|
return ssh.GetSSHCommand(ip, 22, "docker", d.sshKeyPath(), args...), nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue