From d7d9de523eb2db137711f62ba80cbaeaf643bfe7 Mon Sep 17 00:00:00 2001 From: Jeremy Scott <js185692@ncr.com> Date: Thu, 25 Apr 2024 13:47:29 +0100 Subject: [PATCH] Watch for helper pod manifest updates --- deploy/local-path-storage.yaml | 2 ++ main.go | 1 + provisioner.go | 26 ++++++++++++++++++++++++++ util.go | 4 ++-- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/deploy/local-path-storage.yaml b/deploy/local-path-storage.yaml index c6527a74..cfae8b58 100644 --- a/deploy/local-path-storage.yaml +++ b/deploy/local-path-storage.yaml @@ -104,6 +104,8 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + - name: CONFIG_MOUNT_PATH + value: "/etc/config/" volumes: - name: config-volume configMap: diff --git a/main.go b/main.go index 728cf0df..cddd4097 100644 --- a/main.go +++ b/main.go @@ -48,6 +48,7 @@ var ( DefaultProvisioningRetryCount = pvController.DefaultFailedProvisionThreshold FlagDeletionRetryCount = "deletion-retry-count" DefaultDeletionRetryCount = pvController.DefaultFailedDeleteThreshold + EnvConfigMountPath = "CONFIG_MOUNT_PATH" ) func cmdNotFound(c *cli.Context, command string) { diff --git a/provisioner.go b/provisioner.go index 797df703..e1248532 100644 --- a/provisioner.go +++ b/provisioner.go @@ -169,6 +169,29 @@ func (p *LocalPathProvisioner) refreshConfig() error { return err } +func (p *LocalPathProvisioner) refreshHelperPod() error { + p.configMutex.Lock() + defer p.configMutex.Unlock() + + helperPodFile, envExists := os.LookupEnv(EnvConfigMountPath) + if !envExists { + return nil + } + + helperPodFile = filepath.Join(helperPodFile, DefaultHelperPodFile) + newHelperPod, err := loadFile(helperPodFile) + if err != nil { + return err + } + + p.helperPod, err = loadHelperPodFile(newHelperPod) + if err != nil { + return err + } + + return nil +} + func (p *LocalPathProvisioner) watchAndRefreshConfig() { go func() { ticker := time.NewTicker(ConfigFileCheckInterval) @@ -179,6 +202,9 @@ func (p *LocalPathProvisioner) watchAndRefreshConfig() { if err := p.refreshConfig(); err != nil { logrus.Errorf("failed to load the new config file: %v", err) } + if err := p.refreshHelperPod(); err != nil { + logrus.Errorf("failed to load the new helper pod manifest: %v", err) + } case <-p.ctx.Done(): logrus.Infof("stop watching config file") return diff --git a/util.go b/util.go index 0a0b5415..d1301c92 100644 --- a/util.go +++ b/util.go @@ -3,7 +3,7 @@ package main import ( "encoding/json" "fmt" - "io/ioutil" + "io" "os" v1 "k8s.io/api/core/v1" @@ -16,7 +16,7 @@ func loadFile(filepath string) (string, error) { return "", err } defer f.Close() - helperPodYaml, err := ioutil.ReadAll(f) + helperPodYaml, err := io.ReadAll(f) if err != nil { return "", err } -- GitLab