use EnvFrom for mounting env vars in workflows

This commit is contained in:
rushtehrani
2020-05-13 21:53:33 -07:00
parent fd3dcdec9c
commit 3edbc809de
3 changed files with 12 additions and 30 deletions

View File

@@ -25,6 +25,8 @@ const (
ArtifactRepositoryInsecureKey = "artifactRepositoryS3Insecure" ArtifactRepositoryInsecureKey = "artifactRepositoryS3Insecure"
ArtifactRepositoryAccessKeyValueKey = "artifactRepositoryS3AccessKey" ArtifactRepositoryAccessKeyValueKey = "artifactRepositoryS3AccessKey"
ArtifactRepositorySecretKeyValueKey = "artifactRepositoryS3SecretKey" ArtifactRepositorySecretKeyValueKey = "artifactRepositoryS3SecretKey"
DefaultEnvironmentVariableSecret = "onepanel-default-env"
) )
type Config = rest.Config type Config = rest.Config

View File

@@ -2,7 +2,6 @@ package v1
import ( import (
"bufio" "bufio"
"encoding/base64"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
@@ -32,7 +31,6 @@ import (
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/fields"
_ "k8s.io/client-go/plugin/pkg/client/auth" _ "k8s.io/client-go/plugin/pkg/client/auth"
@@ -144,21 +142,6 @@ func (c *Client) injectAutomatedFields(namespace string, wf *wfv1.Workflow, opts
addSystemUIDParameter(wf) addSystemUIDParameter(wf)
addSecretValsToTemplate := true
secret, err := c.GetSecret(namespace, "onepanel-default-env")
if err != nil {
var statusError *k8serrors.StatusError
if errors.As(err, &statusError) {
if statusError.ErrStatus.Reason == "NotFound" {
addSecretValsToTemplate = false
} else {
return err
}
} else {
return err
}
}
// Create dev/shm volume // Create dev/shm volume
wf.Spec.Volumes = append(wf.Spec.Volumes, corev1.Volume{ wf.Spec.Volumes = append(wf.Spec.Volumes, corev1.Volume{
Name: "sys-dshm", Name: "sys-dshm",
@@ -196,24 +179,21 @@ func (c *Client) injectAutomatedFields(namespace string, wf *wfv1.Workflow, opts
}, },
}) })
if !addSecretValsToTemplate {
continue
}
//Generate ENV vars from secret, if there is a container present in the workflow //Generate ENV vars from secret, if there is a container present in the workflow
//Get template ENV vars, avoid over-writing them with secret values //Get template ENV vars, avoid over-writing them with secret values
for key, value := range secret.Data { template.Container.EnvFrom = append(template.Container.EnvFrom, corev1.EnvFromSource{
decodedValue, errDecode := base64.StdEncoding.DecodeString(value) SecretRef: &corev1.SecretEnvSource{
if errDecode != nil { LocalObjectReference: corev1.LocalObjectReference{
return errDecode Name: DefaultEnvironmentVariableSecret,
} },
addEnvToTemplate(&template, key, string(decodedValue)) Optional: ptr.Bool(true),
} },
})
sysConfig, sysErr := c.GetSystemConfig() sysConfig, sysErr := c.GetSystemConfig()
if sysErr != nil { if sysErr != nil {
return sysErr return sysErr
} }
addEnvToTemplate(&template, "ONEPANEL_API_URL", sysConfig["ONEPANEL_API_URL"]) addEnvToTemplate(&template, "ONEPANEL_API_URL", sysConfig["ONEPANEL_API_URL"])
addEnvToTemplate(&template, "ONEPANEL_FQDN", sysConfig["ONEPANEL_FQDN"]) addEnvToTemplate(&template, "ONEPANEL_FQDN", sysConfig["ONEPANEL_FQDN"])
addEnvToTemplate(&template, "ONEPANEL_DOMAIN", sysConfig["ONEPANEL_DOMAIN"]) addEnvToTemplate(&template, "ONEPANEL_DOMAIN", sysConfig["ONEPANEL_DOMAIN"])

View File

@@ -159,7 +159,7 @@ func createStatefulSetManifest(workspaceSpec *WorkspaceSpec, config map[string]s
workspaceSpec.Containers[i].EnvFrom = append(workspaceSpec.Containers[i].EnvFrom, corev1.EnvFromSource{ workspaceSpec.Containers[i].EnvFrom = append(workspaceSpec.Containers[i].EnvFrom, corev1.EnvFromSource{
SecretRef: &corev1.SecretEnvSource{ SecretRef: &corev1.SecretEnvSource{
LocalObjectReference: corev1.LocalObjectReference{ LocalObjectReference: corev1.LocalObjectReference{
Name: "onepanel-default-env", Name: DefaultEnvironmentVariableSecret,
}, },
Optional: ptr.Bool(true), Optional: ptr.Bool(true),
}, },