summaryrefslogtreecommitdiff
path: root/pkg/specgen
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2020-08-18 09:17:41 -0400
committerDaniel J Walsh <dwalsh@redhat.com>2020-08-28 06:06:08 -0400
commit60fe96118fcbf5beef4f58abd3dbe9dcb6cc49d0 (patch)
treed7e2c7b6c4b45a07de0b1d2554f99f75182e9f99 /pkg/specgen
parent061c93f70101026d79cca6e75ac0c565e1fa99ec (diff)
downloadpodman-60fe96118fcbf5beef4f58abd3dbe9dcb6cc49d0.tar.gz
podman-60fe96118fcbf5beef4f58abd3dbe9dcb6cc49d0.tar.bz2
podman-60fe96118fcbf5beef4f58abd3dbe9dcb6cc49d0.zip
Use environment from containers.conf
podman needs to use the environment settings in containers.conf when setting up the containers. Also host environment variables should be relative to server side not the client. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
Diffstat (limited to 'pkg/specgen')
-rw-r--r--pkg/specgen/generate/container.go40
-rw-r--r--pkg/specgen/specgen.go7
2 files changed, 43 insertions, 4 deletions
diff --git a/pkg/specgen/generate/container.go b/pkg/specgen/generate/container.go
index 53d160442..147ebd61b 100644
--- a/pkg/specgen/generate/container.go
+++ b/pkg/specgen/generate/container.go
@@ -2,6 +2,7 @@ package generate
import (
"context"
+ "os"
"github.com/containers/image/v5/manifest"
"github.com/containers/podman/v2/libpod"
@@ -62,14 +63,24 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
if err != nil {
return nil, err
}
- // Get Default Environment
- defaultEnvs, err := envLib.ParseSlice(rtc.Containers.Env)
+ // First transform the os env into a map. We need it for the labels later in
+ // any case.
+ osEnv, err := envLib.ParseSlice(os.Environ())
if err != nil {
- return nil, errors.Wrap(err, "Env fields in containers.conf failed to parse")
+ return nil, errors.Wrap(err, "error parsing host environment variables")
}
+ // Get Default Environment from containers.conf
+ defaultEnvs, err := envLib.ParseSlice(rtc.GetDefaultEnv())
+ if err != nil {
+ return nil, errors.Wrap(err, "error parsing fields in containers.conf")
+ }
+ if defaultEnvs["containers"] == "" {
+ defaultEnvs["containers"] = "podman"
+ }
var envs map[string]string
+ // Image Environment defaults
if newImage != nil {
// Image envs from the image if they don't exist
// already, overriding the default environments
@@ -82,9 +93,30 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
if err != nil {
return nil, errors.Wrap(err, "Env fields from image failed to parse")
}
+ defaultEnvs = envLib.Join(defaultEnvs, envs)
+ }
+
+ // Caller Specified defaults
+ if s.EnvHost {
+ defaultEnvs = envLib.Join(defaultEnvs, osEnv)
+ } else if s.HTTPProxy {
+ for _, envSpec := range []string{
+ "http_proxy",
+ "HTTP_PROXY",
+ "https_proxy",
+ "HTTPS_PROXY",
+ "ftp_proxy",
+ "FTP_PROXY",
+ "no_proxy",
+ "NO_PROXY",
+ } {
+ if v, ok := osEnv[envSpec]; ok {
+ defaultEnvs[envSpec] = v
+ }
+ }
}
- s.Env = envLib.Join(envLib.Join(defaultEnvs, envs), s.Env)
+ s.Env = envLib.Join(defaultEnvs, s.Env)
// Labels and Annotations
annotations := make(map[string]string)
diff --git a/pkg/specgen/specgen.go b/pkg/specgen/specgen.go
index a52225f87..cca05eddb 100644
--- a/pkg/specgen/specgen.go
+++ b/pkg/specgen/specgen.go
@@ -43,6 +43,13 @@ type ContainerBasicConfig struct {
// image's configuration.
// Optional.
Command []string `json:"command,omitempty"`
+ // EnvHost indicates that the host environment should be added to container
+ // Optional.
+ EnvHost bool `json:"env_host,omitempty"`
+ // EnvHTTPProxy indicates that the http host proxy environment variables
+ // should be added to container
+ // Optional.
+ HTTPProxy bool `json:"httpproxy,omitempty"`
// Env is a set of environment variables that will be set in the
// container.
// Optional.