// Returns the old RCs targetted by the given Deployment. func GetOldRCs(deployment extensions.Deployment, c client.Interface) ([]*api.ReplicationController, error) { namespace := deployment.ObjectMeta.Namespace // 1. Find all pods whose labels match deployment.Spec.Selector podList, err := c.Pods(namespace).List(labels.SelectorFromSet(deployment.Spec.Selector), fields.Everything()) if err != nil { return nil, fmt.Errorf("error listing pods: %v", err) } // 2. Find the corresponding RCs for pods in podList. // TODO: Right now we list all RCs and then filter. We should add an API for this. oldRCs := map[string]api.ReplicationController{} rcList, err := c.ReplicationControllers(namespace).List(labels.Everything()) if err != nil { return nil, fmt.Errorf("error listing replication controllers: %v", err) } for _, pod := range podList.Items { podLabelsSelector := labels.Set(pod.ObjectMeta.Labels) for _, rc := range rcList.Items { rcLabelsSelector := labels.SelectorFromSet(rc.Spec.Selector) if rcLabelsSelector.Matches(podLabelsSelector) { // Filter out RC that has the same pod template spec as the deployment - that is the new RC. if api.Semantic.DeepEqual(rc.Spec.Template, GetNewRCTemplate(deployment)) { continue } oldRCs[rc.ObjectMeta.Name] = rc } } } requiredRCs := []*api.ReplicationController{} for _, value := range oldRCs { requiredRCs = append(requiredRCs, &value) } return requiredRCs, nil }
func main() { flag.Parse() var err error // TODO: Validate input flags. ks := Newkube2consul() if ks.consulClient, err = newConsulClient(*argConsulAgent); err != nil { glog.Fatalf("Failed to create Consul client - %v", err) } kubeClient, err := newKubeClient() if err != nil { glog.Fatalf("Failed to create a kubernetes client: %v", err) } glog.Info(kubeClient.ServerVersion()) glog.Info(kubeClient.Services(kapi.NamespaceAll).Get("sensu-core")) pods, err := kubeClient.Pods(api.NamespaceDefault).List(labels.Everything(), fields.Everything()) if err != nil { for pod := range pods.Items { glog.Info(pod) } } watchForServices(kubeClient, ks) watchForNodes(kubeClient, ks) glog.Info("Watchers running") select {} }
// Returns an RC that matches the intent of the given deployment. // Returns nil if the new RC doesnt exist yet. func GetNewRC(deployment extensions.Deployment, c client.Interface) (*api.ReplicationController, error) { namespace := deployment.ObjectMeta.Namespace rcList, err := c.ReplicationControllers(namespace).List(labels.Everything()) if err != nil { return nil, fmt.Errorf("error listing replication controllers: %v", err) } newRCTemplate := GetNewRCTemplate(deployment) for _, rc := range rcList.Items { if api.Semantic.DeepEqual(rc.Spec.Template, newRCTemplate) { // This is the new RC. return &rc, nil } } // new RC does not exist. return nil, nil }
// Search finds events about the specified object. The namespace of the // object must match this event's client namespace unless the event client // was made with the "" namespace. func (e *events) Search(objOrRef runtime.Object) (*api.EventList, error) { ref, err := api.GetReference(objOrRef) if err != nil { return nil, err } if e.namespace != "" && ref.Namespace != e.namespace { return nil, fmt.Errorf("won't be able to find any events of namespace '%v' in namespace '%v'", ref.Namespace, e.namespace) } stringRefKind := string(ref.Kind) var refKind *string if stringRefKind != "" { refKind = &stringRefKind } stringRefUID := string(ref.UID) var refUID *string if stringRefUID != "" { refUID = &stringRefUID } fieldSelector := e.GetFieldSelector(&ref.Name, &ref.Namespace, refKind, refUID) return e.List(labels.Everything(), fieldSelector) }