@@ -111,7 +111,7 @@ func removeHeapsterImage(fm kubeFramework, zone string) error {
111
111
} else {
112
112
glog .V (2 ).Infof ("Heapster image removed." )
113
113
}
114
- if nodes , err := fm .GetNodes (); err == nil {
114
+ if nodes , err := fm .GetNodeNames (); err == nil {
115
115
for _ , node := range nodes {
116
116
host := strings .Split (node , "." )[0 ]
117
117
cleanupRemoteHost (host , zone )
@@ -168,7 +168,7 @@ func buildAndPushDockerImages(fm kubeFramework, zone string) error {
168
168
if * avoidBuild {
169
169
return nil
170
170
}
171
- nodes , err := fm .GetNodes ()
171
+ nodes , err := fm .GetNodeNames ()
172
172
if err != nil {
173
173
return err
174
174
}
@@ -247,7 +247,7 @@ func runMetricExportTest(fm kubeFramework, svc *kube_api.Service) error {
247
247
}
248
248
glog .V (0 ).Infof ("Expected pods: %v" , expectedPods )
249
249
250
- expectedNodes , err := fm .GetNodes ()
250
+ expectedNodes , err := fm .GetNodeNames ()
251
251
if err != nil {
252
252
return err
253
253
}
@@ -530,7 +530,7 @@ func runModelTest(fm kubeFramework, svc *kube_api.Service) error {
530
530
if len (podList ) == 0 {
531
531
return fmt .Errorf ("empty pod list" )
532
532
}
533
- nodeList , err := fm .GetNodes ()
533
+ nodeList , err := fm .GetNodeNames ()
534
534
if err != nil {
535
535
return err
536
536
}
@@ -624,6 +624,14 @@ func runModelTest(fm kubeFramework, svc *kube_api.Service) error {
624
624
return nil
625
625
}
626
626
627
+ const (
628
+ apiPrefix = "apis"
629
+ metricsApiGroupName = "metrics"
630
+ metricsApiVersion = "v1alpha1"
631
+ )
632
+
633
+ var baseMetricsUrl = fmt .Sprintf ("%s/%s/%s" , apiPrefix , metricsApiGroupName , metricsApiVersion )
634
+
627
635
func checkUsage (res kube_v1.ResourceList ) error {
628
636
if _ , found := res [kube_v1 .ResourceCPU ]; ! found {
629
637
return fmt .Errorf ("Cpu not found" )
@@ -635,7 +643,7 @@ func checkUsage(res kube_v1.ResourceList) error {
635
643
}
636
644
637
645
func getPodMetrics (fm kubeFramework , svc * kube_api.Service , pod kube_api.Pod ) (* metrics_api.PodMetrics , error ) {
638
- url := fmt .Sprintf ("apis/metrics/v1alpha1/ namespaces/%s/pods/%s" , pod .Namespace , pod .Name )
646
+ url := fmt .Sprintf ("%s/ namespaces/%s/pods/%s" , baseMetricsUrl , pod .Namespace , pod .Name )
639
647
body , err := getDataFromProxy (fm , svc , url )
640
648
if err != nil {
641
649
return nil , err
@@ -649,18 +657,18 @@ func getPodMetrics(fm kubeFramework, svc *kube_api.Service, pod kube_api.Pod) (*
649
657
}
650
658
651
659
func getAllPodsInNamespaceMetrics (fm kubeFramework , svc * kube_api.Service , namespace string ) (metrics_api.PodMetricsList , error ) {
652
- url := fmt .Sprintf ("apis/metrics/v1alpha1/ namespaces/%s/pods/" , namespace )
660
+ url := fmt .Sprintf ("%s/ namespaces/%s/pods/" , baseMetricsUrl , namespace )
653
661
return getPodMetricsList (fm , svc , url , & labelSelectorEverything )
654
662
}
655
663
656
664
func getAllPodsMetrics (fm kubeFramework , svc * kube_api.Service ) (metrics_api.PodMetricsList , error ) {
657
- url := "apis/metrics/v1alpha1/ pods/"
665
+ url := fmt . Sprintf ( "%s/ pods/", baseMetricsUrl )
658
666
selector := labels .Everything ()
659
667
return getPodMetricsList (fm , svc , url , & selector )
660
668
}
661
669
662
- func getLabelSelectedPodsMetrics (fm kubeFramework , svc * kube_api.Service , namespace string , labelSelector * labels.Selector ) (metrics_api.PodMetricsList , error ) {
663
- url := fmt .Sprintf ("apis/metrics/v1alpha1/ namespaces/%s/pods/" , namespace )
670
+ func getLabelSelectedPodMetrics (fm kubeFramework , svc * kube_api.Service , namespace string , labelSelector * labels.Selector ) (metrics_api.PodMetricsList , error ) {
671
+ url := fmt .Sprintf ("%s/ namespaces/%s/pods/" , baseMetricsUrl , namespace )
664
672
return getPodMetricsList (fm , svc , url , labelSelector )
665
673
}
666
674
@@ -696,7 +704,7 @@ func checkSinglePodMetrics(metrics *metrics_api.PodMetrics, pod *kube_api.Pod) e
696
704
}
697
705
698
706
func getSingleNodeMetrics (fm kubeFramework , svc * kube_api.Service , node string ) (* metrics_api.NodeMetrics , error ) {
699
- url := fmt .Sprintf ("apis/metrics/v1alpha1/ nodes/%s" , node )
707
+ url := fmt .Sprintf ("%s/ nodes/%s" , baseMetricsUrl , node )
700
708
body , err := getDataFromProxy (fm , svc , url )
701
709
if err != nil {
702
710
return nil , err
@@ -709,8 +717,8 @@ func getSingleNodeMetrics(fm kubeFramework, svc *kube_api.Service, node string)
709
717
return & data , nil
710
718
}
711
719
712
- func getNodeMetricsList (fm kubeFramework , svc * kube_api.Service , url string ) (metrics_api.NodeMetricsList , error ) {
713
- body , err := getDataFromProxy (fm , svc , url )
720
+ func getNodeMetricsList (fm kubeFramework , svc * kube_api.Service , url string , labelSelector * labels. Selector ) (metrics_api.NodeMetricsList , error ) {
721
+ body , err := getDataFromProxyWithSelector (fm , svc , url , labelSelector )
714
722
if err != nil {
715
723
return metrics_api.NodeMetricsList {}, err
716
724
}
@@ -722,13 +730,19 @@ func getNodeMetricsList(fm kubeFramework, svc *kube_api.Service, url string) (me
722
730
return data , nil
723
731
}
724
732
733
+ func getLabelSelectedNodeMetrics (fm kubeFramework , svc * kube_api.Service , labelSelector * labels.Selector ) (metrics_api.NodeMetricsList , error ) {
734
+ url := fmt .Sprintf ("%s/nodes" , baseMetricsUrl )
735
+ return getNodeMetricsList (fm , svc , url , labelSelector )
736
+ }
737
+
725
738
func getAllNodeMetrics (fm kubeFramework , svc * kube_api.Service ) (metrics_api.NodeMetricsList , error ) {
726
- url := "apis/metrics/v1alpha1/nodes/"
727
- return getNodeMetricsList (fm , svc , url )
739
+ url := fmt .Sprintf ("%s/nodes" , baseMetricsUrl )
740
+ selector := labels .Everything ()
741
+ return getNodeMetricsList (fm , svc , url , & selector )
728
742
}
729
743
730
744
func runSingleNodeMetricsApiTest (fm kubeFramework , svc * kube_api.Service ) error {
731
- nodeList , err := fm .GetNodes ()
745
+ nodeList , err := fm .GetNodeNames ()
732
746
if err != nil {
733
747
return err
734
748
}
@@ -751,11 +765,55 @@ func runSingleNodeMetricsApiTest(fm kubeFramework, svc *kube_api.Service) error
751
765
return nil
752
766
}
753
767
754
- func runAllNodesMetricsApiTest (fm kubeFramework , svc * kube_api.Service ) error {
768
+ func runLabelSelectorNodeMetricsApiTest (fm kubeFramework , svc * kube_api.Service ) error {
755
769
nodeList , err := fm .GetNodes ()
756
770
if err != nil {
757
771
return err
758
772
}
773
+ if len (nodeList .Items ) == 0 {
774
+ return fmt .Errorf ("empty node list" )
775
+ }
776
+ labelMap := make (map [string ]map [string ]kube_api.Node )
777
+ for _ , n := range nodeList .Items {
778
+ for label , value := range n .Labels {
779
+ selector := label + "=" + value
780
+ if _ , found := labelMap [selector ]; ! found {
781
+ labelMap [selector ] = make (map [string ]kube_api.Node )
782
+ }
783
+ labelMap [selector ][n.Name ] = n
784
+ }
785
+ }
786
+
787
+ for selector , nodesWithLabel := range labelMap {
788
+ sel , err := labels .Parse (selector )
789
+ if err != nil {
790
+ return err
791
+ }
792
+ metrics , err := getLabelSelectedNodeMetrics (fm , svc , & sel )
793
+ if err != nil {
794
+ return err
795
+ }
796
+ if len (metrics .Items ) != len (nodesWithLabel ) {
797
+ return fmt .Errorf ("Wrong number of label selected node metrics: expected %v, got %v" , len (nodesWithLabel ), len (metrics .Items ))
798
+ }
799
+ for _ , nodeMetric := range metrics .Items {
800
+ node := nodesWithLabel [nodeMetric .Name ]
801
+ if nodeMetric .Name != node .Name {
802
+ return fmt .Errorf ("Wrong node name: expected %v, got %v" , node .Name , nodeMetric .Name )
803
+ }
804
+ if err := checkUsage (nodeMetric .Usage ); err != nil {
805
+ return err
806
+ }
807
+ }
808
+ }
809
+ return nil
810
+ }
811
+
812
+ func runAllNodesMetricsApiTest (fm kubeFramework , svc * kube_api.Service ) error {
813
+ nodeList , err := fm .GetNodeNames ()
814
+ if err != nil {
815
+ return err
816
+ }
759
817
if len (nodeList ) == 0 {
760
818
return fmt .Errorf ("empty node list" )
761
819
}
@@ -868,7 +926,7 @@ func runAllPodsMetricsApiTest(fm kubeFramework, svc *kube_api.Service) error {
868
926
return nil
869
927
}
870
928
871
- func runLabelSelectorMetricsApiTest (fm kubeFramework , svc * kube_api.Service ) error {
929
+ func runLabelSelectorPodMetricsApiTest (fm kubeFramework , svc * kube_api.Service ) error {
872
930
podList , err := fm .GetAllRunningPods ()
873
931
if err != nil {
874
932
return err
@@ -897,7 +955,7 @@ func runLabelSelectorMetricsApiTest(fm kubeFramework, svc *kube_api.Service) err
897
955
if err != nil {
898
956
return err
899
957
}
900
- metrics , err := getLabelSelectedPodsMetrics (fm , svc , ns , & sel )
958
+ metrics , err := getLabelSelectedPodMetrics (fm , svc , ns , & sel )
901
959
if err != nil {
902
960
return err
903
961
}
@@ -994,12 +1052,12 @@ func apiTest(kubeVersion string, zone string) error {
994
1052
return err
995
1053
},
996
1054
func () error {
997
- glog .V (2 ).Infof ("Metrics API test - label selector" )
998
- err := runLabelSelectorMetricsApiTest (fm , svc )
1055
+ glog .V (2 ).Infof ("Metrics API test - label selector for pods " )
1056
+ err := runLabelSelectorPodMetricsApiTest (fm , svc )
999
1057
if err == nil {
1000
- glog .V (2 ).Infof ("Metrics API test - label selector: OK" )
1058
+ glog .V (2 ).Infof ("Metrics API test - label selector for pods : OK" )
1001
1059
} else {
1002
- glog .V (2 ).Infof ("Metrics API test - label selector: error: %v" , err )
1060
+ glog .V (2 ).Infof ("Metrics API test - label selector for pods : error: %v" , err )
1003
1061
}
1004
1062
return err
1005
1063
},
@@ -1013,6 +1071,16 @@ func apiTest(kubeVersion string, zone string) error {
1013
1071
}
1014
1072
return err
1015
1073
},
1074
+ func () error {
1075
+ glog .V (2 ).Infof ("Metrics API test - label selector for nodes" )
1076
+ err := runLabelSelectorNodeMetricsApiTest (fm , svc )
1077
+ if err == nil {
1078
+ glog .V (2 ).Infof ("Metrics API test - label selector for nodes: OK" )
1079
+ } else {
1080
+ glog .V (2 ).Infof ("Metrics API test - label selector for nodes: error: %v" , err )
1081
+ }
1082
+ return err
1083
+ },
1016
1084
func () error {
1017
1085
glog .V (2 ).Infof ("Metrics API test - all nodes" )
1018
1086
err := runAllNodesMetricsApiTest (fm , svc )
0 commit comments