diff --git a/api/integreatly/v1alpha1/grafana_types.go b/api/integreatly/v1alpha1/grafana_types.go index 3520f8544..a7c23760b 100644 --- a/api/integreatly/v1alpha1/grafana_types.go +++ b/api/integreatly/v1alpha1/grafana_types.go @@ -126,6 +126,7 @@ type GrafanaHttpProxy struct { Enabled bool `json:"enabled"` URL string `json:"url,omitempty"` SecureURL string `json:"secureUrl,omitempty"` + NoProxy string `json:"noProxy,omitempty"` } // GrafanaIngress provides a means to configure the ingress created diff --git a/config/crd/bases/integreatly.org_grafanas.yaml b/config/crd/bases/integreatly.org_grafanas.yaml index e1193dd3a..3d2891e35 100644 --- a/config/crd/bases/integreatly.org_grafanas.yaml +++ b/config/crd/bases/integreatly.org_grafanas.yaml @@ -4410,6 +4410,8 @@ spec: properties: enabled: type: boolean + noProxy: + type: string secureUrl: type: string url: diff --git a/controllers/model/grafanaDeployment.go b/controllers/model/grafanaDeployment.go index f54b79f39..0700c6c73 100644 --- a/controllers/model/grafanaDeployment.go +++ b/controllers/model/grafanaDeployment.go @@ -578,6 +578,12 @@ func getContainers(cr *v1alpha1.Grafana, configHash, dsHash string) []v13.Contai Value: cr.Spec.Deployment.HttpProxy.SecureURL, }) } + if cr.Spec.Deployment.HttpProxy.NoProxy != "" { + envVars = append(envVars, v13.EnvVar{ + Name: "NO_PROXY", + Value: cr.Spec.Deployment.HttpProxy.NoProxy, + }) + } } if cr.Spec.Deployment != nil && cr.Spec.Deployment.Env != nil { diff --git a/controllers/model/grafanaDeployment_test.go b/controllers/model/grafanaDeployment_test.go new file mode 100644 index 000000000..0b53b0156 --- /dev/null +++ b/controllers/model/grafanaDeployment_test.go @@ -0,0 +1,69 @@ +package model + +import ( + "testing" + + grafanav1alpha1 "github.com/grafana-operator/grafana-operator/v4/api/integreatly/v1alpha1" + + "github.com/stretchr/testify/assert" +) + +func TestGrafanaDeployment_httpProxy(t *testing.T) { + t.Run("noProxy is setting", func(t *testing.T) { + cr := &grafanav1alpha1.Grafana{ + Spec: grafanav1alpha1.GrafanaSpec{ + Deployment: &grafanav1alpha1.GrafanaDeployment{ + HttpProxy: &grafanav1alpha1.GrafanaHttpProxy{ + Enabled: true, + URL: "http://1.2.3.4", + SecureURL: "http://1.2.3.4", + NoProxy: ".svc.cluster.local,.svc", + }, + }, + }, + } + deployment := GrafanaDeployment(cr, "", "") + for _, container := range deployment.Spec.Template.Spec.Containers { + if container.Name != "grafana" { + continue + } + + noProxyExist := false + for _, env := range container.Env { + if env.Name == "NO_PROXY" { + noProxyExist = true + assert.Equal(t, ".svc.cluster.local,.svc", env.Value) + } + } + assert.True(t, noProxyExist) + } + }) + + t.Run("noProxy is not setting", func(t *testing.T) { + cr := &grafanav1alpha1.Grafana{ + Spec: grafanav1alpha1.GrafanaSpec{ + Deployment: &grafanav1alpha1.GrafanaDeployment{ + HttpProxy: &grafanav1alpha1.GrafanaHttpProxy{ + Enabled: true, + URL: "http://1.2.3.4", + SecureURL: "http://1.2.3.4", + }, + }, + }, + } + deployment := GrafanaDeployment(cr, "", "") + for _, container := range deployment.Spec.Template.Spec.Containers { + if container.Name != "grafana" { + continue + } + + noProxyExist := false + for _, env := range container.Env { + if env.Name == "NO_PROXY" { + noProxyExist = true + } + } + assert.False(t, noProxyExist) + } + }) +} diff --git a/deploy/manifests/latest/crds.yaml b/deploy/manifests/latest/crds.yaml index c9f7a6371..6abe9b4bd 100644 --- a/deploy/manifests/latest/crds.yaml +++ b/deploy/manifests/latest/crds.yaml @@ -5005,6 +5005,8 @@ spec: properties: enabled: type: boolean + noProxy: + type: string secureUrl: type: string url: diff --git a/documentation/api.md b/documentation/api.md index 5c4a8b2d1..917e7ff79 100644 --- a/documentation/api.md +++ b/documentation/api.md @@ -11763,6 +11763,13 @@ GrafanaHttpProxy provides a means to configure the Grafana deployment to use an
true + + noProxy + string + +
+ + false secureUrl string