// Check that all Port.HostPort values are unique across all manifests. func checkHostPortConflicts(allManifests []api.ContainerManifest, newManifest *api.ContainerManifest) error { allPorts := map[int]bool{} extract := func(p *api.Port) int { return p.HostPort } for i := range allManifests { manifest := &allManifests[i] err := api.AccumulateUniquePorts(manifest.Containers, allPorts, extract) if err != nil { return err } } return api.AccumulateUniquePorts(newManifest.Containers, allPorts, extract) }
// Check that all Port.HostPort values are unique across all manifests. func checkHostPortConflicts(allManifests []api.ContainerManifest, newManifest *api.ContainerManifest) []error { allErrs := []error{} allPorts := map[int]bool{} extract := func(p *api.Port) int { return p.HostPort } for i := range allManifests { manifest := &allManifests[i] errs := api.AccumulateUniquePorts(manifest.Containers, allPorts, extract) if len(errs) != 0 { allErrs = append(allErrs, errs...) } } if errs := api.AccumulateUniquePorts(newManifest.Containers, allPorts, extract); len(errs) != 0 { allErrs = append(allErrs, errs...) } return allErrs }
// filterHostPortConflicts removes pods that conflict on Port.HostPort values func filterHostPortConflicts(pods []Pod) []Pod { filtered := []Pod{} ports := map[int]bool{} extract := func(p *api.Port) int { return p.HostPort } for i := range pods { pod := &pods[i] if errs := api.AccumulateUniquePorts(pod.Manifest.Containers, ports, extract); len(errs) != 0 { glog.Warningf("Pod %s has conflicting ports, ignoring: %v", GetPodFullName(pod), errs) continue } filtered = append(filtered, *pod) } return filtered }