2015-05-06 23:57:38 +00:00
|
|
|
package remote
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
|
2015-05-16 01:14:36 +00:00
|
|
|
log "github.com/Sirupsen/logrus"
|
|
|
|
"github.com/docker/docker/pkg/plugins"
|
2015-05-06 23:57:38 +00:00
|
|
|
"github.com/docker/libnetwork/driverapi"
|
|
|
|
"github.com/docker/libnetwork/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
var errNoCallback = errors.New("No Callback handler registered with Driver")
|
|
|
|
|
|
|
|
type driver struct {
|
2015-05-16 01:14:36 +00:00
|
|
|
endpoint *plugins.Client
|
|
|
|
networkType string
|
2015-05-06 23:57:38 +00:00
|
|
|
}
|
|
|
|
|
Make driver packages register themselves via DriverCallback
In the present code, each driver package provides a `New()` method
which constructs a driver of its type, which is then registered with
the controller.
However, this is not suitable for the `drivers/remote` package, since
it does not provide a (singleton) driver, but a mechanism for drivers
to be added dynamically. As a result, the implementation is oddly
dual-purpose, and a spurious `"remote"` driver is added to the
controller's list of available drivers.
Instead, it is better to provide the registration callback to each
package and let it register its own driver or drivers. That way, the
singleton driver packages can construct one and register it, and the
remote package can hook the callback up with whatever the dynamic
driver mechanism turns out to be.
NB there are some method signature changes; in particular to
controller.New, which can return an error if the built-in driver
packages fail to initialise.
Signed-off-by: Michael Bridgen <mikeb@squaremobius.net>
2015-05-11 12:46:29 +00:00
|
|
|
// Init does the necessary work to register remote drivers
|
|
|
|
func Init(dc driverapi.DriverCallback) error {
|
2015-05-16 01:14:36 +00:00
|
|
|
plugins.Handle(driverapi.NetworkPluginEndpointType, func(name string, client *plugins.Client) {
|
|
|
|
|
|
|
|
// TODO : Handhake with the Remote Plugin goes here
|
|
|
|
|
|
|
|
newDriver := &driver{networkType: name, endpoint: client}
|
|
|
|
if err := dc.RegisterDriver(name, newDriver); err != nil {
|
|
|
|
log.Errorf("Error registering Driver for %s due to %v", name, err)
|
|
|
|
}
|
|
|
|
})
|
Make driver packages register themselves via DriverCallback
In the present code, each driver package provides a `New()` method
which constructs a driver of its type, which is then registered with
the controller.
However, this is not suitable for the `drivers/remote` package, since
it does not provide a (singleton) driver, but a mechanism for drivers
to be added dynamically. As a result, the implementation is oddly
dual-purpose, and a spurious `"remote"` driver is added to the
controller's list of available drivers.
Instead, it is better to provide the registration callback to each
package and let it register its own driver or drivers. That way, the
singleton driver packages can construct one and register it, and the
remote package can hook the callback up with whatever the dynamic
driver mechanism turns out to be.
NB there are some method signature changes; in particular to
controller.New, which can return an error if the built-in driver
packages fail to initialise.
Signed-off-by: Michael Bridgen <mikeb@squaremobius.net>
2015-05-11 12:46:29 +00:00
|
|
|
return nil
|
2015-05-06 23:57:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) Config(option map[string]interface{}) error {
|
|
|
|
return driverapi.ErrNotImplemented
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) CreateNetwork(id types.UUID, option map[string]interface{}) error {
|
|
|
|
return driverapi.ErrNotImplemented
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) DeleteNetwork(nid types.UUID) error {
|
|
|
|
return driverapi.ErrNotImplemented
|
|
|
|
}
|
|
|
|
|
2015-05-14 06:23:45 +00:00
|
|
|
func (d *driver) CreateEndpoint(nid, eid types.UUID, epInfo driverapi.EndpointInfo, epOptions map[string]interface{}) error {
|
|
|
|
return driverapi.ErrNotImplemented
|
2015-05-06 23:57:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) DeleteEndpoint(nid, eid types.UUID) error {
|
|
|
|
return driverapi.ErrNotImplemented
|
|
|
|
}
|
|
|
|
|
2015-05-14 06:23:45 +00:00
|
|
|
func (d *driver) EndpointOperInfo(nid, eid types.UUID) (map[string]interface{}, error) {
|
2015-05-06 23:57:38 +00:00
|
|
|
return nil, driverapi.ErrNotImplemented
|
|
|
|
}
|
|
|
|
|
|
|
|
// Join method is invoked when a Sandbox is attached to an endpoint.
|
2015-05-14 06:23:45 +00:00
|
|
|
func (d *driver) Join(nid, eid types.UUID, sboxKey string, jinfo driverapi.JoinInfo, options map[string]interface{}) error {
|
|
|
|
return driverapi.ErrNotImplemented
|
2015-05-06 23:57:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Leave method is invoked when a Sandbox detaches from an endpoint.
|
2015-05-14 06:23:45 +00:00
|
|
|
func (d *driver) Leave(nid, eid types.UUID) error {
|
2015-05-06 23:57:38 +00:00
|
|
|
return driverapi.ErrNotImplemented
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *driver) Type() string {
|
2015-05-16 01:14:36 +00:00
|
|
|
return d.networkType
|
2015-05-06 23:57:38 +00:00
|
|
|
}
|