Skip to content

Commit

Permalink
Adds DNSPolicy to the ActiveGate section (#458)
Browse files Browse the repository at this point in the history
(cherry picked from commit de32050)
  • Loading branch information
0sewa0 authored and chrismuellner committed Jan 21, 2022
1 parent 46a793f commit 3c019be
Show file tree
Hide file tree
Showing 10 changed files with 70 additions and 16 deletions.
3 changes: 3 additions & 0 deletions config/crd/bases/dynatrace.com_dynakubes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1011,6 +1011,9 @@ spec:
valueFrom:
type: string
type: object
dnsPolicy:
description: 'Optional: Sets DNS Policy for the ActiveGate pods'
type: string
env:
description: 'Optional: List of environment variables to set for
the ActiveGate'
Expand Down
3 changes: 3 additions & 0 deletions config/deploy/kubernetes/kubernetes-all.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1020,6 +1020,9 @@ spec:
valueFrom:
type: string
type: object
dnsPolicy:
description: 'Optional: Sets DNS Policy for the ActiveGate pods'
type: string
env:
description: 'Optional: List of environment variables to set for
the ActiveGate'
Expand Down
3 changes: 3 additions & 0 deletions config/deploy/openshift/openshift-all.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1020,6 +1020,9 @@ spec:
valueFrom:
type: string
type: object
dnsPolicy:
description: 'Optional: Sets DNS Policy for the ActiveGate pods'
type: string
env:
description: 'Optional: List of environment variables to set for
the ActiveGate'
Expand Down
4 changes: 4 additions & 0 deletions config/samples/applicationMonitoring.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,7 @@ spec:
# server.p12: certificate+key pair in pkcs12 format
#
# tlsSecretName: "my-tls-secret"

# Optional: Sets DNS Policy for the ActiveGate pods
#
# dnsPolicy: "Default"
4 changes: 4 additions & 0 deletions config/samples/classicFullStack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,7 @@ spec:
# server.p12: certificate+key pair in pkcs12 format
#
# tlsSecretName: "my-tls-secret"

# Optional: Sets DNS Policy for the ActiveGate pods
#
# dnsPolicy: "Default"
4 changes: 4 additions & 0 deletions config/samples/cloudNativeFullStack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -192,3 +192,7 @@ spec:
# server.p12: certificate+key pair in pkcs12 format
#
# tlsSecretName: "my-tls-secret"

# Optional: Sets DNS Policy for the ActiveGate pods
#
# dnsPolicy: "Default"
4 changes: 4 additions & 0 deletions config/samples/hostMonitoring.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,7 @@ spec:
# server.p12: certificate+key pair in pkcs12 format
#
# tlsSecretName: "my-tls-secret"

# Optional: Sets DNS Policy for the ActiveGate pods
#
# dnsPolicy: "Default"
4 changes: 4 additions & 0 deletions src/api/v1beta1/activegate_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ type ActiveGateSpec struct {
// password: passphrase to read server.p12
// +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="TlsSecretName",order=10,xDescriptors={"urn:alm:descriptor:com.tectonic.ui:advanced","urn:alm:descriptor:com.tectonic.ui:text"}
TlsSecretName string `json:"tlsSecretName,omitempty"`

// Optional: Sets DNS Policy for the ActiveGate pods
// +operator-sdk:csv:customresourcedefinitions:type=spec,displayName="DNS Policy",order=24,xDescriptors={"urn:alm:descriptor:com.tectonic.ui:advanced","urn:alm:descriptor:com.tectonic.ui:text"}
DNSPolicy corev1.DNSPolicy `json:"dnsPolicy,omitempty"`
}

// CapabilityProperties is a struct which can be embedded by ActiveGate capabilities
Expand Down
13 changes: 12 additions & 1 deletion src/controllers/activegate/reconciler/statefulset/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func CreateStatefulSet(stsProperties *statefulSetProperties) (*appsv1.StatefulSe
}

func buildTemplateSpec(stsProperties *statefulSetProperties) corev1.PodSpec {
return corev1.PodSpec{
podSpec := corev1.PodSpec{
Containers: []corev1.Container{buildContainer(stsProperties)},
InitContainers: buildInitContainers(stsProperties),
NodeSelector: stsProperties.CapabilityProperties.NodeSelector,
Expand All @@ -119,6 +119,17 @@ func buildTemplateSpec(stsProperties *statefulSetProperties) corev1.PodSpec {
{Name: stsProperties.PullSecret()},
},
}
if dnsPolicy := buildDNSPolicy(stsProperties); dnsPolicy != "" {
podSpec.DNSPolicy = dnsPolicy
}
return podSpec
}

func buildDNSPolicy(stsProperties *statefulSetProperties) corev1.DNSPolicy {
if stsProperties.ActiveGateMode() {
return stsProperties.Spec.ActiveGate.DNSPolicy
}
return ""
}

func buildInitContainers(stsProperties *statefulSetProperties) []corev1.Container {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const (
testUID = "test-uid"
routingStatefulSetSuffix = "-router"
testFeature = "router"
testDNSPolicy = corev1.DNSPolicy("dns")
)

func TestNewStatefulSetBuilder(t *testing.T) {
Expand All @@ -39,7 +40,7 @@ func TestNewStatefulSetBuilder(t *testing.T) {

func TestStatefulSetBuilder_Build(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties
sts, err := CreateStatefulSet(NewStatefulSetProperties(instance, capabilityProperties,
"", "", testFeature, "", "", nil, nil, nil))

Expand All @@ -52,7 +53,7 @@ func TestStatefulSetBuilder_Build(t *testing.T) {
KeyActiveGate: instance.Name,
KeyFeature: testFeature,
}, sts.Labels)
assert.Equal(t, instance.Spec.Routing.Replicas, sts.Spec.Replicas)
assert.Equal(t, instance.Spec.ActiveGate.Replicas, sts.Spec.Replicas)
assert.Equal(t, appsv1.ParallelPodManagement, sts.Spec.PodManagementPolicy)
assert.Equal(t, metav1.LabelSelector{
MatchLabels: BuildLabelsFromInstance(instance, testFeature),
Expand Down Expand Up @@ -81,7 +82,7 @@ func TestStatefulSetBuilder_Build(t *testing.T) {

func TestStatefulSet_TemplateSpec(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties
templateSpec := buildTemplateSpec(NewStatefulSetProperties(instance, capabilityProperties,
"", "", "", "", "", nil, nil, nil))

Expand All @@ -104,7 +105,7 @@ func TestStatefulSet_TemplateSpec(t *testing.T) {

func TestStatefulSet_Container(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties
container := buildContainer(NewStatefulSetProperties(instance, capabilityProperties,
"", "", "", "", "", nil, nil, nil))

Expand All @@ -120,7 +121,7 @@ func TestStatefulSet_Container(t *testing.T) {

func TestStatefulSet_Volumes(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties

t.Run(`without custom properties`, func(t *testing.T) {
volumes := buildVolumes(NewStatefulSetProperties(instance, capabilityProperties,
Expand Down Expand Up @@ -170,7 +171,7 @@ func TestStatefulSet_Volumes(t *testing.T) {

func TestStatefulSet_Env(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties
deploymentMetadata := deploymentmetadata.NewDeploymentMetadata(string(testUID), deploymentmetadata.DeploymentTypeActiveGate)

t.Run(`without proxy`, func(t *testing.T) {
Expand All @@ -187,7 +188,7 @@ func TestStatefulSet_Env(t *testing.T) {
t.Run(`with networkzone`, func(t *testing.T) {
instance := buildTestInstance()
instance.Spec.NetworkZone = testName
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties
envVars := buildEnvs(NewStatefulSetProperties(instance, capabilityProperties,
"", "", "", "", "", nil, nil, nil))

Expand All @@ -200,8 +201,8 @@ func TestStatefulSet_Env(t *testing.T) {
})
t.Run(`with group`, func(t *testing.T) {
instance := buildTestInstance()
instance.Spec.Routing.Group = testValue
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
instance.Spec.ActiveGate.Group = testValue
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties
envVars := buildEnvs(NewStatefulSetProperties(instance, capabilityProperties,
"", "", "", "", "", nil, nil, nil))

Expand All @@ -216,7 +217,7 @@ func TestStatefulSet_Env(t *testing.T) {

func TestStatefulSet_VolumeMounts(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties

t.Run(`without custom properties`, func(t *testing.T) {
volumeMounts := buildVolumeMounts(NewStatefulSetProperties(instance, capabilityProperties,
Expand Down Expand Up @@ -306,14 +307,14 @@ func TestStatefulSet_VolumeMounts(t *testing.T) {

func TestStatefulSet_Resources(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.Routing.CapabilityProperties
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties

quantityCpuLimit := resource.NewScaledQuantity(700, resource.Milli)
quantityMemoryLimit := resource.NewScaledQuantity(7, resource.Giga)
quantityCpuRequest := resource.NewScaledQuantity(500, resource.Milli)
quantityMemoryRequest := resource.NewScaledQuantity(5, resource.Giga)

instance.Spec.Routing.Resources = corev1.ResourceRequirements{
instance.Spec.ActiveGate.Resources = corev1.ResourceRequirements{
Limits: corev1.ResourceList{
corev1.ResourceCPU: *quantityCpuLimit,
corev1.ResourceMemory: *quantityMemoryLimit,
Expand All @@ -332,16 +333,28 @@ func TestStatefulSet_Resources(t *testing.T) {
assert.True(t, quantityMemoryRequest.Equal(container.Resources.Requests[corev1.ResourceMemory]))
}

func TestStatefulSet_DNSPolicy(t *testing.T) {
instance := buildTestInstance()
capabilityProperties := &instance.Spec.ActiveGate.CapabilityProperties

podSpec := buildTemplateSpec(NewStatefulSetProperties(instance, capabilityProperties, "", "", "", "", "", nil, nil, nil))

assert.Equal(t, testDNSPolicy, podSpec.DNSPolicy)
}

func buildTestInstance() *dynatracev1beta1.DynaKube {
replicas := int32(3)

return &dynatracev1beta1.DynaKube{
ObjectMeta: metav1.ObjectMeta{
Name: testName,
Namespace: testNamespace,
},
Spec: dynatracev1beta1.DynaKubeSpec{
Routing: dynatracev1beta1.RoutingSpec{
ActiveGate: dynatracev1beta1.ActiveGateSpec{
Capabilities: []dynatracev1beta1.CapabilityDisplayName{
dynatracev1beta1.RoutingCapability.DisplayName,
},
DNSPolicy: testDNSPolicy,
CapabilityProperties: dynatracev1beta1.CapabilityProperties{
Replicas: &replicas,
Tolerations: []corev1.Toleration{{Value: testValue}},
Expand All @@ -351,7 +364,8 @@ func buildTestInstance() *dynatracev1beta1.DynaKube {
Env: []corev1.EnvVar{
{Name: testKey, Value: testValue},
},
}},
},
},
},
}
}

0 comments on commit 3c019be

Please sign in to comment.