mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Allow anonymous endpoint
- Allow to create an endpoint as anonymous. An anonymous endpoint does not get added to the network service records. Signed-off-by: Alessandro Boch <aboch@docker.com>
This commit is contained in:
parent
a10c1e3460
commit
e41a9cf59d
3 changed files with 28 additions and 2 deletions
|
@ -57,6 +57,7 @@ type endpoint struct {
|
|||
joinInfo *endpointJoinInfo
|
||||
sandboxID string
|
||||
exposedPorts []types.TransportPort
|
||||
anonymous bool
|
||||
generic map[string]interface{}
|
||||
joinLeaveDone chan struct{}
|
||||
dbIndex uint64
|
||||
|
@ -77,6 +78,7 @@ func (ep *endpoint) MarshalJSON() ([]byte, error) {
|
|||
epMap["generic"] = ep.generic
|
||||
}
|
||||
epMap["sandbox"] = ep.sandboxID
|
||||
epMap["anonymous"] = ep.anonymous
|
||||
return json.Marshal(epMap)
|
||||
}
|
||||
|
||||
|
@ -105,6 +107,10 @@ func (ep *endpoint) UnmarshalJSON(b []byte) (err error) {
|
|||
if v, ok := epMap["generic"]; ok {
|
||||
ep.generic = v.(map[string]interface{})
|
||||
}
|
||||
|
||||
if v, ok := epMap["anonymous"]; ok {
|
||||
ep.anonymous = v.(bool)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -122,6 +128,7 @@ func (ep *endpoint) CopyTo(o datastore.KVObject) error {
|
|||
dstEp.sandboxID = ep.sandboxID
|
||||
dstEp.dbIndex = ep.dbIndex
|
||||
dstEp.dbExists = ep.dbExists
|
||||
dstEp.anonymous = ep.anonymous
|
||||
|
||||
if ep.iface != nil {
|
||||
dstEp.iface = &endpointInterface{}
|
||||
|
@ -161,6 +168,12 @@ func (ep *endpoint) Network() string {
|
|||
return ep.network.name
|
||||
}
|
||||
|
||||
func (ep *endpoint) isAnonymous() bool {
|
||||
ep.Lock()
|
||||
defer ep.Unlock()
|
||||
return ep.anonymous
|
||||
}
|
||||
|
||||
// endpoint Key structure : endpoint/network-id/endpoint-id
|
||||
func (ep *endpoint) Key() []string {
|
||||
if ep.network == nil {
|
||||
|
@ -603,6 +616,14 @@ func CreateOptionPortMapping(portBindings []types.PortBinding) EndpointOption {
|
|||
}
|
||||
}
|
||||
|
||||
// CreateOptionAnonymous function returns an option setter for setting
|
||||
// this endpoint as anonymous
|
||||
func CreateOptionAnonymous() EndpointOption {
|
||||
return func(ep *endpoint) {
|
||||
ep.anonymous = true
|
||||
}
|
||||
}
|
||||
|
||||
// JoinOptionPriority function returns an option setter for priority option to
|
||||
// be passed to the endpoint.Join() method.
|
||||
func JoinOptionPriority(ep Endpoint, prio int) EndpointOption {
|
||||
|
|
|
@ -189,6 +189,7 @@ func TestEndpointMarshalling(t *testing.T) {
|
|||
name: "Bau",
|
||||
id: "efghijklmno",
|
||||
sandboxID: "ambarabaciccicocco",
|
||||
anonymous: true,
|
||||
iface: &endpointInterface{
|
||||
mac: []byte{11, 12, 13, 14, 15, 16},
|
||||
addr: &net.IPNet{
|
||||
|
@ -214,7 +215,7 @@ func TestEndpointMarshalling(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if e.name != ee.name || e.id != ee.id || e.sandboxID != ee.sandboxID || !compareEndpointInterface(e.iface, ee.iface) {
|
||||
if e.name != ee.name || e.id != ee.id || e.sandboxID != ee.sandboxID || !compareEndpointInterface(e.iface, ee.iface) || e.anonymous != ee.anonymous {
|
||||
t.Fatalf("JSON marsh/unmarsh failed.\nOriginal:\n%#v\nDecoded:\n%#v\nOriginal iface: %#v\nDecodediface:\n%#v", e, ee, e.iface, ee.iface)
|
||||
}
|
||||
}
|
||||
|
@ -302,7 +303,7 @@ func TestAuxAddresses(t *testing.T) {
|
|||
}
|
||||
defer c.Stop()
|
||||
|
||||
n := &network{ipamType: ipamapi.DefaultIPAM, ctrlr: c.(*controller)}
|
||||
n := &network{ipamType: ipamapi.DefaultIPAM, networkType: "bridge", ctrlr: c.(*controller)}
|
||||
|
||||
input := []struct {
|
||||
masterPool string
|
||||
|
|
|
@ -753,6 +753,10 @@ func (n *network) EndpointByID(id string) (Endpoint, error) {
|
|||
}
|
||||
|
||||
func (n *network) updateSvcRecord(ep *endpoint, localEps []*endpoint, isAdd bool) {
|
||||
if ep.isAnonymous() {
|
||||
return
|
||||
}
|
||||
|
||||
c := n.getController()
|
||||
sr, ok := c.svcDb[n.ID()]
|
||||
if !ok {
|
||||
|
|
Loading…
Reference in a new issue