Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/operator/internal/manifests/proxy_env.go

110 lines
2.2 KiB

package manifests
import (
"strings"
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1"
"github.com/imdario/mergo"
corev1 "k8s.io/api/core/v1"
)
const (
httpProxyKey = "HTTP_PROXY"
httpsProxyKey = "HTTPS_PROXY"
noProxyKey = "NO_PROXY"
)
var proxyEnvNames = []string{
httpProxyKey,
strings.ToLower(httpProxyKey),
httpsProxyKey,
strings.ToLower(httpsProxyKey),
noProxyKey,
strings.ToLower(noProxyKey),
}
func configureProxyEnv(pod *corev1.PodSpec, opts Options) error {
for _, envVar := range proxyEnvNames {
resetProxyVar(pod, envVar)
}
proxySpec := opts.Stack.Proxy
if proxySpec == nil {
return nil
}
src := corev1.Container{
Env: toEnvVars(proxySpec),
}
for i, dst := range pod.Containers {
if err := mergo.Merge(&dst, src, mergo.WithAppendSlice); err != nil {
return err
}
pod.Containers[i] = dst
}
return nil
}
func resetProxyVar(podSpec *corev1.PodSpec, name string) {
for i, container := range podSpec.Containers {
found, index := findEnvVar(name, container.Env)
if found {
podSpec.Containers[i].Env = append(podSpec.Containers[i].Env[:index], podSpec.Containers[i].Env[index+1:]...)
}
}
}
func findEnvVar(name string, envVars []corev1.EnvVar) (bool, int) {
for i, env := range envVars {
if env.Name == name || env.Name == strings.ToLower(name) {
return true, i
}
}
return false, 0
}
func toEnvVars(proxySpec *lokiv1.ClusterProxy) []corev1.EnvVar {
var envVars []corev1.EnvVar
if proxySpec.HTTPProxy != "" {
envVars = append(envVars,
corev1.EnvVar{
Name: httpProxyKey,
Value: proxySpec.HTTPProxy,
},
corev1.EnvVar{
Name: strings.ToLower(httpProxyKey),
Value: proxySpec.HTTPProxy,
},
)
}
if proxySpec.HTTPSProxy != "" {
envVars = append(envVars,
corev1.EnvVar{
Name: httpsProxyKey,
Value: proxySpec.HTTPSProxy,
},
corev1.EnvVar{
Name: strings.ToLower(httpsProxyKey),
Value: proxySpec.HTTPSProxy,
},
)
}
if proxySpec.NoProxy != "" {
envVars = append(envVars,
corev1.EnvVar{
Name: noProxyKey,
Value: proxySpec.NoProxy,
},
corev1.EnvVar{
Name: strings.ToLower(noProxyKey),
Value: proxySpec.NoProxy,
},
)
}
return envVars
}