// GetNodeDetail gets node details. func GetNodeDetail(client k8sClient.Interface, heapsterClient client.HeapsterClient, name string) ( *NodeDetail, error) { log.Printf("Getting details of %s node", name) node, err := client.Nodes().Get(name) if err != nil { return nil, err } pods, err := getNodePods(client, *node) if err != nil { return nil, err } podList := pod.CreatePodList(pods.Items, heapsterClient) events, err := event.GetNodeEvents(client, node.Name) if err != nil { return nil, err } allocatedResources, err := getNodeAllocatedResources(*node, pods) if err != nil { return nil, err } nodeDetails := toNodeDetail(*node, podList, events, allocatedResources) return &nodeDetails, 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 }
func getReplicaSetDetail(replicaSet *extensions.ReplicaSet, heapsterClient client.HeapsterClient, events *common.EventList, pods []api.Pod) ReplicaSetDetail { matchingPods := common.FilterNamespacedPodsByLabelSelector(pods, replicaSet.ObjectMeta.Namespace, replicaSet.Spec.Selector) podInfo := getPodInfo(replicaSet, matchingPods) return ReplicaSetDetail{ ObjectMeta: common.NewObjectMeta(replicaSet.ObjectMeta), TypeMeta: common.NewTypeMeta(common.ResourceKindReplicaSet), ContainerImages: common.GetContainerImages(&replicaSet.Spec.Template.Spec), PodInfo: podInfo, PodList: pod.CreatePodList(matchingPods, heapsterClient), EventList: *events, } }
func getPetSetDetail(petSet *apps.PetSet, heapsterClient client.HeapsterClient, events *common.EventList, pods []api.Pod) PetSetDetail { matchingPods := common.FilterNamespacedPodsByLabelSelector(pods, petSet.ObjectMeta.Namespace, petSet.Spec.Selector) podInfo := common.GetPodInfo(int32(petSet.Status.Replicas), int32(petSet.Spec.Replicas), matchingPods) return PetSetDetail{ ObjectMeta: common.NewObjectMeta(petSet.ObjectMeta), TypeMeta: common.NewTypeMeta(common.ResourceKindPetSet), ContainerImages: common.GetContainerImages(&petSet.Spec.Template.Spec), PodInfo: podInfo, PodList: pod.CreatePodList(matchingPods, heapsterClient), EventList: *events, } }
// Returns detailed information about the given daemon set in the given namespace. func GetDaemonSetDetail(client k8sClient.Interface, heapsterClient client.HeapsterClient, namespace, name string) (*DaemonSetDetail, error) { log.Printf("Getting details of %s daemon set in %s namespace", name, namespace) daemonSetWithPods, err := getRawDaemonSetWithPods(client, namespace, name) if err != nil { return nil, err } daemonSet := daemonSetWithPods.DaemonSet pods := daemonSetWithPods.Pods services, err := client.Services(namespace).List(api.ListOptions{ LabelSelector: labels.Everything(), FieldSelector: fields.Everything(), }) if err != nil { return nil, err } daemonSetDetail := &DaemonSetDetail{ ObjectMeta: common.NewObjectMeta(daemonSet.ObjectMeta), TypeMeta: common.NewTypeMeta(common.ResourceKindDaemonSet), LabelSelector: daemonSet.Spec.Selector, PodInfo: getDaemonSetPodInfo(daemonSet, pods.Items), ServiceList: resourceService.ServiceList{Services: make([]resourceService.Service, 0)}, } matchingServices := getMatchingServicesforDS(services.Items, daemonSet) for _, service := range matchingServices { daemonSetDetail.ServiceList.Services = append(daemonSetDetail.ServiceList.Services, resourceService.ToService(&service)) } for _, container := range daemonSet.Spec.Template.Spec.Containers { daemonSetDetail.ContainerImages = append(daemonSetDetail.ContainerImages, container.Image) } daemonSetDetail.Pods = pod.CreatePodList(pods.Items, heapsterClient) return daemonSetDetail, nil }
// GetReplicationControllerDetail returns detailed information about the given replication // controller in the given namespace. func GetReplicationControllerDetail(client k8sClient.Interface, heapsterClient client.HeapsterClient, namespace, name string) (*ReplicationControllerDetail, error) { log.Printf("Getting details of %s replication controller in %s namespace", name, namespace) replicationControllerWithPods, err := getRawReplicationControllerWithPods(client, namespace, name) if err != nil { return nil, err } replicationController := replicationControllerWithPods.ReplicationController pods := replicationControllerWithPods.Pods services, err := client.Services(namespace).List(api.ListOptions{ LabelSelector: labels.Everything(), FieldSelector: fields.Everything(), }) if err != nil { return nil, err } replicationControllerDetail := &ReplicationControllerDetail{ ObjectMeta: common.NewObjectMeta(replicationController.ObjectMeta), TypeMeta: common.NewTypeMeta(common.ResourceKindReplicationController), LabelSelector: replicationController.Spec.Selector, PodInfo: getReplicationPodInfo(replicationController, pods.Items), ServiceList: resourceService.ServiceList{Services: make([]resourceService.Service, 0)}, } matchingServices := getMatchingServices(services.Items, replicationController) for _, service := range matchingServices { replicationControllerDetail.ServiceList.Services = append( replicationControllerDetail.ServiceList.Services, resourceService.ToService(&service)) } for _, container := range replicationController.Spec.Template.Spec.Containers { replicationControllerDetail.ContainerImages = append(replicationControllerDetail.ContainerImages, container.Image) } replicationControllerDetail.Pods = pod.CreatePodList(pods.Items, heapsterClient) return replicationControllerDetail, nil }
func getJobDetail(job *batch.Job, heapsterClient client.HeapsterClient, events *common.EventList, pods []api.Pod) JobDetail { matchingPods := common.FilterNamespacedPodsBySelector(pods, job.ObjectMeta.Namespace, job.Spec.Selector.MatchLabels) podInfo := getPodInfo(job, matchingPods) return JobDetail{ ObjectMeta: common.NewObjectMeta(job.ObjectMeta), TypeMeta: common.NewTypeMeta(common.ResourceKindJob), ContainerImages: common.GetContainerImages(&job.Spec.Template.Spec), PodInfo: podInfo, PodList: pod.CreatePodList(matchingPods, heapsterClient), EventList: *events, Parallelism: job.Spec.Parallelism, Completions: job.Spec.Completions, } }