diff --git a/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml b/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml index 770f33c2..8075763e 100644 --- a/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml +++ b/deployments/kubernetes/chart/reloader/templates/clusterrole.yaml @@ -16,8 +16,12 @@ rules: - apiGroups: - "" resources: +{{- if .Values.reloader.ignoreSecrets }}{{- else }} - secrets +{{- end }} +{{- if .Values.reloader.ignoreConfigMaps }}{{- else }} - configmaps +{{- end }} verbs: - list - get diff --git a/deployments/kubernetes/chart/reloader/templates/deployment.yaml b/deployments/kubernetes/chart/reloader/templates/deployment.yaml index 9f075a51..c52fe526 100644 --- a/deployments/kubernetes/chart/reloader/templates/deployment.yaml +++ b/deployments/kubernetes/chart/reloader/templates/deployment.yaml @@ -101,6 +101,12 @@ spec: - "--auto-annotation" - "{{ .Values.reloader.custom_annotations.auto }}" {{- end }} + {{- if eq .Values.reloader.ignoreSecrets true }} + - "--resources-to-ignore=secrets" + {{- end }} + {{- if eq .Values.reloader.ignoreConfigMaps true }} + - "--resources-to-ignore=configMaps" + {{- end }} {{- end }} {{- if .Values.reloader.deployment.resources }} resources: diff --git a/deployments/kubernetes/chart/reloader/templates/role.yaml b/deployments/kubernetes/chart/reloader/templates/role.yaml index dd5dac54..90a348f6 100644 --- a/deployments/kubernetes/chart/reloader/templates/role.yaml +++ b/deployments/kubernetes/chart/reloader/templates/role.yaml @@ -16,8 +16,12 @@ rules: - apiGroups: - "" resources: +{{- if .Values.reloader.ignoreSecrets }}{{- else }} - secrets +{{- end }} +{{- if .Values.reloader.ignoreConfigMaps }}{{- else }} - configmaps +{{- end }} verbs: - list - get diff --git a/deployments/kubernetes/chart/reloader/values.yaml b/deployments/kubernetes/chart/reloader/values.yaml index 5a92f24e..65c40a32 100644 --- a/deployments/kubernetes/chart/reloader/values.yaml +++ b/deployments/kubernetes/chart/reloader/values.yaml @@ -4,6 +4,8 @@ kubernetes: host: https://kubernetes.default reloader: + ignoreSecrets: false + ignoreConfigMaps: false watchGlobally: true # Set to true if you have a pod security policy that enforces readOnlyRootFilesystem readOnlyRootFileSystem: false diff --git a/deployments/kubernetes/templates/chart/values.yaml.tmpl b/deployments/kubernetes/templates/chart/values.yaml.tmpl index 9cdbd40e..53571f45 100644 --- a/deployments/kubernetes/templates/chart/values.yaml.tmpl +++ b/deployments/kubernetes/templates/chart/values.yaml.tmpl @@ -4,6 +4,8 @@ kubernetes: host: https://kubernetes.default reloader: + ignoreSecrets: false + ignoreConfigMaps: false watchGlobally: true # Set to true if you have a pod security policy that enforces readOnlyRootFilesystem readOnlyRootFileSystem: false diff --git a/internal/pkg/cmd/reloader.go b/internal/pkg/cmd/reloader.go index 70750527..426b5e0d 100644 --- a/internal/pkg/cmd/reloader.go +++ b/internal/pkg/cmd/reloader.go @@ -7,6 +7,7 @@ import ( "github.com/spf13/cobra" "github.com/stakater/Reloader/internal/pkg/controller" "github.com/stakater/Reloader/internal/pkg/options" + "github.com/stakater/Reloader/internal/pkg/util" "github.com/stakater/Reloader/pkg/kube" "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -23,11 +24,15 @@ func NewReloaderCommand() *cobra.Command { cmd.PersistentFlags().StringVar(&options.ConfigmapUpdateOnChangeAnnotation, "configmap-annotation", "configmap.reloader.stakater.com/reload", "annotation to detect changes in configmaps") cmd.PersistentFlags().StringVar(&options.SecretUpdateOnChangeAnnotation, "secret-annotation", "secret.reloader.stakater.com/reload", "annotation to detect changes in secrets") cmd.PersistentFlags().StringVar(&options.ReloaderAutoAnnotation, "auto-annotation", "reloader.stakater.com/auto", "annotation to detect changes in secrets") + cmd.PersistentFlags().StringSlice("resources-to-ignore", []string{}, "list of resources to ignore (valid options 'configMaps' or 'secrets')") return cmd } func startReloader(cmd *cobra.Command, args []string) { + var ignoreList util.List + var err error + logrus.Info("Starting Reloader") currentNamespace := os.Getenv("KUBERNETES_NAMESPACE") if len(currentNamespace) == 0 { @@ -41,7 +46,26 @@ func startReloader(cmd *cobra.Command, args []string) { logrus.Fatal(err) } + ignoreList, err = cmd.Flags().GetStringSlice("resources-to-ignore") + if err != nil { + logrus.Fatal(err) + } + + for _, v := range ignoreList { + if v != "configMaps" && v != "secrets" { + logrus.Fatalf("'resources-to-ignore' only accepts 'configMaps' or 'secrets', not '%s'", v) + } + } + + if len(ignoreList) > 1 { + logrus.Fatal("'resources-to-ignore' only accepts 'configMaps' or 'secrets', not both") + } + for k := range kube.ResourceMap { + if ignoreList.Contains(k) { + continue + } + c, err := controller.NewController(clientset, k, currentNamespace) if err != nil { logrus.Fatalf("%s", err) diff --git a/internal/pkg/util/util.go b/internal/pkg/util/util.go index c1e516a3..e0153f51 100644 --- a/internal/pkg/util/util.go +++ b/internal/pkg/util/util.go @@ -46,3 +46,14 @@ func GetSHAfromSecret(data map[string][]byte) string { sort.Strings(values) return crypto.GenerateSHA(strings.Join(values, ";")) } + +type List []string + +func (l *List) Contains(s string) bool { + for _, v := range *l { + if v == s { + return true + } + } + return false +}