Skip to content

Commit b4bfdb8

Browse files
authored
Support more common attributes in TargetAllocator CRD (open-telemetry#3040)
* Support more container attributes from TA CRD * Support more Deployment attributes from TA CRD
1 parent c490d80 commit b4bfdb8

File tree

9 files changed

+331
-25
lines changed

9 files changed

+331
-25
lines changed

controllers/builder_test.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -1495,8 +1495,9 @@ prometheus_cr:
14951495
},
14961496
},
14971497
},
1498-
DNSPolicy: "",
1499-
ServiceAccountName: "test-targetallocator",
1498+
DNSPolicy: "ClusterFirst",
1499+
ShareProcessNamespace: ptr.To(false),
1500+
ServiceAccountName: "test-targetallocator",
15001501
},
15011502
},
15021503
},
@@ -1888,8 +1889,9 @@ prometheus_cr:
18881889
},
18891890
},
18901891
},
1891-
DNSPolicy: "",
1892-
ServiceAccountName: "test-targetallocator",
1892+
DNSPolicy: "ClusterFirst",
1893+
ShareProcessNamespace: ptr.To(false),
1894+
ServiceAccountName: "test-targetallocator",
18931895
},
18941896
},
18951897
},

internal/manifests/collector/daemonset.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func DaemonSet(params manifests.Params) (*appsv1.DaemonSet, error) {
6464
NodeSelector: params.OtelCol.Spec.NodeSelector,
6565
HostNetwork: params.OtelCol.Spec.HostNetwork,
6666
ShareProcessNamespace: &params.OtelCol.Spec.ShareProcessNamespace,
67-
DNSPolicy: getDNSPolicy(params.OtelCol),
67+
DNSPolicy: manifestutils.GetDNSPolicy(params.OtelCol.Spec.HostNetwork),
6868
SecurityContext: params.OtelCol.Spec.PodSecurityContext,
6969
PriorityClassName: params.OtelCol.Spec.PriorityClassName,
7070
Affinity: params.OtelCol.Spec.Affinity,

internal/manifests/collector/deployment.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
6161
InitContainers: params.OtelCol.Spec.InitContainers,
6262
Containers: append(params.OtelCol.Spec.AdditionalContainers, Container(params.Config, params.Log, params.OtelCol, true)),
6363
Volumes: Volumes(params.Config, params.OtelCol),
64-
DNSPolicy: getDNSPolicy(params.OtelCol),
64+
DNSPolicy: manifestutils.GetDNSPolicy(params.OtelCol.Spec.HostNetwork),
6565
HostNetwork: params.OtelCol.Spec.HostNetwork,
6666
ShareProcessNamespace: &params.OtelCol.Spec.ShareProcessNamespace,
6767
Tolerations: params.OtelCol.Spec.Tolerations,

internal/manifests/collector/statefulset.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func StatefulSet(params manifests.Params) (*appsv1.StatefulSet, error) {
6161
InitContainers: params.OtelCol.Spec.InitContainers,
6262
Containers: append(params.OtelCol.Spec.AdditionalContainers, Container(params.Config, params.Log, params.OtelCol, true)),
6363
Volumes: Volumes(params.Config, params.OtelCol),
64-
DNSPolicy: getDNSPolicy(params.OtelCol),
64+
DNSPolicy: manifestutils.GetDNSPolicy(params.OtelCol.Spec.HostNetwork),
6565
HostNetwork: params.OtelCol.Spec.HostNetwork,
6666
ShareProcessNamespace: &params.OtelCol.Spec.ShareProcessNamespace,
6767
Tolerations: params.OtelCol.Spec.Tolerations,

internal/manifests/collector/utils.go internal/manifests/manifestutils/dns.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,16 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package collector
15+
package manifestutils
1616

1717
import (
1818
corev1 "k8s.io/api/core/v1"
19-
20-
"github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
2119
)
2220

23-
func getDNSPolicy(otelcol v1beta1.OpenTelemetryCollector) corev1.DNSPolicy {
21+
// Get the Pod DNS Policy depending on whether we're using a host network.
22+
func GetDNSPolicy(hostNetwork bool) corev1.DNSPolicy {
2423
dnsPolicy := corev1.DNSClusterFirst
25-
if otelcol.Spec.HostNetwork {
24+
if hostNetwork {
2625
dnsPolicy = corev1.DNSClusterFirstWithHostNet
2726
}
2827
return dnsPolicy

internal/manifests/targetallocator/container.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,20 @@ func Container(cfg config.Config, logger logr.Logger, instance v1alpha1.TargetAl
4242
ContainerPort: 8080,
4343
Protocol: corev1.ProtocolTCP,
4444
})
45+
for _, p := range instance.Spec.Ports {
46+
ports = append(ports, corev1.ContainerPort{
47+
Name: p.Name,
48+
ContainerPort: p.Port,
49+
Protocol: p.Protocol,
50+
HostPort: p.HostPort,
51+
})
52+
}
4553

4654
volumeMounts := []corev1.VolumeMount{{
4755
Name: naming.TAConfigMapVolume(),
4856
MountPath: "/conf",
4957
}}
58+
volumeMounts = append(volumeMounts, instance.Spec.VolumeMounts...)
5059

5160
var envVars = instance.Spec.Env
5261
if envVars == nil {
@@ -123,13 +132,16 @@ func Container(cfg config.Config, logger logr.Logger, instance v1alpha1.TargetAl
123132
return corev1.Container{
124133
Name: naming.TAContainer(),
125134
Image: image,
135+
ImagePullPolicy: instance.Spec.ImagePullPolicy,
126136
Ports: ports,
127-
Env: envVars,
128137
VolumeMounts: volumeMounts,
129-
Resources: instance.Spec.Resources,
130138
Args: args,
139+
Env: envVars,
140+
EnvFrom: instance.Spec.EnvFrom,
141+
Resources: instance.Spec.Resources,
142+
SecurityContext: instance.Spec.SecurityContext,
131143
LivenessProbe: livenessProbe,
132144
ReadinessProbe: readinessProbe,
133-
SecurityContext: instance.Spec.SecurityContext,
145+
Lifecycle: instance.Spec.Lifecycle,
134146
}
135147
}

internal/manifests/targetallocator/container_test.go

+147-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestContainerWithImageOverridden(t *testing.T) {
6363
assert.Equal(t, "overridden-image", c.Image)
6464
}
6565

66-
func TestContainerPorts(t *testing.T) {
66+
func TestContainerDefaultPorts(t *testing.T) {
6767
// prepare
6868
targetAllocator := v1alpha1.TargetAllocator{}
6969
cfg := config.New()
@@ -77,7 +77,7 @@ func TestContainerPorts(t *testing.T) {
7777
assert.Equal(t, int32(8080), c.Ports[0].ContainerPort)
7878
}
7979

80-
func TestContainerVolumes(t *testing.T) {
80+
func TestContainerDefaultVolumes(t *testing.T) {
8181
// prepare
8282
targetAllocator := v1alpha1.TargetAllocator{}
8383
cfg := config.New()
@@ -383,3 +383,148 @@ func TestArgs(t *testing.T) {
383383
expected := []string{"--akey=avalue", "--key=value"}
384384
assert.Equal(t, expected, c.Args)
385385
}
386+
387+
func TestContainerCustomVolumes(t *testing.T) {
388+
// prepare
389+
targetAllocator := v1alpha1.TargetAllocator{
390+
Spec: v1alpha1.TargetAllocatorSpec{
391+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
392+
VolumeMounts: []corev1.VolumeMount{{
393+
Name: "custom-volume-mount",
394+
}},
395+
},
396+
},
397+
}
398+
cfg := config.New()
399+
400+
// test
401+
c := Container(cfg, logger, targetAllocator)
402+
403+
// verify
404+
assert.Len(t, c.VolumeMounts, 2)
405+
assert.Equal(t, "custom-volume-mount", c.VolumeMounts[1].Name)
406+
}
407+
408+
func TestContainerCustomPorts(t *testing.T) {
409+
// prepare
410+
targetAllocator := v1alpha1.TargetAllocator{
411+
Spec: v1alpha1.TargetAllocatorSpec{
412+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
413+
Ports: []v1beta1.PortsSpec{
414+
{
415+
ServicePort: corev1.ServicePort{
416+
Name: "testport1",
417+
Port: 12345,
418+
Protocol: corev1.ProtocolTCP,
419+
},
420+
HostPort: 54321,
421+
},
422+
},
423+
},
424+
},
425+
}
426+
cfg := config.New()
427+
428+
// test
429+
c := Container(cfg, logger, targetAllocator)
430+
431+
// verify
432+
assert.Len(t, c.Ports, 2)
433+
actual := c.Ports[1]
434+
expected := corev1.ContainerPort{
435+
Name: "testport1",
436+
ContainerPort: 12345,
437+
Protocol: corev1.ProtocolTCP,
438+
HostPort: 54321,
439+
}
440+
assert.Equal(t, expected, actual)
441+
}
442+
443+
func TestContainerLifecycle(t *testing.T) {
444+
// prepare
445+
targetAllocator := v1alpha1.TargetAllocator{
446+
Spec: v1alpha1.TargetAllocatorSpec{
447+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
448+
Lifecycle: &corev1.Lifecycle{
449+
PostStart: &corev1.LifecycleHandler{
450+
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 100"}},
451+
},
452+
PreStop: &corev1.LifecycleHandler{
453+
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 300"}},
454+
},
455+
},
456+
},
457+
},
458+
}
459+
cfg := config.New()
460+
461+
// test
462+
c := Container(cfg, logger, targetAllocator)
463+
464+
expectedLifecycleHooks := corev1.Lifecycle{
465+
PostStart: &corev1.LifecycleHandler{
466+
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 100"}},
467+
},
468+
PreStop: &corev1.LifecycleHandler{
469+
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 300"}},
470+
},
471+
}
472+
473+
// verify
474+
assert.Equal(t, expectedLifecycleHooks, *c.Lifecycle)
475+
}
476+
477+
func TestContainerEnvFrom(t *testing.T) {
478+
//prepare
479+
envFrom1 := corev1.EnvFromSource{
480+
SecretRef: &corev1.SecretEnvSource{
481+
LocalObjectReference: corev1.LocalObjectReference{
482+
Name: "env-as-secret",
483+
},
484+
},
485+
}
486+
envFrom2 := corev1.EnvFromSource{
487+
ConfigMapRef: &corev1.ConfigMapEnvSource{
488+
LocalObjectReference: corev1.LocalObjectReference{
489+
Name: "env-as-configmap",
490+
},
491+
},
492+
}
493+
// prepare
494+
targetAllocator := v1alpha1.TargetAllocator{
495+
Spec: v1alpha1.TargetAllocatorSpec{
496+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
497+
EnvFrom: []corev1.EnvFromSource{
498+
envFrom1,
499+
envFrom2,
500+
},
501+
},
502+
},
503+
}
504+
cfg := config.New()
505+
506+
// test
507+
c := Container(cfg, logger, targetAllocator)
508+
509+
// verify
510+
assert.Contains(t, c.EnvFrom, envFrom1)
511+
assert.Contains(t, c.EnvFrom, envFrom2)
512+
}
513+
514+
func TestContainerImagePullPolicy(t *testing.T) {
515+
// prepare
516+
targetAllocator := v1alpha1.TargetAllocator{
517+
Spec: v1alpha1.TargetAllocatorSpec{
518+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
519+
ImagePullPolicy: corev1.PullIfNotPresent,
520+
},
521+
},
522+
}
523+
cfg := config.New()
524+
525+
// test
526+
c := Container(cfg, logger, targetAllocator)
527+
528+
// verify
529+
assert.Equal(t, c.ImagePullPolicy, corev1.PullIfNotPresent)
530+
}

internal/manifests/targetallocator/deployment.go

+14-8
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,20 @@ func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
5353
Annotations: annotations,
5454
},
5555
Spec: corev1.PodSpec{
56-
ServiceAccountName: ServiceAccountName(params.TargetAllocator),
57-
Containers: []corev1.Container{Container(params.Config, params.Log, params.TargetAllocator)},
58-
Volumes: Volumes(params.Config, params.TargetAllocator),
59-
NodeSelector: params.TargetAllocator.Spec.NodeSelector,
60-
Tolerations: params.TargetAllocator.Spec.Tolerations,
61-
TopologySpreadConstraints: params.TargetAllocator.Spec.TopologySpreadConstraints,
62-
Affinity: params.TargetAllocator.Spec.Affinity,
63-
SecurityContext: params.TargetAllocator.Spec.PodSecurityContext,
56+
ServiceAccountName: ServiceAccountName(params.TargetAllocator),
57+
InitContainers: params.TargetAllocator.Spec.InitContainers,
58+
Containers: append(params.TargetAllocator.Spec.AdditionalContainers, Container(params.Config, params.Log, params.TargetAllocator)),
59+
Volumes: Volumes(params.Config, params.TargetAllocator),
60+
DNSPolicy: manifestutils.GetDNSPolicy(params.TargetAllocator.Spec.HostNetwork),
61+
HostNetwork: params.TargetAllocator.Spec.HostNetwork,
62+
ShareProcessNamespace: &params.TargetAllocator.Spec.ShareProcessNamespace,
63+
Tolerations: params.TargetAllocator.Spec.Tolerations,
64+
NodeSelector: params.TargetAllocator.Spec.NodeSelector,
65+
SecurityContext: params.TargetAllocator.Spec.PodSecurityContext,
66+
PriorityClassName: params.TargetAllocator.Spec.PriorityClassName,
67+
Affinity: params.TargetAllocator.Spec.Affinity,
68+
TerminationGracePeriodSeconds: params.TargetAllocator.Spec.TerminationGracePeriodSeconds,
69+
TopologySpreadConstraints: params.TargetAllocator.Spec.TopologySpreadConstraints,
6470
},
6571
},
6672
},

0 commit comments

Comments
 (0)