[Federation]Fix panic: index out of range

When the number of clusterStatusNew's Conditions is different from
the number of clusterStatusOld's Conditions, clustercontroller
will panic. We should check it before comparing.
This commit is contained in:
FengyunPan 2017-04-16 19:40:16 +08:00
parent f05ce1e8f1
commit 8886574a67

View File

@ -192,6 +192,9 @@ func (cc *ClusterController) UpdateClusterStatus() error {
} else { } else {
hasTransition := false hasTransition := false
if len(clusterStatusNew.Conditions) != len(clusterStatusOld.Conditions) {
hasTransition = true
} else {
for i := 0; i < len(clusterStatusNew.Conditions); i++ { for i := 0; i < len(clusterStatusNew.Conditions); i++ {
if !(strings.EqualFold(string(clusterStatusNew.Conditions[i].Type), string(clusterStatusOld.Conditions[i].Type)) && if !(strings.EqualFold(string(clusterStatusNew.Conditions[i].Type), string(clusterStatusOld.Conditions[i].Type)) &&
strings.EqualFold(string(clusterStatusNew.Conditions[i].Status), string(clusterStatusOld.Conditions[i].Status))) { strings.EqualFold(string(clusterStatusNew.Conditions[i].Status), string(clusterStatusOld.Conditions[i].Status))) {
@ -199,6 +202,8 @@ func (cc *ClusterController) UpdateClusterStatus() error {
break break
} }
} }
}
if !hasTransition { if !hasTransition {
for j := 0; j < len(clusterStatusNew.Conditions); j++ { for j := 0; j < len(clusterStatusNew.Conditions); j++ {
clusterStatusNew.Conditions[j].LastTransitionTime = clusterStatusOld.Conditions[j].LastTransitionTime clusterStatusNew.Conditions[j].LastTransitionTime = clusterStatusOld.Conditions[j].LastTransitionTime
@ -207,7 +212,7 @@ func (cc *ClusterController) UpdateClusterStatus() error {
} }
clusterClient, found := cc.clusterKubeClientMap[cluster.Name] clusterClient, found := cc.clusterKubeClientMap[cluster.Name]
if !found { if !found {
glog.Warningf("Failed to client for cluster %s", cluster.Name) glog.Warningf("Failed to get client for cluster %s", cluster.Name)
continue continue
} }