func (c *Container) findPortBoundNetworkEndpoint(hostconfig *containertypes.HostConfig, endpoints []*models.EndpointConfig) *models.EndpointConfig { if len(hostconfig.PortBindings) == 0 { return nil } // check if the port binding network is a bridge type listRes, err := PortLayerClient().Scopes.List(scopes.NewListParamsWithContext(ctx).WithIDName(hostconfig.NetworkMode.NetworkName())) if err != nil { log.Error(err) return nil } if len(listRes.Payload) != 1 || listRes.Payload[0].ScopeType != "bridge" { log.Warnf("port binding for network %s is not bridge type", hostconfig.NetworkMode.NetworkName()) return nil } // look through endpoints to find the container's IP on the network that has the port binding for _, e := range endpoints { if hostconfig.NetworkMode.NetworkName() == e.Scope || (hostconfig.NetworkMode.IsDefault() && e.Scope == c.defaultScope()) { return e } } return nil }
func (n *Network) GetNetworksByID(partialID string) []libnetwork.Network { ok, err := PortLayerClient().Scopes.List(scopes.NewListParamsWithContext(ctx).WithIDName(partialID)) if err != nil { return nil } nets := make([]libnetwork.Network, len(ok.Payload)) for i, cfg := range ok.Payload { nets[i] = &network{cfg: cfg} } return nets }
func (n *Network) GetNetworkByName(idName string) (libnetwork.Network, error) { ok, err := PortLayerClient().Scopes.List(scopes.NewListParamsWithContext(ctx).WithIDName(idName)) if err != nil { switch err := err.(type) { case *scopes.ListNotFound: return nil, nil case *scopes.ListDefault: return nil, derr.NewErrorWithStatusCode(fmt.Errorf(err.Payload.Message), http.StatusInternalServerError) default: return nil, derr.NewErrorWithStatusCode(err, http.StatusInternalServerError) } } return &network{cfg: ok.Payload[0]}, nil }
func (c *Container) defaultScope() string { defaultScope.Lock() defer defaultScope.Unlock() if defaultScope.scope != "" { return defaultScope.scope } client := c.containerProxy.Client() listRes, err := client.Scopes.List(scopes.NewListParamsWithContext(ctx).WithIDName("default")) if err != nil { log.Error(err) return "" } if len(listRes.Payload) != 1 { log.Errorf("could not get default scope name") return "" } defaultScope.scope = listRes.Payload[0].Name return defaultScope.scope }