Skip to content

Commit

Permalink
Refactor and Restore changes
Browse files Browse the repository at this point in the history
Signed-off-by: Abhinandan Prativadi <[email protected]>
  • Loading branch information
abhi committed Oct 12, 2017
1 parent 5fa7fd9 commit 9afaa7f
Show file tree
Hide file tree
Showing 45 changed files with 722 additions and 3,728 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ build-local:
@mkdir -p "bin"
go build -tags experimental -o "bin/dnet" ./cmd/dnet
go build -o "bin/docker-proxy" ./cmd/proxy
go build -o "bin/cniserver" ./cmd/cni_
go build -o "bin/cnictl" ./cni/
go build -o "bin/cniserver" ./cmd/cni_server
go build -o "bin/cnictl" ./cmd/dnet_cni/
clean:
@echo "🐳 $@"
@if [ -d bin ]; then \
Expand Down
2 changes: 1 addition & 1 deletion api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,7 @@ func procAttachBackend(c libnetwork.NetworkController, vars map[string]string, b
if err != nil {
return nil, convertNetworkError(err)
}

if bk.SandboxKey != "" {
err = sb.SetKey(bk.SandboxKey)
if err != nil {
Expand All @@ -738,7 +739,6 @@ func procDetachBackend(c libnetwork.NetworkController, vars map[string]string, b
if err != nil {
return nil, convertNetworkError(err)
}

return nil, &successResponse
}

Expand Down
28 changes: 22 additions & 6 deletions api/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,6 @@ type serviceDelete struct {
Force bool `json:"force"`
}

// extraHost represents the extra host object
type extraHost struct {
Name string `json:"name"`
Address string `json:"address"`
}

// endpointInfo contants the endpoint info for https response message on endpoint creation
type endpointInfo struct {
ID string `json:"id"`
Expand All @@ -112,6 +106,28 @@ type endpointInfo struct {
GatewayIPv6 net.IP `json:"gateway_ipv6"`
}

// extraHost represents the extra host object
type extraHost struct {
Name string `json:"name"`
Address string `json:"address"`
}

// SandboxMetadata holds the metadata related to sandox (config)
type SandboxMetadata struct {
ContainerID string `json:"container_id"`
HostName string `json:"host_name"`
DomainName string `json:"domain_name"`
HostsPath string `json:"hosts_path"`
ResolvConfPath string `json:"resolv_conf_path"`
DNS []string `json:"dns"`
ExtraHosts []extraHost `json:"extra_hosts"`
UseExternalKey bool `json:"use_external_key"`
UseDefaultSandbox bool `json:"use_default_sandbox"`
ExposedPorts []types.TransportPort `json:"exposed_ports"`
PortMapping []types.PortBinding `json:"port_mapping"`
ExternalKey string `json:"external_key"`
}

func getEndpointInfo(ep libnetwork.Endpoint) endpointInfo {
epInfo := endpointInfo{ID: ep.ID()}

Expand Down
4 changes: 2 additions & 2 deletions client/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ func (cli *NetworkCli) CmdNetworkCreate(chain string, args ...string) error {
}
}

var icList []ipamConf
var icList []IPAMConf
if *flSubnet != "" {
ic := ipamConf{
ic := IPAMConf{
PreferredPool: *flSubnet,
}

Expand Down
8 changes: 5 additions & 3 deletions client/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ type SandboxResource struct {
/***********
Body types
************/
type ipamConf struct {

// IPAMConf is the ipam configution used during network create
type IPAMConf struct {
PreferredPool string
SubPool string
Gateway string
Expand All @@ -47,7 +49,7 @@ type NetworkCreate struct {
Name string `json:"name"`
ID string `json:"id"`
NetworkType string `json:"network_type"`
IPv4Conf []ipamConf `json:"ipv4_configuration"`
IPv4Conf []IPAMConf `json:"ipv4_configuration"`
DriverOpts map[string]string `json:"driver_opts"`
NetworkOpts map[string]string `json:"network_opts"`
}
Expand Down Expand Up @@ -102,7 +104,7 @@ type sandboxParentUpdate struct {
Address string `json:"address"`
}

// endpointInfo contants the endpoint info for http response message on endpoint creation
// EndpointInfo contants the endpoint info for http response message on endpoint creation
type EndpointInfo struct {
ID string `json:"id"`
Address net.IPNet `json:"address"`
Expand Down
2 changes: 1 addition & 1 deletion cmd/cni_/cni_.go → cmd/cni_server/cni_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func cniApp(stdout, stderr io.Writer) error {
app.Usage = "A cni side car for libnetwork daemon."
app.Flags = cniserverFlags
app.Before = processFlags
//app.Commands = cniCommands
//app.Commands = cniCommands // TODO: Add cni commands to improve debuggability

app.Run(os.Args)
return nil
Expand Down
8 changes: 5 additions & 3 deletions cmd/cni_/flags_.go → cmd/cni_server/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ import (
"os"

"github.com/codegangsta/cli"
cniserver "github.com/docker/libnetwork/pkg/server/cniserver"
"github.com/sirupsen/logrus"

cniserver "github.com/docker/libnetwork/provider/cni/server"
)

var (
Expand Down Expand Up @@ -42,13 +43,14 @@ func processFlags(c *cli.Context) error {

cniService, err := cniserver.NewCniService(c.String("sock"), c.String("dnet-address"), c.String("dnet-port"))
if err != nil {
return fmt.Errorf("faile to create cni service: %v", err)
return fmt.Errorf("failed to create cni service: %v", err)
}
serverCloseChan := make(chan struct{})
if err := cniService.InitCniService(serverCloseChan); err != nil {
fmt.Printf("Failed to initialize CNI server: \n", err)
logrus.Errorf("Failed to initialize CNI server: %v", err)
os.Exit(1)
}
// Wait on till the server closes
<-serverCloseChan
return nil
}
8 changes: 4 additions & 4 deletions cmd/dnet/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func runContainerCreate(c *cli.Context) {
}

sc := client.SandboxCreate{ContainerID: c.Args()[0]}
obj, _, err := netutils.ReadBody(epConn.conn.HttpCall("POST", "/sandboxes", sc, nil))
obj, _, err := netutils.ReadBody(epConn.conn.HTTPCall("POST", "/sandboxes", sc, nil))
if err != nil {
fmt.Printf("POST failed during create container: %v\n", err)
os.Exit(1)
Expand All @@ -72,7 +72,7 @@ func runContainerRm(c *cli.Context) {
os.Exit(1)
}

obj, _, err := netutils.ReadBody(epConn.conn.HttpCall("GET", "/sandboxes?partial-container-id="+c.Args()[0], nil, nil))
obj, _, err := netutils.ReadBody(epConn.conn.HTTPCall("GET", "/sandboxes?partial-container-id="+c.Args()[0], nil, nil))
if err != nil {
fmt.Printf("GET failed during container id lookup: %v\n", err)
os.Exit(1)
Expand All @@ -89,7 +89,7 @@ func runContainerRm(c *cli.Context) {
os.Exit(1)
}

_, _, err = netutils.ReadBody(epConn.conn.HttpCall("DELETE", "/sandboxes/"+sbList[0].ID, nil, nil))
_, _, err = netutils.ReadBody(epConn.conn.HTTPCall("DELETE", "/sandboxes/"+sbList[0].ID, nil, nil))
if err != nil {
fmt.Printf("DELETE of sandbox id %s failed: %v", sbList[0].ID, err)
os.Exit(1)
Expand All @@ -98,7 +98,7 @@ func runContainerRm(c *cli.Context) {

func runDockerCommand(c *cli.Context, cmd string) {
_, stdout, stderr := term.StdStreams()
oldcli := client.NewNetworkCli(stdout, stderr, epConn.conn.HttpCall)
oldcli := client.NewNetworkCli(stdout, stderr, epConn.conn.HTTPCall)
var args []string
args = append(args, cmd)
if c.Bool("h") {
Expand Down
80 changes: 64 additions & 16 deletions cmd/dnet/dnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,15 @@ import (

"github.com/BurntSushi/toml"
"github.com/codegangsta/cli"
"github.com/docker/docker/api/types/network"
"github.com/docker/docker/opts"
"github.com/docker/docker/pkg/discovery"
"github.com/docker/docker/pkg/reexec"

"github.com/docker/docker/api/types/network"
"github.com/docker/docker/pkg/term"
"github.com/gorilla/mux"
"github.com/sirupsen/logrus"
"golang.org/x/net/context"

"github.com/docker/libnetwork"
"github.com/docker/libnetwork/api"
"github.com/docker/libnetwork/cluster"
Expand All @@ -31,10 +34,9 @@ import (
"github.com/docker/libnetwork/netlabel"
"github.com/docker/libnetwork/netutils"
"github.com/docker/libnetwork/options"
"github.com/docker/libnetwork/provider"
"github.com/docker/libnetwork/provider/cni/cniapi"
"github.com/docker/libnetwork/types"
"github.com/gorilla/mux"
"github.com/sirupsen/logrus"
"golang.org/x/net/context"
)

const (
Expand All @@ -43,11 +45,12 @@ const (
// DefaultHTTPPort is the default http port used by dnet
DefaultHTTPPort = 2389
// DefaultUnixSocket exported
DefaultUnixSocket = "/var/run/dnet.sock"
cfgFileEnv = "LIBNETWORK_CFG"
defaultCfgFile = "/etc/default/libnetwork.toml"
defaultHeartbeat = time.Duration(10) * time.Second
ttlFactor = 2
DefaultUnixSocket = "/var/run/dnet.sock"
cfgFileEnv = "LIBNETWORK_CFG"
defaultCfgFile = "/etc/default/libnetwork.toml"
defaultHeartbeat = time.Duration(10) * time.Second
ttlFactor = 2
defaultProviderTimeout = 120 // default time to fetch state from provider
)

var epConn *dnetConnection
Expand Down Expand Up @@ -241,7 +244,7 @@ func createDefaultNetwork(c libnetwork.NetworkController) {
}

type dnetConnection struct {
conn *netutils.HttpConnection
conn *netutils.HTTPConnection
Orchestration *NetworkOrchestration
configEvent chan cluster.ConfigEventType
}
Expand All @@ -254,7 +257,7 @@ type NetworkOrchestration struct {
Peer string
}

func (d *dnetConnection) dnetDaemon(cfgFile string) error {
func (d *dnetConnection) dnetDaemon(cfgFile string, provider string) error {
if err := startTestDriver(); err != nil {
return fmt.Errorf("failed to start test driver: %v", err)
}
Expand All @@ -264,10 +267,14 @@ func (d *dnetConnection) dnetDaemon(cfgFile string) error {
if err == nil {
cOptions, err = processConfig(cfg)
if err != nil {
fmt.Errorf("failed to process config: %v", err)
return fmt.Errorf("failed to process config: %v", err)
}
} else {
logrus.Errorf("failed to parse config: %v", err)
return fmt.Errorf("failed to parse config: %v", err)
}

if provider != "" {
cfg.Daemon.Provider = attachDnetProvider(provider)
}

bridgeConfig := options.Generic{
Expand All @@ -279,9 +286,19 @@ func (d *dnetConnection) dnetDaemon(cfgFile string) error {

cOptions = append(cOptions, config.OptionDriverConfig("bridge", bridgeOption))

// If this is a restore ,then fetch active sandboxes from api server.
if cfg.Daemon.Provider != nil {
sbOptions, err := fetchActiveSandboxes(cfg.Daemon.Provider)
if err != nil {
return err
}
if sbOptions != nil {
cOptions = append(cOptions, sbOptions)
}
}
controller, err := libnetwork.New(cOptions...)
if err != nil {
fmt.Println("Error starting dnetDaemon :", err)
fmt.Println("Error starting DnetDaemon :", err)
return err
}
controller.SetClusterProvider(d)
Expand Down Expand Up @@ -440,7 +457,7 @@ func newDnetConnection(val string) (*dnetConnection, error) {
}

return &dnetConnection{
&netutils.HttpConnection{
&netutils.HTTPConnection{
Proto: protoAddrParts[0],
Addr: protoAddrParts[1],
},
Expand All @@ -460,3 +477,34 @@ func ipamOption(bridgeName string) libnetwork.NetworkOption {
}
return nil
}

func attachDnetProvider(provider string) provider.DnetProvider {
switch provider {
case "cni":
return cniapi.NewDnetCniClient()
default:
return nil
}
}

func fetchActiveSandboxes(provider provider.DnetProvider) (config.Option, error) {
x := time.Duration(2 * time.Second)
var err error
var sbOptions map[string]interface{}
for x < defaultProviderTimeout {
sbOptions, err = provider.FetchActiveSandboxes()
if err == nil {
goto success
}
logrus.Errorf("Retry:failed to fetch active sandbox: %b", err)
time.Sleep(x * time.Second)
x = x * 2
}
return nil, fmt.Errorf("failed to fetch active sandbox: %b", err)
success:
logrus.Infof("Active sandboxes are: {%+v}", sbOptions)
if len(sbOptions) != 0 {
return config.OptionActiveSandboxes(sbOptions), nil
}
return nil, nil
}
8 changes: 7 additions & 1 deletion cmd/dnet/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ var (
Value: "/etc/default/libnetwork.toml",
Usage: "Configuration file",
},
cli.StringFlag{
Name: "p, -provider-interface",
Usage: "Provider for Dnet. Accepted values cni",
},
}
)

Expand Down Expand Up @@ -75,7 +79,9 @@ func processFlags(c *cli.Context) error {
}

if c.Bool("d") {
err = epConn.dnetDaemon(c.String("c"))
cfgFile := c.String("c")
provider := c.String("p")
err = epConn.dnetDaemon(cfgFile, provider)
if err != nil {
logrus.Errorf("dnet Daemon exited with an error : %v", err)
os.Exit(1)
Expand Down
3 changes: 2 additions & 1 deletion cni/main.go → cmd/dnet_cni/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ import (
"github.com/containernetworking/cni/pkg/skel"
"github.com/containernetworking/cni/pkg/types"
"github.com/containernetworking/cni/pkg/version"
"github.com/docker/libnetwork/pkg/cniapi"
log "github.com/sirupsen/logrus"

"github.com/docker/libnetwork/provider/cni/cniapi"
)

func cmdAdd(args *skel.CmdArgs) error {
Expand Down
5 changes: 4 additions & 1 deletion config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import (
"github.com/docker/docker/pkg/plugingetter"
"github.com/docker/go-connections/tlsconfig"
"github.com/docker/libkv/store"
"github.com/sirupsen/logrus"

"github.com/docker/libnetwork/cluster"
"github.com/docker/libnetwork/datastore"
"github.com/docker/libnetwork/netlabel"
"github.com/docker/libnetwork/osl"
"github.com/sirupsen/logrus"
"github.com/docker/libnetwork/provider"
)

const (
Expand All @@ -34,6 +36,7 @@ type Config struct {
type DaemonCfg struct {
Debug bool
Experimental bool
Provider provider.DnetProvider
DataDir string
DefaultNetwork string
DefaultGwNetwork string
Expand Down
Loading

0 comments on commit 9afaa7f

Please sign in to comment.