Ver Fonte

Fix up example code

- runs to completion without error
- demonstrates info available when using bridge network driver

Closes #837

Signed-off-by: Gabe Rosenhouse <grosenhouse@pivotal.io>
David Bellotti há 9 anos atrás
pai
commit
921be8b633
2 ficheiros alterados com 46 adições e 23 exclusões
  1. 22 10
      libnetwork/README.md
  2. 24 13
      libnetwork/cmd/readme_test/readme.go

+ 22 - 10
libnetwork/README.md

@@ -15,6 +15,11 @@ There are many networking solutions available to suit a broad range of use-cases
 
 
 ```go
+func main() {
+	if reexec.Init() {
+		return
+	}
+
 	// Select and configure the network driver
 	networkType := "bridge"
 
@@ -24,14 +29,14 @@ There are many networking solutions available to suit a broad range of use-cases
 	genericOption[netlabel.GenericData] = driverOptions
 	controller, err := libnetwork.New(config.OptionDriverConfig(networkType, genericOption))
 	if err != nil {
-		return
+		log.Fatalf("libnetwork.New: %s", err)
 	}
 
 	// Create a network for containers to join.
 	// NewNetwork accepts Variadic optional arguments that libnetwork and Drivers can use.
 	network, err := controller.NewNetwork(networkType, "network1")
 	if err != nil {
-		return
+		log.Fatalf("controller.NewNetwork: %s", err)
 	}
 
 	// For each new container: allocate IP and interfaces. The returned network
@@ -40,7 +45,7 @@ There are many networking solutions available to suit a broad range of use-cases
 	// from the returned endpoint.
 	ep, err := network.CreateEndpoint("Endpoint1")
 	if err != nil {
-		return
+		log.Fatalf("network.CreateEndpoint: %s", err)
 	}
 
 	// Create the sandbox for the container.
@@ -48,22 +53,29 @@ There are many networking solutions available to suit a broad range of use-cases
 	sbx, err := controller.NewSandbox("container1",
 		libnetwork.OptionHostname("test"),
 		libnetwork.OptionDomainname("docker.io"))
+	if err != nil {
+		log.Fatalf("controller.NewSandbox: %s", err)
+	}
 
 	// A sandbox can join the endpoint via the join api.
 	err = ep.Join(sbx)
 	if err != nil {
-		return
+		log.Fatalf("ep.Join: %s", err)
 	}
 
 	// libnetwork client can check the endpoint's operational data via the Info() API
 	epInfo, err := ep.DriverInfo()
-	mapData, ok := epInfo[netlabel.PortMap]
-	if ok {
-		portMapping, ok := mapData.([]types.PortBinding)
-		if ok {
-			fmt.Printf("Current port mapping for endpoint %s: %v", ep.Name(), portMapping)
-		}
+	if err != nil {
+		log.Fatalf("ep.DriverInfo: %s", err)
 	}
+
+	macAddress, ok := epInfo[netlabel.MacAddress]
+	if !ok {
+		log.Fatalf("failed to get mac address from endpoint info")
+	}
+
+	fmt.Printf("Joined endpoint %s (%s) to sandbox %s (%s)\n", ep.Name(), macAddress, sbx.ContainerID(), sbx.Key())
+}
 ```
 
 ## Future

+ 24 - 13
libnetwork/cmd/readme_test/readme.go

@@ -2,15 +2,20 @@ package main
 
 import (
 	"fmt"
+	"log"
 
+	"github.com/docker/docker/pkg/reexec"
 	"github.com/docker/libnetwork"
 	"github.com/docker/libnetwork/config"
 	"github.com/docker/libnetwork/netlabel"
 	"github.com/docker/libnetwork/options"
-	"github.com/docker/libnetwork/types"
 )
 
 func main() {
+	if reexec.Init() {
+		return
+	}
+
 	// Select and configure the network driver
 	networkType := "bridge"
 
@@ -20,14 +25,14 @@ func main() {
 	genericOption[netlabel.GenericData] = driverOptions
 	controller, err := libnetwork.New(config.OptionDriverConfig(networkType, genericOption))
 	if err != nil {
-		return
+		log.Fatalf("libnetwork.New: %s", err)
 	}
 
 	// Create a network for containers to join.
 	// NewNetwork accepts Variadic optional arguments that libnetwork and Drivers can use.
 	network, err := controller.NewNetwork(networkType, "network1")
 	if err != nil {
-		return
+		log.Fatalf("controller.NewNetwork: %s", err)
 	}
 
 	// For each new container: allocate IP and interfaces. The returned network
@@ -36,28 +41,34 @@ func main() {
 	// from the returned endpoint.
 	ep, err := network.CreateEndpoint("Endpoint1")
 	if err != nil {
-		return
+		log.Fatalf("network.CreateEndpoint: %s", err)
 	}
 
-	// Create the sandbox for the containr.
+	// Create the sandbox for the container.
+	// NewSandbox accepts Variadic optional arguments which libnetwork can use.
 	sbx, err := controller.NewSandbox("container1",
 		libnetwork.OptionHostname("test"),
 		libnetwork.OptionDomainname("docker.io"))
+	if err != nil {
+		log.Fatalf("controller.NewSandbox: %s", err)
+	}
 
 	// A sandbox can join the endpoint via the join api.
-	// Join accepts Variadic arguments which libnetwork and Drivers can use.
 	err = ep.Join(sbx)
 	if err != nil {
-		return
+		log.Fatalf("ep.Join: %s", err)
 	}
 
 	// libnetwork client can check the endpoint's operational data via the Info() API
 	epInfo, err := ep.DriverInfo()
-	mapData, ok := epInfo[netlabel.PortMap]
-	if ok {
-		portMapping, ok := mapData.([]types.PortBinding)
-		if ok {
-			fmt.Printf("Current port mapping for endpoint %s: %v", ep.Name(), portMapping)
-		}
+	if err != nil {
+		log.Fatalf("ep.DriverInfo: %s", err)
 	}
+
+	macAddress, ok := epInfo[netlabel.MacAddress]
+	if !ok {
+		log.Fatalf("failed to get mac address from endpoint info")
+	}
+
+	fmt.Printf("Joined endpoint %s (%s) to sandbox %s (%s)\n", ep.Name(), macAddress, sbx.ContainerID(), sbx.Key())
 }