mirror of https://github.com/docker/docs.git
Put all core drivers in docker-machine binary
Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
parent
e35b169139
commit
92ce49b367
|
@ -99,21 +99,13 @@ This will generate and open the report file:
|
||||||
|
|
||||||
### Advanced build targets
|
### Advanced build targets
|
||||||
|
|
||||||
Just build the machine binary itself (native):
|
Build for all supported OSes and architectures (binaries will be in the `bin` project subfolder):
|
||||||
|
|
||||||
make machine
|
make build-x
|
||||||
|
|
||||||
Just build the plugins (native):
|
Build for a specific list of OSes and architectures:
|
||||||
|
|
||||||
make plugins
|
TARGET_OS=linux TARGET_ARCH="amd64 arm" make build-x
|
||||||
|
|
||||||
Build for all supported oses and architectures (binaries will be in the `bin` project subfolder):
|
|
||||||
|
|
||||||
make cross
|
|
||||||
|
|
||||||
Build for a specific list of oses and architectures:
|
|
||||||
|
|
||||||
TARGET_OS=linux TARGET_ARCH="amd64 arm" make cross
|
|
||||||
|
|
||||||
You can further control build options through the following environment variables:
|
You can further control build options through the following environment variables:
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/amazonec2"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(amazonec2.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/azure"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(azure.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/digitalocean"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(digitalocean.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/exoscale"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(exoscale.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/generic"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(generic.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/google"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(google.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/hyperv"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(hyperv.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/none"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(none.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/openstack"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(openstack.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/rackspace"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(rackspace.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/softlayer"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(softlayer.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/virtualbox"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(virtualbox.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/vmwarefusion"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(vmwarefusion.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/vmwarevcloudair"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(vmwarevcloudair.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/docker/machine/drivers/vmwarevsphere"
|
|
||||||
"github.com/docker/machine/libmachine/drivers/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
plugin.RegisterDriver(vmwarevsphere.NewDriver("", ""))
|
|
||||||
}
|
|
|
@ -9,6 +9,23 @@ import (
|
||||||
"github.com/codegangsta/cli"
|
"github.com/codegangsta/cli"
|
||||||
"github.com/docker/machine/commands"
|
"github.com/docker/machine/commands"
|
||||||
"github.com/docker/machine/commands/mcndirs"
|
"github.com/docker/machine/commands/mcndirs"
|
||||||
|
"github.com/docker/machine/drivers/amazonec2"
|
||||||
|
"github.com/docker/machine/drivers/azure"
|
||||||
|
"github.com/docker/machine/drivers/digitalocean"
|
||||||
|
"github.com/docker/machine/drivers/exoscale"
|
||||||
|
"github.com/docker/machine/drivers/generic"
|
||||||
|
"github.com/docker/machine/drivers/google"
|
||||||
|
"github.com/docker/machine/drivers/hyperv"
|
||||||
|
"github.com/docker/machine/drivers/none"
|
||||||
|
"github.com/docker/machine/drivers/openstack"
|
||||||
|
"github.com/docker/machine/drivers/rackspace"
|
||||||
|
"github.com/docker/machine/drivers/softlayer"
|
||||||
|
"github.com/docker/machine/drivers/virtualbox"
|
||||||
|
"github.com/docker/machine/drivers/vmwarefusion"
|
||||||
|
"github.com/docker/machine/drivers/vmwarevcloudair"
|
||||||
|
"github.com/docker/machine/drivers/vmwarevsphere"
|
||||||
|
"github.com/docker/machine/libmachine/drivers/plugin"
|
||||||
|
"github.com/docker/machine/libmachine/drivers/plugin/localbinary"
|
||||||
"github.com/docker/machine/libmachine/log"
|
"github.com/docker/machine/libmachine/log"
|
||||||
"github.com/docker/machine/version"
|
"github.com/docker/machine/version"
|
||||||
)
|
)
|
||||||
|
@ -65,6 +82,12 @@ func setDebugOutputLevel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
if os.Getenv(localbinary.PluginEnvKey) == localbinary.PluginEnvVal {
|
||||||
|
driverName := os.Getenv(localbinary.PluginEnvDriverName)
|
||||||
|
runDriver(driverName)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
setDebugOutputLevel()
|
setDebugOutputLevel()
|
||||||
cli.AppHelpTemplate = AppHelpTemplate
|
cli.AppHelpTemplate = AppHelpTemplate
|
||||||
cli.CommandHelpTemplate = CommandHelpTemplate
|
cli.CommandHelpTemplate = CommandHelpTemplate
|
||||||
|
@ -133,6 +156,44 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func runDriver(driverName string) {
|
||||||
|
switch driverName {
|
||||||
|
case "amazonec2":
|
||||||
|
plugin.RegisterDriver(amazonec2.NewDriver("", ""))
|
||||||
|
case "azure":
|
||||||
|
plugin.RegisterDriver(azure.NewDriver("", ""))
|
||||||
|
case "digitalocean":
|
||||||
|
plugin.RegisterDriver(digitalocean.NewDriver("", ""))
|
||||||
|
case "exoscale":
|
||||||
|
plugin.RegisterDriver(exoscale.NewDriver("", ""))
|
||||||
|
case "generic":
|
||||||
|
plugin.RegisterDriver(generic.NewDriver("", ""))
|
||||||
|
case "google":
|
||||||
|
plugin.RegisterDriver(google.NewDriver("", ""))
|
||||||
|
case "hyperv":
|
||||||
|
plugin.RegisterDriver(hyperv.NewDriver("", ""))
|
||||||
|
case "none":
|
||||||
|
plugin.RegisterDriver(none.NewDriver("", ""))
|
||||||
|
case "openstack":
|
||||||
|
plugin.RegisterDriver(openstack.NewDriver("", ""))
|
||||||
|
case "rackspace":
|
||||||
|
plugin.RegisterDriver(rackspace.NewDriver("", ""))
|
||||||
|
case "softlayer":
|
||||||
|
plugin.RegisterDriver(softlayer.NewDriver("", ""))
|
||||||
|
case "virtualbox":
|
||||||
|
plugin.RegisterDriver(virtualbox.NewDriver("", ""))
|
||||||
|
case "vmwarefusion":
|
||||||
|
plugin.RegisterDriver(vmwarefusion.NewDriver("", ""))
|
||||||
|
case "vmwarevcloudair":
|
||||||
|
plugin.RegisterDriver(vmwarevcloudair.NewDriver("", ""))
|
||||||
|
case "vmwarevsphere":
|
||||||
|
plugin.RegisterDriver(vmwarevsphere.NewDriver("", ""))
|
||||||
|
default:
|
||||||
|
fmt.Fprintf(os.Stderr, "Unsupported driver: %s\n", driverName)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func cmdNotFound(c *cli.Context, command string) {
|
func cmdNotFound(c *cli.Context, command string) {
|
||||||
log.Fatalf(
|
log.Fatalf(
|
||||||
"%s: '%s' is not a %s command. See '%s --help'.",
|
"%s: '%s' is not a %s command. See '%s --help'.",
|
||||||
|
|
|
@ -16,13 +16,18 @@ var (
|
||||||
// Timeout where we will bail if we're not able to properly contact the
|
// Timeout where we will bail if we're not able to properly contact the
|
||||||
// plugin server.
|
// plugin server.
|
||||||
defaultTimeout = 10 * time.Second
|
defaultTimeout = 10 * time.Second
|
||||||
|
CoreDrivers = [...]string{"amazonec2", "azure", "digitalocean",
|
||||||
|
"exoscale", "generic", "google", "hyperv", "none", "openstack",
|
||||||
|
"rackspace", "softlayer", "virtualbox", "vmwarefusion",
|
||||||
|
"vmwarevcloudair", "vmwarevsphere"}
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
pluginOutPrefix = "(%s) "
|
pluginOutPrefix = "(%s) "
|
||||||
pluginErrPrefix = "(%s) DBG | "
|
pluginErrPrefix = "(%s) DBG | "
|
||||||
PluginEnvKey = "MACHINE_PLUGIN_TOKEN"
|
PluginEnvKey = "MACHINE_PLUGIN_TOKEN"
|
||||||
PluginEnvVal = "42"
|
PluginEnvVal = "42"
|
||||||
|
PluginEnvDriverName = "MACHINE_PLUGIN_DRIVER_NAME"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PluginStreamer interface {
|
type PluginStreamer interface {
|
||||||
|
@ -84,8 +89,19 @@ func (e ErrPluginBinaryNotFound) Error() string {
|
||||||
return fmt.Sprintf("Driver %q not found. Do you have the plugin binary accessible in your PATH?", e.driverName)
|
return fmt.Sprintf("Driver %q not found. Do you have the plugin binary accessible in your PATH?", e.driverName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func driverPath(driverName string) string {
|
||||||
|
for _, coreDriver := range CoreDrivers {
|
||||||
|
if coreDriver == driverName {
|
||||||
|
return os.Args[0] // "docker-machine"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf("docker-machine-driver-%s", driverName)
|
||||||
|
}
|
||||||
|
|
||||||
func NewPlugin(driverName string) (*Plugin, error) {
|
func NewPlugin(driverName string) (*Plugin, error) {
|
||||||
binaryPath, err := exec.LookPath(fmt.Sprintf("docker-machine-driver-%s", driverName))
|
driverPath := driverPath(driverName)
|
||||||
|
binaryPath, err := exec.LookPath(driverPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrPluginBinaryNotFound{driverName}
|
return nil, ErrPluginBinaryNotFound{driverName}
|
||||||
}
|
}
|
||||||
|
@ -123,6 +139,7 @@ func (lbe *Executor) Start() (*bufio.Scanner, *bufio.Scanner, error) {
|
||||||
errScanner := bufio.NewScanner(lbe.pluginStderr)
|
errScanner := bufio.NewScanner(lbe.pluginStderr)
|
||||||
|
|
||||||
os.Setenv(PluginEnvKey, PluginEnvVal)
|
os.Setenv(PluginEnvKey, PluginEnvVal)
|
||||||
|
os.Setenv(PluginEnvDriverName, lbe.DriverName)
|
||||||
|
|
||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
return nil, nil, fmt.Errorf("Error starting plugin binary: %s", err)
|
return nil, nil, fmt.Errorf("Error starting plugin binary: %s", err)
|
||||||
|
|
29
mk/build.mk
29
mk/build.mk
|
@ -1,31 +1,22 @@
|
||||||
build-clean:
|
|
||||||
rm -Rf $(PREFIX)/bin/*
|
|
||||||
|
|
||||||
extension = $(patsubst windows,.exe,$(filter windows,$(1)))
|
extension = $(patsubst windows,.exe,$(filter windows,$(1)))
|
||||||
|
|
||||||
# Cross builder helper
|
|
||||||
define gocross
|
define gocross
|
||||||
GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 go build \
|
GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 $(GO) build \
|
||||||
-o $(PREFIX)/bin/docker-machine_$(1)-$(2)/docker-$(patsubst cmd/%.go,%,$3)$(call extension,$(GOOS)) \
|
-o $(PREFIX)/bin/docker-machine_$(1)-$(2)/docker-$(patsubst cmd/%.go,%,$3)$(call extension,$(GOOS)) \
|
||||||
-a $(VERBOSE_GO) -tags "static_build netgo $(BUILDTAGS)" -installsuffix netgo \
|
-a $(VERBOSE_GO) -tags "static_build netgo $(BUILDTAGS)" -installsuffix netgo \
|
||||||
-ldflags "$(GO_LDFLAGS) -extldflags -static" $(GO_GCFLAGS) $(3);
|
-ldflags "$(GO_LDFLAGS) -extldflags -static" $(GO_GCFLAGS) $(3);
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# XXX building with -a fails in debug (with -N -l) ????
|
build-clean:
|
||||||
|
rm -Rf $(PREFIX)/bin/*
|
||||||
|
|
||||||
# Independent targets for every bin
|
build-x: ./cmd/machine.go
|
||||||
$(PREFIX)/bin/docker-%: ./cmd/%.go $(shell find . -type f -name '*.go')
|
|
||||||
$(GO) build -o $@$(call extension,$(GOOS)) $(VERBOSE_GO) -tags "$(BUILDTAGS)" -ldflags "$(GO_LDFLAGS)" $(GO_GCFLAGS) $<
|
|
||||||
|
|
||||||
# Cross-compilation targets
|
|
||||||
build-x-%: ./cmd/%.go $(shell find . -type f -name '*.go')
|
|
||||||
$(foreach GOARCH,$(TARGET_ARCH),$(foreach GOOS,$(TARGET_OS),$(call gocross,$(GOOS),$(GOARCH),$<)))
|
$(foreach GOARCH,$(TARGET_ARCH),$(foreach GOOS,$(TARGET_OS),$(call gocross,$(GOOS),$(GOARCH),$<)))
|
||||||
|
|
||||||
# Build just machine
|
$(PREFIX)/bin/docker-machine$(call extension,$(GOOS)): ./cmd/machine.go
|
||||||
build-machine: $(PREFIX)/bin/docker-machine
|
$(GO) build \
|
||||||
|
-o $@ \
|
||||||
|
$(VERBOSE_GO) -tags "$(BUILDTAGS)" \
|
||||||
|
-ldflags "$(GO_LDFLAGS)" $(GO_GCFLAGS) $<
|
||||||
|
|
||||||
# Build all plugins
|
build: $(PREFIX)/bin/docker-machine
|
||||||
build-plugins: $(patsubst ./cmd/%.go,$(PREFIX)/bin/docker-%,$(filter-out %_test.go, $(wildcard ./cmd/machine-driver-*.go)))
|
|
||||||
|
|
||||||
# Overall cross-build
|
|
||||||
build-x: $(patsubst ./cmd/%.go,build-x-%,$(filter-out %_test.go, $(wildcard ./cmd/*.go)))
|
|
||||||
|
|
12
mk/main.mk
12
mk/main.mk
|
@ -44,24 +44,16 @@ include mk/release.mk
|
||||||
include mk/test.mk
|
include mk/test.mk
|
||||||
include mk/validate.mk
|
include mk/validate.mk
|
||||||
|
|
||||||
.all_build: build build-clean build-x build-machine build-plugins
|
.all_build: build build-clean build-x
|
||||||
.all_coverage: coverage-generate coverage-html coverage-send coverage-serve coverage-clean
|
.all_coverage: coverage-generate coverage-html coverage-send coverage-serve coverage-clean
|
||||||
.all_release: release-checksum release
|
.all_release: release-checksum release
|
||||||
.all_test: test-short test-long test-integration
|
.all_test: test-short test-long test-integration
|
||||||
.all_validate: dco fmt vet lint
|
.all_validate: dco fmt vet lint
|
||||||
|
|
||||||
default: build
|
default: build
|
||||||
# Build native machine and all drivers
|
|
||||||
build: build-machine build-plugins
|
|
||||||
# Just build native machine itself
|
|
||||||
machine: build-machine
|
|
||||||
# Just build the native plugins
|
|
||||||
plugins: build-plugins
|
|
||||||
# Build all, cross platform
|
|
||||||
cross: build-x
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
cp $(PREFIX)/bin/docker-machine $(PREFIX)/bin/docker-machine-driver* /usr/local/bin
|
cp $(PREFIX)/bin/docker-machine /usr/local/bin
|
||||||
|
|
||||||
clean: coverage-clean build-clean
|
clean: coverage-clean build-clean
|
||||||
test: dco fmt test-short lint vet
|
test: dco fmt test-short lint vet
|
||||||
|
|
Loading…
Reference in New Issue