In pool pod controller we were using pool namespace rather than pod namespace in cleanup which was causing issue in few scenarios. Using pod namespace now instead. Also add unit test for scenario which was failing. Using kubernetes client interface now across instead of kubernetes ClientSet for testing. Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
58 lines
2.0 KiB
Go
58 lines
2.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"time"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/labels"
|
|
"k8s.io/apimachinery/pkg/selection"
|
|
k8sInformers "k8s.io/client-go/informers"
|
|
"k8s.io/client-go/kubernetes"
|
|
metricsapi "k8s.io/metrics/pkg/apis/metrics"
|
|
|
|
v1 "github.com/fission/fission/pkg/apis/core/v1"
|
|
)
|
|
|
|
func GetInformerFactoryByReadyPod(client kubernetes.Interface, namespace string, labelSelector *metav1.LabelSelector) (k8sInformers.SharedInformerFactory, error) {
|
|
informerFactory := k8sInformers.NewSharedInformerFactoryWithOptions(client, 0,
|
|
k8sInformers.WithNamespace(namespace),
|
|
k8sInformers.WithTweakListOptions(func(options *metav1.ListOptions) {
|
|
options.LabelSelector = labels.Set(labelSelector.MatchLabels).AsSelector().String()
|
|
options.FieldSelector = "status.phase=Running"
|
|
}))
|
|
return informerFactory, nil
|
|
}
|
|
|
|
func GetInformerFactoryByExecutor(client kubernetes.Interface, executorType v1.ExecutorType, defaultResync time.Duration) (k8sInformers.SharedInformerFactory, error) {
|
|
executorLabel, err := labels.NewRequirement(v1.EXECUTOR_TYPE, selection.DoubleEquals, []string{string(executorType)})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
labelSelector := labels.NewSelector()
|
|
labelSelector.Add(*executorLabel)
|
|
informerFactory := k8sInformers.NewSharedInformerFactoryWithOptions(client, defaultResync,
|
|
k8sInformers.WithTweakListOptions(func(options *metav1.ListOptions) {
|
|
options.LabelSelector = labelSelector.String()
|
|
}))
|
|
return informerFactory, nil
|
|
}
|
|
|
|
func SupportedMetricsAPIVersionAvailable(discoveredAPIGroups *metav1.APIGroupList) bool {
|
|
var supportedMetricsAPIVersions = []string{
|
|
"v1beta1",
|
|
}
|
|
for _, discoveredAPIGroup := range discoveredAPIGroups.Groups {
|
|
if discoveredAPIGroup.Name != metricsapi.GroupName {
|
|
continue
|
|
}
|
|
for _, version := range discoveredAPIGroup.Versions {
|
|
for _, supportedVersion := range supportedMetricsAPIVersions {
|
|
if version.Version == supportedVersion {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|