mirror of
https://github.com/containers/podman.git
synced 2025-09-10 15:46:07 +08:00
Merge pull request #7355 from rhatdan/env
Use environment from containers.conf
This commit is contained in:
@ -307,10 +307,11 @@ func FillOutSpecGen(s *specgen.SpecGenerator, c *ContainerCLIOpts, args []string
|
|||||||
// ENVIRONMENT VARIABLES
|
// ENVIRONMENT VARIABLES
|
||||||
//
|
//
|
||||||
// Precedence order (higher index wins):
|
// Precedence order (higher index wins):
|
||||||
// 1) env-host, 2) image data, 3) env-file, 4) env
|
// 1) containers.conf (EnvHost, EnvHTTP, Env) 2) image data, 3 User EnvHost/EnvHTTP, 4) env-file, 5) env
|
||||||
env := map[string]string{
|
// containers.conf handled and image data handled on the server side
|
||||||
"container": "podman",
|
// user specified EnvHost and EnvHTTP handled on Server Side relative to Server
|
||||||
}
|
// env-file and env handled on client side
|
||||||
|
var env map[string]string
|
||||||
|
|
||||||
// First transform the os env into a map. We need it for the labels later in
|
// First transform the os env into a map. We need it for the labels later in
|
||||||
// any case.
|
// any case.
|
||||||
@ -319,24 +320,8 @@ func FillOutSpecGen(s *specgen.SpecGenerator, c *ContainerCLIOpts, args []string
|
|||||||
return errors.Wrap(err, "error parsing host environment variables")
|
return errors.Wrap(err, "error parsing host environment variables")
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.EnvHost {
|
s.EnvHost = c.EnvHost
|
||||||
env = envLib.Join(env, osEnv)
|
s.HTTPProxy = c.HTTPProxy
|
||||||
} else if c.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 {
|
|
||||||
env[envSpec] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// env-file overrides any previous variables
|
// env-file overrides any previous variables
|
||||||
for _, f := range c.EnvFile {
|
for _, f := range c.EnvFile {
|
||||||
|
@ -2,6 +2,7 @@ package generate
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/containers/image/v5/manifest"
|
"github.com/containers/image/v5/manifest"
|
||||||
"github.com/containers/podman/v2/libpod"
|
"github.com/containers/podman/v2/libpod"
|
||||||
@ -62,14 +63,24 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// Get Default Environment
|
// First transform the os env into a map. We need it for the labels later in
|
||||||
defaultEnvs, err := envLib.ParseSlice(rtc.Containers.Env)
|
// any case.
|
||||||
|
osEnv, err := envLib.ParseSlice(os.Environ())
|
||||||
if err != nil {
|
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
|
var envs map[string]string
|
||||||
|
|
||||||
|
// Image Environment defaults
|
||||||
if newImage != nil {
|
if newImage != nil {
|
||||||
// Image envs from the image if they don't exist
|
// Image envs from the image if they don't exist
|
||||||
// already, overriding the default environments
|
// already, overriding the default environments
|
||||||
@ -82,9 +93,30 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "Env fields from image failed to parse")
|
return nil, errors.Wrap(err, "Env fields from image failed to parse")
|
||||||
}
|
}
|
||||||
|
defaultEnvs = envLib.Join(defaultEnvs, envs)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Env = envLib.Join(envLib.Join(defaultEnvs, envs), s.Env)
|
// 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(defaultEnvs, s.Env)
|
||||||
|
|
||||||
// Labels and Annotations
|
// Labels and Annotations
|
||||||
annotations := make(map[string]string)
|
annotations := make(map[string]string)
|
||||||
|
@ -43,6 +43,13 @@ type ContainerBasicConfig struct {
|
|||||||
// image's configuration.
|
// image's configuration.
|
||||||
// Optional.
|
// Optional.
|
||||||
Command []string `json:"command,omitempty"`
|
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
|
// Env is a set of environment variables that will be set in the
|
||||||
// container.
|
// container.
|
||||||
// Optional.
|
// Optional.
|
||||||
|
Reference in New Issue
Block a user