diff --git a/deploy/local-path-storage.yaml b/deploy/local-path-storage.yaml index c6527a74684287a414b0ed73ba65fa700aed91fa..cfae8b58cd6777facd09f23035b1dffd46460df6 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 728cf0df192fc9bf00c7b6e277b5e55160bb42e0..cddd4097c3f6be786403c44d1587b095788ffef3 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 797df703c5f07c7db1c557470846955e6bfd526c..e12485325f1b7bd44726bacefb200ffb690ad471 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 0a0b5415d1547a3a4060846dae8fbeb324a38d45..d1301c9223531e8e5c6864afab29db13c8d3acac 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 }