Remove redundant code in endpoint.go

- JoinOption, LeaveOption, EndpointOption are all the same thing

Signed-off-by: Alessandro Boch <aboch@docker.com>
This commit is contained in:
Alessandro Boch 2015-05-01 17:11:13 -07:00
parent da1cddc320
commit da97978469

View file

@ -25,11 +25,11 @@ type Endpoint interface {
// Join creates a new sandbox for the given container ID and populates the
// network resources allocated for the endpoint and joins the sandbox to
// the endpoint. It returns the sandbox key to the caller
Join(containerID string, options ...JoinOption) (*ContainerData, error)
Join(containerID string, options ...EndpointOption) (*ContainerData, error)
// Leave removes the sandbox associated with container ID and detaches
// the network resources populated in the sandbox
Leave(containerID string, options ...LeaveOption) error
Leave(containerID string, options ...EndpointOption) error
// SandboxInfo returns the sandbox information for this endpoint.
SandboxInfo() *sandbox.Info
@ -38,22 +38,17 @@ type Endpoint interface {
Delete() error
}
// EndpointOption is a option setter function type used to pass varios options to Network
// and Endpoint interfaces methods. The various setter functions of type EndpointOption are
// provided by libnetwork, they look like <Create|Join|Leave>Option[...](...)
type EndpointOption func(ep *endpoint)
// ContainerData is a set of data returned when a container joins an endpoint.
type ContainerData struct {
SandboxKey string
HostsPath string
}
// JoinOption is a option setter function type used to pass varios options to
// endpoint Join method. The various setter functions of type JoinOption are
// provided by libnetwork, they look like JoinOption[...](...)
type JoinOption func(ep *endpoint)
// LeaveOption is a option setter function type used to pass varios options to
// endpoint Leave method. The various setter functions of type LeaveOption are
// provided by libnetwork, they look like LeaveOptionXXXX(...)
type LeaveOption func(ep *endpoint)
type containerConfig struct {
hostName string
domainName string
@ -99,19 +94,6 @@ func (ep *endpoint) SandboxInfo() *sandbox.Info {
return ep.sandboxInfo.GetCopy()
}
// EndpointOption is a option setter function type used to pass various options to
// CreateEndpoint method. The various setter functions of type EndpointOption are
// provided by libnetwork, they look like EndpointOptionXXXX(...)
type EndpointOption func(ep *endpoint)
// EndpointOptionGeneric function returns an option setter for a Generic option defined
// in a Dictionary of Key-Value pair
func EndpointOptionGeneric(generic map[string]interface{}) EndpointOption {
return func(ep *endpoint) {
ep.generic = generic
}
}
func (ep *endpoint) processOptions(options ...EndpointOption) {
for _, opt := range options {
if opt != nil {
@ -146,7 +128,7 @@ func createHostsFile(path string) error {
return err
}
func (ep *endpoint) Join(containerID string, options ...JoinOption) (*ContainerData, error) {
func (ep *endpoint) Join(containerID string, options ...EndpointOption) (*ContainerData, error) {
var err error
if containerID == "" {
@ -164,7 +146,7 @@ func (ep *endpoint) Join(containerID string, options ...JoinOption) (*ContainerD
}
}()
ep.processJoinOptions(options...)
ep.processOptions(options...)
ep.container.data.HostsPath = prefix + "/" + containerID + "/hosts"
err = createHostsFile(ep.container.data.HostsPath)
@ -221,13 +203,13 @@ func (ep *endpoint) Join(containerID string, options ...JoinOption) (*ContainerD
return &cData, nil
}
func (ep *endpoint) Leave(containerID string, options ...LeaveOption) error {
func (ep *endpoint) Leave(containerID string, options ...EndpointOption) error {
if ep.container == nil || ep.container.id == "" ||
containerID == "" || ep.container.id != containerID {
return InvalidContainerIDError(containerID)
}
ep.processLeaveOptions(options...)
ep.processOptions(options...)
n := ep.network
err := n.driver.Leave(n.id, ep.id, ep.context)
@ -284,9 +266,19 @@ func (ep *endpoint) buildHostsFiles() error {
ep.container.config.domainName, extraContent)
}
// EndpointOptionGeneric function returns an option setter for a Generic option defined
// in a Dictionary of Key-Value pair
func EndpointOptionGeneric(generic map[string]interface{}) EndpointOption {
return func(ep *endpoint) {
for k, v := range generic {
ep.generic[k] = v
}
}
}
// JoinOptionHostname function returns an option setter for hostname option to
// be passed to endpoint Join method.
func JoinOptionHostname(name string) JoinOption {
func JoinOptionHostname(name string) EndpointOption {
return func(ep *endpoint) {
ep.container.config.hostName = name
}
@ -294,14 +286,14 @@ func JoinOptionHostname(name string) JoinOption {
// JoinOptionDomainname function returns an option setter for domainname option to
// be passed to endpoint Join method.
func JoinOptionDomainname(name string) JoinOption {
func JoinOptionDomainname(name string) EndpointOption {
return func(ep *endpoint) {
ep.container.config.domainName = name
}
}
// CreateOptionPortMapping function returns an option setter for the container exposed
// ports option to be passed to endpoint Join method.
// ports option to be passed to network.CreateEndpoint() method.
func CreateOptionPortMapping(portBindings []netutils.PortBinding) EndpointOption {
return func(ep *endpoint) {
// Store endpoint label
@ -317,33 +309,17 @@ func CreateOptionPortMapping(portBindings []netutils.PortBinding) EndpointOption
// JoinOptionGeneric function returns an option setter for Generic configuration
// that is not managed by libNetwork but can be used by the Drivers during the call to
// endpoint join method. Container Labels are a good example.
func JoinOptionGeneric(generic map[string]interface{}) JoinOption {
func JoinOptionGeneric(generic map[string]interface{}) EndpointOption {
return func(ep *endpoint) {
ep.container.config.generic = generic
}
}
func (ep *endpoint) processJoinOptions(options ...JoinOption) {
for _, opt := range options {
if opt != nil {
opt(ep)
}
}
}
// LeaveOptionGeneric function returns an option setter for Generic configuration
// that is not managed by libNetwork but can be used by the Drivers during the call to
// endpoint leave method. Container Labels are a good example.
func LeaveOptionGeneric(context map[string]interface{}) JoinOption {
func LeaveOptionGeneric(context map[string]interface{}) EndpointOption {
return func(ep *endpoint) {
ep.context = context
}
}
func (ep *endpoint) processLeaveOptions(options ...LeaveOption) {
for _, opt := range options {
if opt != nil {
opt(ep)
}
}
}