func getSecretNames(secrets []*kapi.Secret) util.StringSet { names := util.StringSet{} for _, secret := range secrets { names.Insert(secret.Name) } return names }
func runMasterServiceTest(client *client.Client) { time.Sleep(12 * time.Second) svcList, err := client.Services(api.NamespaceDefault).List(labels.Everything()) if err != nil { glog.Fatalf("unexpected error listing services: %v", err) } var foundRW bool found := util.StringSet{} for i := range svcList.Items { found.Insert(svcList.Items[i].Name) if svcList.Items[i].Name == "kubernetes" { foundRW = true } } if foundRW { ep, err := client.Endpoints(api.NamespaceDefault).Get("kubernetes") if err != nil { glog.Fatalf("unexpected error listing endpoints for kubernetes service: %v", err) } if countEndpoints(ep) == 0 { glog.Fatalf("no endpoints for kubernetes service: %v", ep) } } else { glog.Errorf("no RW service found: %v", found) glog.Fatal("Kubernetes service test failed") } glog.Infof("Master service test passed.") }
func computeStatus(statusList []*github.CombinedStatus, requiredContexts []string) string { states := util.StringSet{} providers := util.StringSet{} for ix := range statusList { status := statusList[ix] glog.V(8).Infof("Checking commit: %s", *status.SHA) glog.V(8).Infof("Checking commit: %v", status) states.Insert(*status.State) for _, subStatus := range status.Statuses { glog.V(8).Infof("Found status from: %v", subStatus) providers.Insert(*subStatus.Context) } } for _, provider := range requiredContexts { if !providers.Has(provider) { glog.V(8).Infof("Failed to find %s in %v", provider, providers) return "incomplete" } } switch { case states.Has("pending"): return "pending" case states.Has("error"): return "error" case states.Has("failure"): return "failure" default: return "success" } }
func (t *tcShaper) nextClassID() (int, error) { data, err := t.e.Command("tc", "class", "show", "dev", t.iface).CombinedOutput() if err != nil { return -1, err } scanner := bufio.NewScanner(bytes.NewBuffer(data)) classes := util.StringSet{} for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) // skip empty lines if len(line) == 0 { continue } parts := strings.Split(line, " ") // expected tc line: // class htb 1:1 root prio 0 rate 1000Kbit ceil 1000Kbit burst 1600b cburst 1600b if len(parts) != 14 { return -1, fmt.Errorf("unexpected output from tc: %s (%v)", scanner.Text(), parts) } classes.Insert(parts[2]) } // Make sure it doesn't go forever for nextClass := 1; nextClass < 10000; nextClass++ { if !classes.Has(fmt.Sprintf("1:%d", nextClass)) { return nextClass, nil } } // This should really never happen return -1, fmt.Errorf("exhausted class space, please try again") }
func filterInvalidPods(pods []*api.Pod, source string, recorder record.EventRecorder) (filtered []*api.Pod) { names := util.StringSet{} for i, pod := range pods { var errlist []error if errs := validation.ValidatePod(pod); len(errs) != 0 { errlist = append(errlist, errs...) // If validation fails, don't trust it any further - // even Name could be bad. } else { name := kubecontainer.GetPodFullName(pod) if names.Has(name) { errlist = append(errlist, fielderrors.NewFieldDuplicate("name", pod.Name)) } else { names.Insert(name) } } if len(errlist) > 0 { name := bestPodIdentString(pod) err := utilerrors.NewAggregate(errlist) glog.Warningf("Pod[%d] (%s) from %s failed validation, ignoring: %v", i+1, name, source, err) recorder.Eventf(pod, "FailedValidation", "Error validating pod %s from %s, ignoring: %v", name, source, err) continue } filtered = append(filtered, pod) } return }
// Index returns a list of items that match on the index function // Index is thread-safe so long as you treat all items as immutable func (c *threadSafeMap) Index(indexName string, obj interface{}) ([]interface{}, error) { c.lock.RLock() defer c.lock.RUnlock() indexFunc := c.indexers[indexName] if indexFunc == nil { return nil, fmt.Errorf("Index with name %s does not exist", indexName) } indexKeys, err := indexFunc(obj) if err != nil { return nil, err } index := c.indices[indexName] // need to de-dupe the return list. Since multiple keys are allowed, this can happen. returnKeySet := util.StringSet{} for _, indexKey := range indexKeys { set := index[indexKey] for _, key := range set.List() { returnKeySet.Insert(key) } } list := make([]interface{}, 0, returnKeySet.Len()) for absoluteKey := range returnKeySet { list = append(list, c.items[absoluteKey]) } return list, nil }
func usersWithCommit(client *github.Client, org, project string) ([]string, error) { userSet := util.StringSet{} teams, err := fetchAllTeams(client, org) if err != nil { glog.Errorf("%v", err) return nil, err } teamIDs := []int{} for _, team := range teams { repo, _, err := client.Organizations.IsTeamRepo(*team.ID, org, project) if repo == nil || err != nil { continue } perms := *repo.Permissions if perms["push"] { teamIDs = append(teamIDs, *team.ID) } } for _, team := range teamIDs { users, err := fetchAllUsers(client, team) if err != nil { glog.Errorf("%v", err) continue } for _, user := range users { userSet.Insert(*user.Login) } } return userSet.List(), nil }
// Test public interface func doTestIndex(t *testing.T, indexer Indexer) { mkObj := func(id string, val string) testStoreObject { return testStoreObject{id: id, val: val} } // Test Index expected := map[string]util.StringSet{} expected["b"] = util.NewStringSet("a", "c") expected["f"] = util.NewStringSet("e") expected["h"] = util.NewStringSet("g") indexer.Add(mkObj("a", "b")) indexer.Add(mkObj("c", "b")) indexer.Add(mkObj("e", "f")) indexer.Add(mkObj("g", "h")) { for k, v := range expected { found := util.StringSet{} indexResults, err := indexer.Index("by_val", mkObj("", k)) if err != nil { t.Errorf("Unexpected error %v", err) } for _, item := range indexResults { found.Insert(item.(testStoreObject).id) } items := v.List() if !found.HasAll(items...) { t.Errorf("missing items, index %s, expected %v but found %v", k, items, found.List()) } } } }
func (a *openshiftAuthorizer) getAllowedSubjectsFromNamespaceBindings(ctx kapi.Context, passedAttributes AuthorizationAttributes) (util.StringSet, util.StringSet, error) { attributes := coerceToDefaultAuthorizationAttributes(passedAttributes) roleBindings, err := a.ruleResolver.GetRoleBindings(ctx) if err != nil { return nil, nil, err } users := util.StringSet{} groups := util.StringSet{} for _, roleBinding := range roleBindings { role, err := a.ruleResolver.GetRole(roleBinding) if err != nil { return nil, nil, err } for _, rule := range role.Rules() { matches, err := attributes.RuleMatches(rule) if err != nil { return nil, nil, err } if matches { users.Insert(roleBinding.Users().List()...) groups.Insert(roleBinding.Groups().List()...) } } } return users, groups, nil }
// List returns the set of namespace names the user has access to view func (ac *AuthorizationCache) List(userInfo user.Info) (*kapi.NamespaceList, error) { keys := util.StringSet{} user := userInfo.GetName() groups := userInfo.GetGroups() obj, exists, _ := ac.userSubjectRecordStore.GetByKey(user) if exists { subjectRecord := obj.(*subjectRecord) keys.Insert(subjectRecord.namespaces.List()...) } for _, group := range groups { obj, exists, _ := ac.groupSubjectRecordStore.GetByKey(group) if exists { subjectRecord := obj.(*subjectRecord) keys.Insert(subjectRecord.namespaces.List()...) } } namespaceList := &kapi.NamespaceList{} for key := range keys { namespace, exists, err := ac.namespaceStore.GetByKey(key) if err != nil { return nil, err } if exists { namespaceList.Items = append(namespaceList.Items, *namespace.(*kapi.Namespace)) } } return namespaceList, nil }
func getPullSecretNames(serviceaccount *kapi.ServiceAccount) util.StringSet { names := util.StringSet{} for _, secret := range serviceaccount.ImagePullSecrets { names.Insert(secret.Name) } return names }
func TestFilterQuotaPods(t *testing.T) { pods := []api.Pod{ { ObjectMeta: api.ObjectMeta{Name: "pod-running"}, Status: api.PodStatus{Phase: api.PodRunning}, }, { ObjectMeta: api.ObjectMeta{Name: "pod-pending"}, Status: api.PodStatus{Phase: api.PodPending}, }, { ObjectMeta: api.ObjectMeta{Name: "pod-succeeded"}, Status: api.PodStatus{Phase: api.PodSucceeded}, }, { ObjectMeta: api.ObjectMeta{Name: "pod-unknown"}, Status: api.PodStatus{Phase: api.PodUnknown}, }, { ObjectMeta: api.ObjectMeta{Name: "pod-failed"}, Status: api.PodStatus{Phase: api.PodFailed}, }, { ObjectMeta: api.ObjectMeta{Name: "pod-failed-with-restart-always"}, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyAlways, }, Status: api.PodStatus{Phase: api.PodFailed}, }, { ObjectMeta: api.ObjectMeta{Name: "pod-failed-with-restart-on-failure"}, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyOnFailure, }, Status: api.PodStatus{Phase: api.PodFailed}, }, { ObjectMeta: api.ObjectMeta{Name: "pod-failed-with-restart-never"}, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, }, Status: api.PodStatus{Phase: api.PodFailed}, }, } expectedResults := util.NewStringSet("pod-running", "pod-pending", "pod-unknown", "pod-failed-with-restart-always", "pod-failed-with-restart-on-failure") actualResults := util.StringSet{} result := FilterQuotaPods(pods) for i := range result { actualResults.Insert(result[i].Name) } if len(expectedResults) != len(actualResults) || !actualResults.HasAll(expectedResults.List()...) { t.Errorf("Expected results %v, Actual results %v", expectedResults, actualResults) } }
func (d *ProjectStatusDescriber) MakeGraph(namespace string) (osgraph.Graph, util.StringSet, error) { g := osgraph.New() loaders := []GraphLoader{ &serviceLoader{namespace: namespace, lister: d.K}, &serviceAccountLoader{namespace: namespace, lister: d.K}, &secretLoader{namespace: namespace, lister: d.K}, &rcLoader{namespace: namespace, lister: d.K}, &podLoader{namespace: namespace, lister: d.K}, // TODO check swagger for feature enablement and selectively add bcLoader and buildLoader // then remove tolerateNotFoundErrors method. &bcLoader{namespace: namespace, lister: d.C}, &buildLoader{namespace: namespace, lister: d.C}, &isLoader{namespace: namespace, lister: d.C}, &dcLoader{namespace: namespace, lister: d.C}, } loadingFuncs := []func() error{} for _, loader := range loaders { loadingFuncs = append(loadingFuncs, loader.Load) } forbiddenResources := util.StringSet{} if errs := parallel.Run(loadingFuncs...); len(errs) > 0 { actualErrors := []error{} for _, err := range errs { if kapierrors.IsForbidden(err) { forbiddenErr := err.(*kapierrors.StatusError) if (forbiddenErr.Status().Details != nil) && (len(forbiddenErr.Status().Details.Kind) > 0) { forbiddenResources.Insert(forbiddenErr.Status().Details.Kind) } continue } actualErrors = append(actualErrors, err) } if len(actualErrors) > 0 { return g, forbiddenResources, utilerrors.NewAggregate(actualErrors) } } for _, loader := range loaders { loader.AddToGraph(g) } kubeedges.AddAllExposedPodTemplateSpecEdges(g) kubeedges.AddAllExposedPodEdges(g) kubeedges.AddAllManagedByRCPodEdges(g) kubeedges.AddAllRequestedServiceAccountEdges(g) kubeedges.AddAllMountableSecretEdges(g) kubeedges.AddAllMountedSecretEdges(g) buildedges.AddAllInputOutputEdges(g) buildedges.AddAllBuildEdges(g) deployedges.AddAllTriggerEdges(g) deployedges.AddAllDeploymentEdges(g) imageedges.AddAllImageStreamRefEdges(g) return g, forbiddenResources, nil }
// ContainedIDs returns a util.StringSet containing all IDs of the stored items. // This is a snapshot of a moment in time, and one should keep in mind that // other go routines can add or remove items after you call this. func (c *DelayFIFO) ContainedIDs() util.StringSet { c.rlock() defer c.runlock() set := util.StringSet{} for id := range c.items { set.Insert(id) } return set }
// GetServerCertHostnames returns the set of hostnames that any serving certificate for master needs to be valid for. func (args MasterArgs) GetServerCertHostnames() (util.StringSet, error) { masterAddr, err := args.GetMasterAddress() if err != nil { return nil, err } masterPublicAddr, err := args.GetMasterPublicAddress() if err != nil { return nil, err } assetPublicAddr, err := args.GetAssetPublicAddress() if err != nil { return nil, err } allHostnames := util.NewStringSet( "localhost", "127.0.0.1", "openshift.default.svc.cluster.local", "openshift.default.svc", "openshift.default", "openshift", "kubernetes.default.svc.cluster.local", "kubernetes.default.svc", "kubernetes.default", "kubernetes", masterAddr.Host, masterPublicAddr.Host, assetPublicAddr.Host) if _, ipnet, err := net.ParseCIDR(args.NetworkArgs.ServiceNetworkCIDR); err == nil { // CIDR is ignored if it is invalid, other code handles validation. if firstServiceIP, err := ipallocator.GetIndexedIP(ipnet, 1); err == nil { allHostnames.Insert(firstServiceIP.String()) } } listenIP := net.ParseIP(args.ListenArg.ListenAddr.Host) // add the IPs that might be used based on the ListenAddr. if listenIP != nil && listenIP.IsUnspecified() { allAddresses, _ := cmdutil.AllLocalIP4() for _, ip := range allAddresses { allHostnames.Insert(ip.String()) } } else { allHostnames.Insert(args.ListenArg.ListenAddr.Host) } certHostnames := util.StringSet{} for hostname := range allHostnames { if host, _, err := net.SplitHostPort(hostname); err == nil { // add the hostname without the port certHostnames.Insert(host) } else { // add the originally specified hostname certHostnames.Insert(hostname) } } return certHostnames, nil }
func (b *BlunderbussConfig) FindOwners(filename string) []string { owners := util.StringSet{} for prefix, ownersList := range b.PrefixMap { if strings.HasPrefix(filename, prefix) { owners.Insert(ownersList...) } } return owners.List() }
func ExampleInformer() { // source simulates an apiserver object endpoint. source := framework.NewFakeControllerSource() // Let's do threadsafe output to get predictable test results. deletionCounter := make(chan string, 1000) // Make a controller that immediately deletes anything added to it, and // logs anything deleted. _, controller := framework.NewInformer( source, &api.Pod{}, time.Millisecond*100, framework.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { source.Delete(obj.(runtime.Object)) }, DeleteFunc: func(obj interface{}) { key, err := framework.DeletionHandlingMetaNamespaceKeyFunc(obj) if err != nil { key = "oops something went wrong with the key" } // Report this deletion. deletionCounter <- key }, }, ) // Run the controller and run it until we close stop. stop := make(chan struct{}) defer close(stop) go controller.Run(stop) // Let's add a few objects to the source. testIDs := []string{"a-hello", "b-controller", "c-framework"} for _, name := range testIDs { // Note that these pods are not valid-- the fake source doesn't // call validation or anything. source.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: name}}) } // Let's wait for the controller to process the things we just added. outputSet := util.StringSet{} for i := 0; i < len(testIDs); i++ { outputSet.Insert(<-deletionCounter) } for _, key := range outputSet.List() { fmt.Println(key) } // Output: // a-hello // b-controller // c-framework }
func printPolicyBinding(policyBinding *authorizationapi.PolicyBinding, w io.Writer, withNamespace, wide bool, columnLabels []string) error { roleBindingNames := util.StringSet{} for key := range policyBinding.RoleBindings { roleBindingNames.Insert(key) } roleBindingsString := strings.Join(roleBindingNames.List(), ", ") _, err := fmt.Fprintf(w, "%s\t%s\t%v\n", policyBinding.Name, roleBindingsString, policyBinding.LastModified) return err }
func printDeploymentConfig(dc *deployapi.DeploymentConfig, w io.Writer, withNamespace, wide bool, columnLabels []string) error { triggers := util.StringSet{} for _, trigger := range dc.Triggers { triggers.Insert(string(trigger.Type)) } tStr := strings.Join(triggers.List(), ", ") _, err := fmt.Fprintf(w, "%s\t%s\t%v\n", dc.Name, tStr, dc.LatestVersion) return err }
// getMatchingClusters examines the kubeconfig for all clusters that point to the same server func getMatchingClusters(clientConfig kclient.Config, kubeconfig clientcmdapi.Config) util.StringSet { ret := util.StringSet{} for key, cluster := range kubeconfig.Clusters { if (cluster.Server == clientConfig.Host) && (cluster.InsecureSkipTLSVerify == clientConfig.Insecure) && (cluster.CertificateAuthority == clientConfig.CAFile) && (bytes.Compare(cluster.CertificateAuthorityData, clientConfig.CAData) == 0) { ret.Insert(key) } } return ret }
// ContainedIDs returns a util.StringSet containing all IDs of the enqueued items. // This is a snapshot of a moment in time, and one should keep in mind that // other go routines can add or remove items after you call this. func (eq *EventQueue) ContainedIDs() util.StringSet { eq.lock.RLock() defer eq.lock.RUnlock() s := util.StringSet{} for _, key := range eq.queue { s.Insert(key) } return s }
func (o *RemoveFromProjectOptions) Run() error { bindingList, err := o.Client.PolicyBindings(o.BindingNamespace).List(labels.Everything(), fields.Everything()) if err != nil { return err } sort.Sort(authorizationapi.PolicyBindingSorter(bindingList.Items)) usersRemoved := util.StringSet{} groupsRemoved := util.StringSet{} for _, currPolicyBinding := range bindingList.Items { for _, currBinding := range authorizationapi.SortRoleBindings(currPolicyBinding.RoleBindings, true) { bindingHasGroups := len(o.Groups) > 0 && currBinding.Groups.HasAny(o.Groups...) bindingHasUsers := len(o.Users) > 0 && currBinding.Users.HasAny(o.Users...) if !bindingHasGroups && !bindingHasUsers { continue } existingGroups := util.NewStringSet(currBinding.Groups.List()...) existingUsers := util.NewStringSet(currBinding.Users.List()...) currBinding.Groups.Delete(o.Groups...) currBinding.Users.Delete(o.Users...) _, err = o.Client.RoleBindings(o.BindingNamespace).Update(currBinding) if err != nil { return err } roleDisplayName := fmt.Sprintf("%s/%s", currBinding.RoleRef.Namespace, currBinding.RoleRef.Name) if len(currBinding.RoleRef.Namespace) == 0 { roleDisplayName = currBinding.RoleRef.Name } if diff := existingGroups.Difference(currBinding.Groups); len(diff) != 0 { fmt.Fprintf(o.Out, "Removing %s from groups %v in project %s.\n", roleDisplayName, diff.List(), o.BindingNamespace) groupsRemoved.Insert(diff.List()...) } if diff := existingUsers.Difference(currBinding.Users); len(diff) != 0 { fmt.Fprintf(o.Out, "Removing %s from users %v in project %s.\n", roleDisplayName, diff.List(), o.BindingNamespace) usersRemoved.Insert(diff.List()...) } } } if diff := util.NewStringSet(o.Groups...).Difference(groupsRemoved); len(diff) != 0 { fmt.Fprintf(o.Out, "Groups %v were not bound to roles in project %s.\n", diff.List(), o.BindingNamespace) } if diff := util.NewStringSet(o.Users...).Difference(usersRemoved); len(diff) != 0 { fmt.Fprintf(o.Out, "Users %v were not bound to roles in project %s.\n", diff.List(), o.BindingNamespace) } return nil }
// ContainedIDs returns a util.StringSet containing all IDs of the stored items. // This is a snapshot of a moment in time, and one should keep in mind that // other go routines can add or remove items after you call this. func (c *HistoricalFIFO) ContainedIDs() util.StringSet { c.lock.RLock() defer c.lock.RUnlock() set := util.StringSet{} for id, entry := range c.items { if entry.Is(DELETE_EVENT | POP_EVENT) { continue } set.Insert(id) } return set }
// NegotiateVersion queries the server's supported api versions to find // a version that both client and server support. // - If no version is provided, try registered client versions in order of // preference. // - If version is provided, but not default config (explicitly requested via // commandline flag), and is unsupported by the server, print a warning to // stderr and try client's registered versions in order of preference. // - If version is config default, and the server does not support it, // return an error. func NegotiateVersion(client *Client, c *Config, version string, clientRegisteredVersions []string) (string, error) { var err error if client == nil { client, err = New(c) if err != nil { return "", err } } clientVersions := util.StringSet{} for _, v := range clientRegisteredVersions { clientVersions.Insert(v) } apiVersions, err := client.ServerAPIVersions() if err != nil { return "", fmt.Errorf("couldn't read version from server: %v", err) } serverVersions := util.StringSet{} for _, v := range apiVersions.Versions { serverVersions.Insert(v) } // If no version requested, use config version (may also be empty). if len(version) == 0 { version = c.Version } // If version explicitly requested verify that both client and server support it. // If server does not support warn, but try to negotiate a lower version. if len(version) != 0 { if !clientVersions.Has(version) { return "", fmt.Errorf("Client does not support API version '%s'. Client supported API versions: %v", version, clientVersions) } if serverVersions.Has(version) { return version, nil } // If we are using an explicit config version the server does not support, fail. if version == c.Version { return "", fmt.Errorf("Server does not support API version '%s'.", version) } } for _, clientVersion := range clientRegisteredVersions { if serverVersions.Has(clientVersion) { // Version was not explicitly requested in command config (--api-version). // Ok to fall back to a supported version with a warning. if len(version) != 0 { glog.Warningf("Server does not support API version '%s'. Falling back to '%s'.", version, clientVersion) } return clientVersion, nil } } return "", fmt.Errorf("Failed to negotiate an api version. Server supports: %v. Client supports: %v.", serverVersions, clientRegisteredVersions) }
func validateList(t *testing.T, lister Lister, user user.Info, expectedSet util.StringSet) { namespaceList, err := lister.List(user) if err != nil { t.Errorf("Unexpected error %v", err) } results := util.StringSet{} for _, namespace := range namespaceList.Items { results.Insert(namespace.Name) } if results.Len() != expectedSet.Len() || !results.HasAll(expectedSet.List()...) { t.Errorf("User %v, Expected: %v, Actual: %v", user.GetName(), expectedSet, results) } }
// GetServerCertHostnames returns the set of hostnames that any serving certificate for master needs to be valid for. func (args MasterArgs) GetServerCertHostnames() (util.StringSet, error) { masterAddr, err := args.GetMasterAddress() if err != nil { return nil, err } masterPublicAddr, err := args.GetMasterPublicAddress() if err != nil { return nil, err } assetPublicAddr, err := args.GetAssetPublicAddress() if err != nil { return nil, err } allHostnames := util.NewStringSet( "localhost", "127.0.0.1", "openshift.default.svc.cluster.local", "openshift.default.svc", "openshift.default", "openshift", "kubernetes.default.svc.cluster.local", "kubernetes.default.svc", "kubernetes.default", "kubernetes", masterAddr.Host, masterPublicAddr.Host, assetPublicAddr.Host) listenIP := net.ParseIP(args.ListenArg.ListenAddr.Host) // add the IPs that might be used based on the ListenAddr. if listenIP != nil && listenIP.IsUnspecified() { allAddresses, _ := cmdutil.AllLocalIP4() for _, ip := range allAddresses { allHostnames.Insert(ip.String()) } } else { allHostnames.Insert(args.ListenArg.ListenAddr.Host) } certHostnames := util.StringSet{} for hostname := range allHostnames { if host, _, err := net.SplitHostPort(hostname); err == nil { // add the hostname without the port certHostnames.Insert(host) } else { // add the originally specified hostname certHostnames.Insert(hostname) } } return certHostnames, nil }
func (n *NodeOptions) GetNodes() ([]*kapi.Node, error) { nameArgs := []string{"nodes"} if len(n.NodeNames) != 0 { nameArgs = append(nameArgs, n.NodeNames...) } r := resource.NewBuilder(n.Mapper, n.Typer, resource.ClientMapperFunc(n.RESTClientFactory)). ContinueOnError(). NamespaceParam(n.DefaultNamespace). SelectorParam(n.Selector). ResourceTypeOrNameArgs(true, nameArgs...). Flatten(). Do() if r.Err() != nil { return nil, r.Err() } errList := []error{} nodeList := []*kapi.Node{} _ = r.Visit(func(info *resource.Info) error { node, ok := info.Object.(*kapi.Node) if !ok { err := fmt.Errorf("cannot convert input to Node: %v", reflect.TypeOf(info.Object)) errList = append(errList, err) // Don't bail out if one node fails return nil } nodeList = append(nodeList, node) return nil }) if len(errList) != 0 { return nodeList, kerrors.NewAggregate(errList) } if len(nodeList) == 0 { return nodeList, fmt.Errorf("No nodes found") } else { givenNodeNames := util.NewStringSet(n.NodeNames...) foundNodeNames := util.StringSet{} for _, node := range nodeList { foundNodeNames.Insert(node.ObjectMeta.Name) } skippedNodeNames := givenNodeNames.Difference(foundNodeNames) if skippedNodeNames.Len() > 0 { return nodeList, fmt.Errorf("Nodes %v not found", strings.Join(skippedNodeNames.List(), ", ")) } } return nodeList, nil }
func printPolicy(policy *authorizationapi.Policy, w io.Writer, withNamespace, wide bool, columnLabels []string) error { roleNames := util.StringSet{} for key := range policy.Roles { roleNames.Insert(key) } rolesString := strings.Join(roleNames.List(), ", ") if withNamespace { if _, err := fmt.Fprintf(w, "%s\t", policy.Namespace); err != nil { return err } } _, err := fmt.Fprintf(w, "%s\t%s\t%v\n", policy.Name, rolesString, policy.LastModified) return err }
func (e *endpointController) getPodServiceMemberships(pod *api.Pod) (util.StringSet, error) { set := util.StringSet{} services, err := e.serviceStore.GetPodServices(pod) if err != nil { // don't log this error because this function makes pointless // errors when no services match. return set, nil } for i := range services { key, err := keyFunc(&services[i]) if err != nil { return nil, err } set.Insert(key) } return set, nil }
func (o *NewGroupOptions) AddGroup() error { group := &userapi.Group{} group.Name = o.Group usedNames := util.StringSet{} for _, user := range o.Users { if usedNames.Has(user) { continue } usedNames.Insert(user) group.Users = append(group.Users, user) } _, err := o.GroupClient.Create(group) return err }