// GetPodsEvents gets pods events associated to resource targeted by given resource selector. func GetPodsEvents(client client.Interface, namespace string, resourceSelector map[string]string) ( []api.Event, error) { channels := &common.ResourceChannels{ PodList: common.GetPodListChannelWithOptions( client, common.NewSameNamespaceQuery(namespace), api.ListOptions{ LabelSelector: labels.SelectorFromSet(resourceSelector), FieldSelector: fields.Everything(), }, 1), EventList: common.GetEventListChannel(client, common.NewSameNamespaceQuery(namespace), 1), } podList := <-channels.PodList.List if err := <-channels.PodList.Error; err != nil { return nil, err } eventList := <-channels.EventList.List if err := <-channels.EventList.Error; err != nil { return nil, err } events := FilterEventsByPodsUID(eventList.Items, podList.Items) return events, nil }
// GetDeploymentDetail returns model object of deployment and error, if any. func GetDeploymentDetail(client client.Interface, namespace string, name string) (*DeploymentDetail, error) { log.Printf("Getting details of %s deployment in %s namespace", name, namespace) deployment, err := client.Extensions().Deployments(namespace).Get(name) if err != nil { return nil, err } selector, err := unversioned.LabelSelectorAsSelector(deployment.Spec.Selector) if err != nil { return nil, err } options := api.ListOptions{LabelSelector: selector} channels := &common.ResourceChannels{ ReplicaSetList: common.GetReplicaSetListChannelWithOptions(client.Extensions(), common.NewSameNamespaceQuery(namespace), options, 1), PodList: common.GetPodListChannelWithOptions(client, common.NewSameNamespaceQuery(namespace), options, 1), EventList: common.GetEventListChannelWithOptions(client, common.NewSameNamespaceQuery(namespace), options, 1), } rsList := <-channels.ReplicaSetList.List if err := <-channels.ReplicaSetList.Error; err != nil { return nil, err } podList := <-channels.PodList.List if err := <-channels.PodList.Error; err != nil { return nil, err } eventList := <-channels.EventList.List if err := <-channels.EventList.Error; err != nil { return nil, err } oldReplicaSets, _, err := deploymentutil.FindOldReplicaSets(deployment, rsList.Items, podList) if err != nil { return nil, err } newReplicaSet, err := deploymentutil.FindNewReplicaSet(deployment, rsList.Items) if err != nil { return nil, err } events, err := GetDeploymentEvents(eventList.Items, namespace, name) if err != nil { return nil, err } return getDeploymentDetail(deployment, oldReplicaSets, newReplicaSet, podList.Items, events, eventList.Items), nil }
// GetPetSetDetail gets pet set details. func GetPetSetDetail(client *k8sClient.Client, heapsterClient client.HeapsterClient, namespace, name string) (*PetSetDetail, error) { log.Printf("Getting details of %s service in %s namespace", name, namespace) // TODO(floreks): Use channels. petSetData, err := client.Apps().PetSets(namespace).Get(name) if err != nil { return nil, err } channels := &common.ResourceChannels{ PodList: common.GetPodListChannel(client, common.NewSameNamespaceQuery(namespace), 1), } pods := <-channels.PodList.List if err := <-channels.PodList.Error; err != nil { return nil, err } events, err := GetPetSetEvents(client, petSetData.Namespace, petSetData.Name) if err != nil { return nil, err } petSet := getPetSetDetail(petSetData, heapsterClient, events, pods.Items) return &petSet, nil }
// GetEvents gets events associated to resource with given name. func GetEvents(client client.EventNamespacer, namespace, resourceName string) ([]api.Event, error) { fieldSelector, err := fields.ParseSelector("involvedObject.name=" + resourceName) if err != nil { return nil, err } channels := &common.ResourceChannels{ EventList: common.GetEventListChannelWithOptions( client, common.NewSameNamespaceQuery(namespace), api.ListOptions{ LabelSelector: labels.Everything(), FieldSelector: fieldSelector, }, 1), } eventList := <-channels.EventList.List if err := <-channels.EventList.Error; err != nil { return nil, err } return eventList.Items, nil }
// GetJobDetail gets job details. func GetJobDetail(client k8sClient.Interface, heapsterClient client.HeapsterClient, namespace, name string) (*JobDetail, error) { log.Printf("Getting details of %s service in %s namespace", name, namespace) // TODO(floreks): Use channels. jobData, err := client.Extensions().Jobs(namespace).Get(name) if err != nil { return nil, err } channels := &common.ResourceChannels{ PodList: common.GetPodListChannel(client, common.NewSameNamespaceQuery(namespace), 1), } pods := <-channels.PodList.List if err := <-channels.PodList.Error; err != nil { return nil, err } events, err := GetJobEvents(client, jobData.Namespace, jobData.Name) if err != nil { return nil, err } job := getJobDetail(jobData, heapsterClient, events, pods.Items) return &job, nil }
// GetServicePods gets list of pods targeted by given label selector in given namespace. func GetServicePods(client k8sClient.Interface, heapsterClient client.HeapsterClient, namespace string, serviceSelector map[string]string) (*pod.PodList, error) { channels := &common.ResourceChannels{ PodList: common.GetPodListChannel(client, common.NewSameNamespaceQuery(namespace), 1), } apiPodList := <-channels.PodList.List if err := <-channels.PodList.Error; err != nil { return nil, err } apiPods := common.FilterNamespacedPodsBySelector(apiPodList.Items, namespace, serviceSelector) podList := pod.CreatePodList(apiPods, heapsterClient) return &podList, nil }