diff --git a/README.md b/README.md index 74195fc..0429b5e 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ spec: | `SECRETS` | A comma-separated list of `Secrets` namespaced names (`ns1/sec,ns2/sec`) | - | | `CONFIGMAPS_SELECTOR` | A label selector to match `ConfigMaps` (`foo=bar`) | - | | `SECRETS_SELECTOR` | A label selector to match `Secrets` (`foo=bar`) | - | +| `IGNORE_NOT_FOUND` | Specifies when not found errors should be ignored | `false` | # Contributing diff --git a/main.go b/main.go index 8e5e39a..18f1cb1 100644 --- a/main.go +++ b/main.go @@ -22,6 +22,7 @@ import ( "path" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" @@ -47,12 +48,18 @@ func main() { for _, nn := range opts.ConfigMaps { cm, err := client.ConfigMaps(nn.Namespace).Get(ctx, nn.Name, metav1.GetOptions{}) if err != nil { + if errors.IsNotFound(err) && opts.IgnoreNotFound { + continue + } log.Fatalln("failed to get ConfigMap:", err) } configMaps = append(configMaps, *cm) } for _, nn := range opts.Secrets { sec, err := client.Secrets(nn.Namespace).Get(ctx, nn.Name, metav1.GetOptions{}) + if errors.IsNotFound(err) && opts.IgnoreNotFound { + continue + } if err != nil { log.Fatalln("failed to get Secret:", err) } diff --git a/options/options.go b/options/options.go index 2a0f96f..5e870cc 100644 --- a/options/options.go +++ b/options/options.go @@ -30,6 +30,7 @@ type Options struct { DefaultMode os.FileMode Dir string + IgnoreNotFound bool ConfigMaps []types.NamespacedName Secrets []types.NamespacedName ConfigMapsSelector string @@ -46,6 +47,11 @@ func NewFromEnv() *Options { } else { opts.Dir = "/tmp" } + if v, ok := os.LookupEnv("IGNORE_NOT_FOUND"); ok { + opts.IgnoreNotFound, _ = strconv.ParseBool(v) + } else { + opts.IgnoreNotFound = false + } if v, ok := os.LookupEnv("CONFIGMAPS"); ok { opts.ConfigMaps = parseNamespacedNames(v) }