Add the status of pod when using "Helm status" command, as the issue 2138

reviewable/pr2421/r1
devinyan 9 years ago
parent 6f6071e3bb
commit de2bf35526

@ -154,6 +154,8 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) {
return "", err return "", err
} }
objPods := c.getRelationPods(infos)
missing := []string{} missing := []string{}
err = perform(infos, func(info *resource.Info) error { err = perform(infos, func(info *resource.Info) error {
log.Printf("Doing get for %s: %q", info.Mapping.GroupVersionKind.Kind, info.Name) log.Printf("Doing get for %s: %q", info.Mapping.GroupVersionKind.Kind, info.Name)
@ -167,13 +169,27 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) {
// versions per cluster, but this certainly won't hurt anything, so let's be safe. // versions per cluster, but this certainly won't hurt anything, so let's be safe.
gvk := info.ResourceMapping().GroupVersionKind gvk := info.ResourceMapping().GroupVersionKind
vk := gvk.Version + "/" + gvk.Kind vk := gvk.Version + "/" + gvk.Kind
if gvk.Kind != "Pod" {
objs[vk] = append(objs[vk], info.Object) objs[vk] = append(objs[vk], info.Object)
} else {
if !IsFoundPodInfo(objPods[vk], info) {
objs[vk] = append(objs[vk], info.Object)
}
}
return nil return nil
}) })
if err != nil { if err != nil {
return "", err return "", err
} }
//here, we will add the objPods to the objs
for key,podItems := range objPods{
for _,pod := range podItems {
objs[key] = append(objs[key],&pod)
}
}
// Ok, now we have all the objects grouped by types (say, by v1/Pod, v1/Service, etc.), so // Ok, now we have all the objects grouped by types (say, by v1/Pod, v1/Service, etc.), so
// spin through them and print them. Printer is cool since it prints the header only when // spin through them and print them. Printer is cool since it prints the header only when
// an object type changes, so we can just rely on that. Problem is it doesn't seem to keep // an object type changes, so we can just rely on that. Problem is it doesn't seem to keep
@ -596,3 +612,92 @@ func watchPodUntilComplete(timeout time.Duration, info *resource.Info) error {
return err return err
} }
func (c *Client) getRelationPods(infos []*resource.Info)(map[string][]api.Pod){
var objPods = make(map[string][]api.Pod)
for _, value := range infos {
objPods , _ = c.getSelectRelationPod(value,objPods)
}
return objPods
}
func (c *Client) getSelectRelationPod(info *resource.Info,objPods map[string][]api.Pod)(map[string][]api.Pod,error){
if info == nil {
return objPods,nil
}
err := info.Get()
if err != nil {
return objPods, err
}
versioned, err := c.AsVersionedObject(info.Object)
if runtime.IsNotRegisteredError(err) {
return objPods,nil
}
if err != nil {
return objPods,err
}
selector, err := getSelectorFromObject(versioned)
log.Printf("getSelectRelationPod selector: %+v",selector)
if err != nil {
return objPods,err
}
client, _ := c.ClientSet()
pods, err := client.Core().Pods(info.Namespace).List(metav1.ListOptions{
FieldSelector: fields.Everything().String(),
LabelSelector: labels.Set(selector).AsSelector().String(),
})
if err != nil {
return objPods,err
}
for _, pod := range pods.Items {
log.Printf("get select relation pod: %v/%v", pod.Namespace, pod.Name)
if pod.APIVersion == "" {
pod.APIVersion = "v1"
}
if pod.Kind == "" {
pod.Kind = "Pod"
}
vk := pod.GroupVersionKind().Version + "/" + pod.GroupVersionKind().Kind
if !IsFoundPod(objPods[vk], pod) {
objPods[vk] = append(objPods[vk], pod)
}
}
return objPods,nil
}
func IsFoundPod(podItem []api.Pod,pod api.Pod) bool {
for _,value := range podItem {
if (value.Namespace == pod.Namespace) && (value.Name==pod.Name) {
return true
}
}
return false
}
func IsFoundPodInfo(podItem []api.Pod,podInfo *resource.Info) bool {
if podInfo == nil {
return false
}
for _, value := range podItem {
if (value.Namespace == podInfo.Namespace) && (value.Name == podInfo.Name) {
return true
}
}
return false
}

Loading…
Cancel
Save