diff --git a/charts/function-mesh-operator/templates/controller-manager-configmap.yaml b/charts/function-mesh-operator/templates/controller-manager-configmap.yaml index 644676801..abd1d4a29 100644 --- a/charts/function-mesh-operator/templates/controller-manager-configmap.yaml +++ b/charts/function-mesh-operator/templates/controller-manager-configmap.yaml @@ -14,6 +14,14 @@ data: {{- if .Values.controllerManager.runnerImages }} runnerImages: {{ toYaml .Values.controllerManager.runnerImages | indent 6 }} + {{- end }} + {{- if .Values.controllerManager.runnerImagePullSecrets }} + runnerImagePullSecrets: +{{ toYaml .Values.controllerManager.runnerImagePullSecrets | indent 6 }} + {{- end }} + {{- if .Values.controllerManager.runnerImagePullPolicy }} + runnerImagePullPolicy: +{{ toYaml .Values.controllerManager.runnerImagePullPolicy | indent 6 }} {{- end }} {{- if .Values.controllerManager.resourceLabels }} resourceLabels: diff --git a/controllers/spec/common.go b/controllers/spec/common.go index f124a9ec0..5c560ffaa 100644 --- a/controllers/spec/common.go +++ b/controllers/spec/common.go @@ -1923,6 +1923,14 @@ func generateAnnotations(customAnnotations ...map[string]string) map[string]stri return annotations } +func getFunctionRunnerImagePullSecret() []map[string]string { + return Configs.RunnerImagePullSecrets +} + +func getFunctionRunnerImagePullPolicy() corev1.PullPolicy { + return Configs.RunnerImagePullPolicy +} + func getFunctionRunnerImage(spec *v1alpha1.FunctionSpec) string { runtime := &spec.Runtime img := spec.Image @@ -1940,6 +1948,14 @@ func getFunctionRunnerImage(spec *v1alpha1.FunctionSpec) string { return DefaultRunnerImage } +func getSinkRunnerImagePullSecret() []map[string]string { + return Configs.RunnerImagePullSecrets +} + +func getSinkRunnerImagePullPolicy() corev1.PullPolicy { + return Configs.RunnerImagePullPolicy +} + func getSinkRunnerImage(spec *v1alpha1.SinkSpec) string { img := spec.Image if img != "" { @@ -1952,6 +1968,14 @@ func getSinkRunnerImage(spec *v1alpha1.SinkSpec) string { return DefaultRunnerImage } +func getSourceRunnerImagePullSecret() []map[string]string { + return Configs.RunnerImagePullSecrets +} + +func getSourceRunnerImagePullPolicy() corev1.PullPolicy { + return Configs.RunnerImagePullPolicy +} + func getSourceRunnerImage(spec *v1alpha1.SourceSpec) string { img := spec.Image if img != "" { diff --git a/controllers/spec/controller_configs.go b/controllers/spec/controller_configs.go index 2ee4edbd9..05c703250 100644 --- a/controllers/spec/controller_configs.go +++ b/controllers/spec/controller_configs.go @@ -20,6 +20,7 @@ package spec import ( "os" + corev1 "k8s.io/api/core/v1" "sigs.k8s.io/yaml" ) @@ -31,9 +32,11 @@ type RunnerImages struct { } type ControllerConfigs struct { - RunnerImages RunnerImages `yaml:"runnerImages,omitempty"` - ResourceLabels map[string]string `yaml:"resourceLabels,omitempty"` - ResourceAnnotations map[string]string `yaml:"resourceAnnotations,omitempty"` + RunnerImages RunnerImages `yaml:"runnerImages,omitempty"` + RunnerImagePullSecrets []map[string]string `yaml:"runnerImagePullSecrets,omitempty"` + RunnerImagePullPolicy corev1.PullPolicy `yaml:"imagePullPolicy,omitempty"` + ResourceLabels map[string]string `yaml:"resourceLabels,omitempty"` + ResourceAnnotations map[string]string `yaml:"resourceAnnotations,omitempty"` } var Configs = DefaultConfigs() diff --git a/controllers/spec/function.go b/controllers/spec/function.go index 222ca002b..738dd302d 100644 --- a/controllers/spec/function.go +++ b/controllers/spec/function.go @@ -54,6 +54,16 @@ func MakeFunctionService(function *v1alpha1.Function) *corev1.Service { func MakeFunctionStatefulSet(ctx context.Context, cli client.Client, function *v1alpha1.Function) (*appsv1.StatefulSet, error) { objectMeta := MakeFunctionObjectMeta(function) + + runnerImagePullSecrets := getFunctionRunnerImagePullSecret() + for _, mapSecret := range runnerImagePullSecrets { + if value, ok := mapSecret["name"]; ok { + function.Spec.Pod.ImagePullSecrets = append(function.Spec.Pod.ImagePullSecrets, corev1.LocalObjectReference{Name: value}) + } + } + runnerImagePullPolicy := getFunctionRunnerImagePullPolicy() + function.Spec.ImagePullPolicy = runnerImagePullPolicy + labels := makeFunctionLabels(function) statefulSet := MakeStatefulSet(objectMeta, function.Spec.Replicas, function.Spec.DownloaderImage, makeFunctionContainer(function), makeFunctionVolumes(function, function.Spec.Pulsar.AuthConfig), labels, function.Spec.Pod, diff --git a/controllers/spec/sink.go b/controllers/spec/sink.go index f9d3adbb0..81e37d5e5 100644 --- a/controllers/spec/sink.go +++ b/controllers/spec/sink.go @@ -51,6 +51,16 @@ func MakeSinkService(sink *v1alpha1.Sink) *corev1.Service { func MakeSinkStatefulSet(ctx context.Context, cli client.Client, sink *v1alpha1.Sink) (*appsv1.StatefulSet, error) { objectMeta := MakeSinkObjectMeta(sink) + + runnerImagePullSecrets := getSinkRunnerImagePullSecret() + for _, mapSecret := range runnerImagePullSecrets { + if value, ok := mapSecret["name"]; ok { + sink.Spec.Pod.ImagePullSecrets = append(sink.Spec.Pod.ImagePullSecrets, corev1.LocalObjectReference{Name: value}) + } + } + runnerImagePullPolicy := getSinkRunnerImagePullPolicy() + sink.Spec.ImagePullPolicy = runnerImagePullPolicy + statefulSet := MakeStatefulSet(objectMeta, sink.Spec.Replicas, sink.Spec.DownloaderImage, makeSinkContainer(sink), makeSinkVolumes(sink, sink.Spec.Pulsar.AuthConfig), makeSinkLabels(sink), sink.Spec.Pod, sink.Spec.Pulsar.AuthConfig, sink.Spec.Pulsar.TLSConfig, sink.Spec.Pulsar.PulsarConfig, sink.Spec.Pulsar.AuthSecret, sink.Spec.Pulsar.TLSSecret, diff --git a/controllers/spec/source.go b/controllers/spec/source.go index e70e10311..b10e140a5 100644 --- a/controllers/spec/source.go +++ b/controllers/spec/source.go @@ -52,6 +52,16 @@ func MakeSourceService(source *v1alpha1.Source) *corev1.Service { func MakeSourceStatefulSet(ctx context.Context, cli client.Client, source *v1alpha1.Source) (*appsv1.StatefulSet, error) { objectMeta := MakeSourceObjectMeta(source) + + runnerImagePullSecrets := getSourceRunnerImagePullSecret() + for _, mapSecret := range runnerImagePullSecrets { + if value, ok := mapSecret["name"]; ok { + source.Spec.Pod.ImagePullSecrets = append(source.Spec.Pod.ImagePullSecrets, corev1.LocalObjectReference{Name: value}) + } + } + runnerImagePullPolicy := getSourceRunnerImagePullPolicy() + source.Spec.ImagePullPolicy = runnerImagePullPolicy + statefulSet := MakeStatefulSet(objectMeta, source.Spec.Replicas, source.Spec.DownloaderImage, makeSourceContainer(source), makeSourceVolumes(source, source.Spec.Pulsar.AuthConfig), makeSourceLabels(source), source.Spec.Pod, source.Spec.Pulsar.AuthConfig, source.Spec.Pulsar.TLSConfig, source.Spec.Pulsar.PulsarConfig, source.Spec.Pulsar.AuthSecret, source.Spec.Pulsar.TLSSecret,