Allow namespace configuration for different CRD resources in Fission (#2539)
* Allow multiple namespaces for builder manager * Enable multiple namespaces for executor informers * Added missing context * helm chart support for multiple namespaces * Directly consume map type from GetInformerForNamespaces fn * Optimize function resolver by choosing namespace-specific informer * helm chart support for multiple namespaces * consider default namespace and move duplicate code to helm template * Improve documentation for fission namespace values Signed-off-by: Sanket Sudake <sanketsudake@gmail.com> Co-authored-by: shubham bansal <shubhambansaliimtgn@gmail.com>
This commit is contained in:
co-authored by
shubham bansal
parent
facd14de90
commit
827baea974
@@ -1,6 +1,8 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -8,11 +10,65 @@ import (
|
||||
"k8s.io/apimachinery/pkg/selection"
|
||||
k8sInformers "k8s.io/client-go/informers"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/tools/cache"
|
||||
metricsapi "k8s.io/metrics/pkg/apis/metrics"
|
||||
|
||||
v1 "github.com/fission/fission/pkg/apis/core/v1"
|
||||
|
||||
fv1 "github.com/fission/fission/pkg/apis/core/v1"
|
||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||
)
|
||||
|
||||
const additionalNamespaces string = "FISSION_RESOURCE_NAMESPACES"
|
||||
|
||||
func GetNamespaces() []string {
|
||||
envValue := os.Getenv(additionalNamespaces)
|
||||
if len(envValue) == 0 {
|
||||
return []string{
|
||||
metav1.NamespaceAll,
|
||||
}
|
||||
}
|
||||
|
||||
informerNS := make([]string, 0)
|
||||
lstNamespaces := strings.Split(envValue, ",")
|
||||
for _, namespace := range lstNamespaces {
|
||||
//check to handle string with additional comma at the end of string. eg- ns1,ns2,
|
||||
if namespace != "" {
|
||||
informerNS = append(informerNS, namespace)
|
||||
}
|
||||
}
|
||||
return informerNS
|
||||
}
|
||||
|
||||
func GetInformersForNamespaces(client versioned.Interface, defaultSync time.Duration, kind string) map[string]cache.SharedIndexInformer {
|
||||
informers := make(map[string]cache.SharedIndexInformer)
|
||||
for _, ns := range GetNamespaces() {
|
||||
factory := genInformer.NewFilteredSharedInformerFactory(client, defaultSync, ns, nil).Core().V1()
|
||||
switch kind {
|
||||
case fv1.CanaryConfigResource:
|
||||
informers[ns] = factory.CanaryConfigs().Informer()
|
||||
case fv1.EnvironmentResource:
|
||||
informers[ns] = factory.Environments().Informer()
|
||||
case fv1.FunctionResource:
|
||||
informers[ns] = factory.Functions().Informer()
|
||||
case fv1.HttpTriggerResource:
|
||||
informers[ns] = factory.HTTPTriggers().Informer()
|
||||
case fv1.KubernetesWatchResource:
|
||||
informers[ns] = factory.KubernetesWatchTriggers().Informer()
|
||||
case fv1.MessageQueueResource:
|
||||
informers[ns] = factory.MessageQueueTriggers().Informer()
|
||||
case fv1.PackagesResource:
|
||||
informers[ns] = factory.Packages().Informer()
|
||||
case fv1.TimeTriggerResource:
|
||||
informers[ns] = factory.TimeTriggers().Informer()
|
||||
default:
|
||||
panic("Unknown kind: " + kind)
|
||||
}
|
||||
}
|
||||
return informers
|
||||
}
|
||||
|
||||
func GetInformerFactoryByReadyPod(client kubernetes.Interface, namespace string, labelSelector *metav1.LabelSelector) (k8sInformers.SharedInformerFactory, error) {
|
||||
informerFactory := k8sInformers.NewSharedInformerFactoryWithOptions(client, 0,
|
||||
k8sInformers.WithNamespace(namespace),
|
||||
|
||||
Reference in New Issue
Block a user