func procAttachBackend(c libnetwork.NetworkController, vars map[string]string, body []byte) (interface{}, *responseStatus) { var bk endpointJoin var setFctList []libnetwork.EndpointOption err := json.Unmarshal(body, &bk) if err != nil { return nil, &responseStatus{Status: "Invalid body: " + err.Error(), StatusCode: http.StatusBadRequest} } epT, epBy := detectEndpointTarget(vars) sv, errRsp := findService(c, epT, epBy) if !errRsp.isOK() { return nil, errRsp } sb, errRsp := findSandbox(c, bk.SandboxID, byID) if !errRsp.isOK() { return nil, errRsp } for _, str := range bk.Aliases { name, alias, err := netutils.ParseAlias(str) if err != nil { return "", convertNetworkError(err) } setFctList = append(setFctList, libnetwork.CreateOptionAlias(name, alias)) } err = sv.Join(sb, setFctList...) if err != nil { return nil, convertNetworkError(err) } return sb.Key(), &successResponse }
// BuildJoinOptions builds endpoint Join options from a given network. func (container *Container) BuildJoinOptions(n libnetwork.Network) ([]libnetwork.EndpointOption, error) { var joinOptions []libnetwork.EndpointOption if epConfig, ok := container.NetworkSettings.Networks[n.Name()]; ok { for _, str := range epConfig.Links { name, alias, err := runconfigopts.ParseLink(str) if err != nil { return nil, err } joinOptions = append(joinOptions, libnetwork.CreateOptionAlias(name, alias)) } } return joinOptions, nil }