// Read configuration from both profile and flags. Flags override profile. func config() (*flag.FlagSet, error) { dir, err := getCfgDir(".boot2docker") if err != nil { return nil, fmt.Errorf("failed to get boot2docker directory: %s", err) } flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) flags.Usage = func() { usageLong(flags) } flags.StringVar(&B2D.VM, "vm", "boot2docker-vm", "virtual machine name.") flags.StringVarP(&B2D.Dir, "dir", "d", dir, "boot2docker config directory.") flags.StringVar(&B2D.ISO, "iso", filepath.Join(dir, "boot2docker.iso"), "path to boot2docker ISO image.") flags.StringVar(&B2D.VMDK, "basevmdk", "", "Path to VMDK to use as base for persistent partition") vbm := "VBoxManage" if p := os.Getenv("VBOX_INSTALL_PATH"); p != "" && runtime.GOOS == "windows" { vbm = filepath.Join(p, "VBoxManage.exe") } flags.StringVar(&B2D.VBM, "vbm", vbm, "path to VirtualBox management utility.") flags.BoolVarP(&B2D.Verbose, "verbose", "v", false, "display verbose command invocations.") flags.StringVar(&B2D.SSH, "ssh", "ssh", "path to SSH client utility.") flags.StringVar(&B2D.SSHGen, "ssh-keygen", "ssh-keygen", "path to ssh-keygen utility.") sshdir, _ := getCfgDir(".ssh") flags.StringVar(&B2D.SSHKey, "sshkey", filepath.Join(sshdir, "id_boot2docker"), "path to SSH key to use.") flags.UintVarP(&B2D.DiskSize, "disksize", "s", 20000, "boot2docker disk image size (in MB).") flags.UintVarP(&B2D.Memory, "memory", "m", 1024, "virtual machine memory size (in MB).") flags.Uint16Var(&B2D.SSHPort, "sshport", 2022, "host SSH port (forward to port 22 in VM).") flags.Uint16Var(&B2D.DockerPort, "dockerport", 4243, "host Docker port (forward to port 4243 in VM).") flags.IPVar(&B2D.HostIP, "hostip", net.ParseIP("192.168.59.3"), "VirtualBox host-only network IP address.") flags.IPMaskVar(&B2D.NetMask, "netmask", flag.ParseIPv4Mask("255.255.255.0"), "VirtualBox host-only network mask.") flags.BoolVar(&B2D.DHCPEnabled, "dhcp", true, "enable VirtualBox host-only network DHCP.") flags.IPVar(&B2D.DHCPIP, "dhcpip", net.ParseIP("192.168.59.99"), "VirtualBox host-only network DHCP server address.") flags.IPVar(&B2D.LowerIP, "lowerip", net.ParseIP("192.168.59.103"), "VirtualBox host-only network DHCP lower bound.") flags.IPVar(&B2D.UpperIP, "upperip", net.ParseIP("192.168.59.254"), "VirtualBox host-only network DHCP upper bound.") // Set the defaults if err := flags.Parse([]string{}); err != nil { return nil, err } // Over-ride from the profile file // TODO: should we really parse for and expand $ENVVARS before we process..? filename := getCfgFilename(dir) if _, err := toml.DecodeFile(filename, &B2D); err != nil { return nil, err } // Command-line overrides profile config. if err := flags.Parse(os.Args[1:]); err != nil { return nil, err } // Name of VM is the second argument. Override the value set in flag. if vm := flags.Arg(1); vm != "" { B2D.VM = vm } vbx.Verbose = B2D.Verbose vbx.VBM = B2D.VBM return flags, nil }
// Read configuration from both profile and flags. Flags override profile. func config() (*flag.FlagSet, error) { dir, err := getCfgDir(".boot2kevoree") if err != nil { return nil, fmt.Errorf("failed to get boot2kevoree directory: %s", err) } flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) flags.Usage = func() { usageLong(flags) } flags.StringVar(&B2D.VM, "vm", "boot2kevoree-vm", "virtual machine name.") // removed for now, requires re-parsing a new config file which is too messy //flags.StringVarP(&B2D.Dir, "dir", "d", dir, "boot2kevoree config directory.") B2D.Dir = dir flags.StringVar(&B2D.ISO, "iso", filepath.Join(dir, "boot2kevoree.iso"), "path to boot2kevoree ISO image.") flags.StringVar(&B2D.VMDK, "basevmdk", "", "Path to VMDK to use as base for persistent partition") vbm := "VBoxManage" if p := os.Getenv("VBOX_INSTALL_PATH"); p != "" && runtime.GOOS == "windows" { vbm = filepath.Join(p, "VBoxManage.exe") } flags.StringVar(&B2D.VBM, "vbm", vbm, "path to VirtualBox management utility.") flags.BoolVarP(&B2D.Verbose, "verbose", "v", false, "display verbose command invocations.") flags.StringVar(&B2D.SSH, "ssh", "ssh", "path to SSH client utility.") flags.StringVar(&B2D.SSHGen, "ssh-keygen", "ssh-keygen", "path to ssh-keygen utility.") sshdir, _ := getCfgDir(".ssh") flags.StringVar(&B2D.SSHKey, "sshkey", filepath.Join(sshdir, "id_boot2kevoree"), "path to SSH key to use.") flags.UintVarP(&B2D.DiskSize, "disksize", "s", 20000, "boot2kevoree disk image size (in MB).") flags.UintVarP(&B2D.Memory, "memory", "m", 1024, "virtual machine memory size (in MB).") flags.Uint16Var(&B2D.SSHPort, "sshport", 2022, "host SSH port (forward to port 22 in VM).") flags.Uint16Var(&B2D.DockerPort, "dockerport", 4243, "host Docker port (forward to port 4243 in VM).") flags.Uint16Var(&B2D.WebGuiPort, "kevguiport", 8080, "host KevoreeGui port (forward to port 8080 in VM).") flags.Uint16Var(&B2D.GroupPort, "kevgroup", 9000, "host KevoreeGroup port (forward to port 9000 in VM).") flags.Uint16Var(&B2D.EditorPort, "keveditorport", 3042, "host Kevoree Editor port (forward to port 3042 in VM).") flags.IPVar(&B2D.HostIP, "hostip", net.ParseIP("192.168.59.3"), "VirtualBox host-only network IP address.") flags.IPMaskVar(&B2D.NetMask, "netmask", flag.ParseIPv4Mask("255.255.255.0"), "VirtualBox host-only network mask.") flags.BoolVar(&B2D.DHCPEnabled, "dhcp", true, "enable VirtualBox host-only network DHCP.") flags.IPVar(&B2D.DHCPIP, "dhcpip", net.ParseIP("192.168.59.99"), "VirtualBox host-only network DHCP server address.") flags.IPVar(&B2D.LowerIP, "lowerip", net.ParseIP("192.168.59.103"), "VirtualBox host-only network DHCP lower bound.") flags.IPVar(&B2D.UpperIP, "upperip", net.ParseIP("192.168.59.254"), "VirtualBox host-only network DHCP upper bound.") // Set the defaults if err := flags.Parse([]string{}); err != nil { return nil, err } // Over-ride from the profile file filename := getCfgFilename(B2D.Dir) if _, err := os.Lstat(filename); err == nil { if _, err := toml.DecodeFile(filename, &B2D); err != nil { return nil, err } } // for cmd==ssh only: // only pass the params up to and including the `ssh` command - after that, // there might be other -flags that are destined for the ssh cmd i := 1 for i < len(os.Args) && os.Args[i-1] != "ssh" { i++ } // Command-line overrides profile config. if err := flags.Parse(os.Args[1:i]); err != nil { return nil, err } vbx.Verbose = B2D.Verbose vbx.VBM = B2D.VBM return flags, nil }
// Read configuration from both profile and flags. Flags override profile. func config() (*flag.FlagSet, error) { dir, err := cfgDir(".boot2docker") if err != nil { return nil, fmt.Errorf("failed to get boot2docker directory: %s", err) } flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) flags.Usage = func() { usageLong(flags) } driver.ConfigFlags(&B2D, flags) // Add the generic flags flags.StringVar(&B2D.VM, "vm", "boot2docker-vm", "virtual machine name.") // removed for now, requires re-parsing a new config file which is too messy //flags.StringVarP(&B2D.Dir, "dir", "d", dir, "boot2docker config directory.") B2D.Dir = dir flags.StringVar(&B2D.ISOURL, "iso-url", "https://api.github.com/repos/boot2docker/boot2docker/releases", "source URL to provision the boot2docker ISO image.") flags.StringVar(&B2D.ISO, "iso", filepath.Join(dir, "boot2docker.iso"), "path to boot2docker ISO image.") // Sven disabled this, as it is broken - if I user with a fresh computer downloads // just the boot2docker-cli, and then runs `boot2docker --init ip`, we create a vm // which cannot run, because it fails to have have the boot2docker.iso and the ssh keys B2D.Init = false //flags.BoolVarP(&B2D.Init, "init", "i", false, "auto initialize vm instance.") flags.BoolVarP(&B2D.Verbose, "verbose", "v", false, "display verbose command invocations.") flags.StringVar(&B2D.Driver, "driver", "virtualbox", "hypervisor driver.") flags.StringVar(&B2D.SSH, "ssh", "ssh", "path to SSH client utility.") flags.StringVar(&B2D.SSHGen, "ssh-keygen", "ssh-keygen", "path to ssh-keygen utility.") sshdir, _ := cfgDir(".ssh") flags.StringVar(&B2D.SSHKey, "sshkey", filepath.Join(sshdir, "id_boot2docker"), "path to SSH key to use.") flags.UintVarP(&B2D.DiskSize, "disksize", "s", 20000, "boot2docker disk image size (in MB).") flags.UintVarP(&B2D.Memory, "memory", "m", 2048, "virtual machine memory size (in MB).") flags.Uint16Var(&B2D.SSHPort, "sshport", 2022, "host SSH port (forward to port 22 in VM).") flags.Uint16Var(&B2D.DockerPort, "dockerport", 0, "host Docker port (forward to port 2376 in VM). (deprecated - use with care)") flags.IPVar(&B2D.HostIP, "hostip", net.ParseIP("192.168.59.3"), "VirtualBox host-only network IP address.") flags.IPMaskVar(&B2D.NetMask, "netmask", flag.ParseIPv4Mask("255.255.255.0"), "VirtualBox host-only network mask.") flags.BoolVar(&B2D.DHCPEnabled, "dhcp", true, "enable VirtualBox host-only network DHCP.") flags.IPVar(&B2D.DHCPIP, "dhcpip", net.ParseIP("192.168.59.99"), "VirtualBox host-only network DHCP server address.") flags.IPVar(&B2D.LowerIP, "lowerip", net.ParseIP("192.168.59.103"), "VirtualBox host-only network DHCP lower bound.") flags.IPVar(&B2D.UpperIP, "upperip", net.ParseIP("192.168.59.254"), "VirtualBox host-only network DHCP upper bound.") flags.IntVar(&B2D.Waittime, "waittime", 300, "Time in milliseconds to wait between port knocking retries during 'start'") flags.IntVar(&B2D.Retries, "retries", 75, "number of port knocking retries during 'start'") if runtime.GOOS != "windows" { //SerialFile ~~ filepath.Join(dir, B2D.vm+".sock") flags.StringVar(&B2D.SerialFile, "serialfile", "", "path to the serial socket/pipe.") flags.BoolVar(&B2D.Serial, "serial", false, "try serial console to get IP address (experimental)") } else { B2D.Serial = false } // Set the defaults if err := flags.Parse([]string{}); err != nil { return nil, err } // Over-ride from the profile file filename := cfgFilename(B2D.Dir) if _, err := os.Lstat(filename); err == nil { if _, err := toml.DecodeFile(filename, &B2D); err != nil { return nil, err } } if B2D.SerialFile == "" { if runtime.GOOS == "windows" { //SerialFile ~~ filepath.Join(dir, B2D.vm+".sock") B2D.SerialFile = `\\.\pipe\` + B2D.VM } else { B2D.SerialFile = filepath.Join(dir, B2D.VM+".sock") } } // for cmd==ssh only: // only pass the params up to and including the `ssh` command - after that, // there might be other -flags that are destined for the ssh cmd sshIdx := 1 for sshIdx < len(os.Args) && os.Args[sshIdx-1] != "ssh" { sshIdx++ } // Command-line overrides profile config. if err := flags.Parse(os.Args[1:sshIdx]); err != nil { return nil, err } leftovers := flags.Args() if B2D.Verbose || (len(leftovers) > 0 && leftovers[0] == "version") { fmt.Printf("Boot2Docker-cli version: %s\nGit commit: %s\n", Version, GitSHA) } return flags, nil }