Skip to content

Commit

Permalink
Support more common attributes in TargetAllocator CRD (#3040)
Browse files Browse the repository at this point in the history
* Support more container attributes from TA CRD

* Support more Deployment attributes from TA CRD
  • Loading branch information
swiatekm committed Jun 17, 2024
1 parent c490d80 commit b4bfdb8
Show file tree
Hide file tree
Showing 9 changed files with 331 additions and 25 deletions.
10 changes: 6 additions & 4 deletions controllers/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1495,8 +1495,9 @@ prometheus_cr:
},
},
},
DNSPolicy: "",
ServiceAccountName: "test-targetallocator",
DNSPolicy: "ClusterFirst",
ShareProcessNamespace: ptr.To(false),
ServiceAccountName: "test-targetallocator",
},
},
},
Expand Down Expand Up @@ -1888,8 +1889,9 @@ prometheus_cr:
},
},
},
DNSPolicy: "",
ServiceAccountName: "test-targetallocator",
DNSPolicy: "ClusterFirst",
ShareProcessNamespace: ptr.To(false),
ServiceAccountName: "test-targetallocator",
},
},
},
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/daemonset.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func DaemonSet(params manifests.Params) (*appsv1.DaemonSet, error) {
NodeSelector: params.OtelCol.Spec.NodeSelector,
HostNetwork: params.OtelCol.Spec.HostNetwork,
ShareProcessNamespace: &params.OtelCol.Spec.ShareProcessNamespace,
DNSPolicy: getDNSPolicy(params.OtelCol),
DNSPolicy: manifestutils.GetDNSPolicy(params.OtelCol.Spec.HostNetwork),
SecurityContext: params.OtelCol.Spec.PodSecurityContext,
PriorityClassName: params.OtelCol.Spec.PriorityClassName,
Affinity: params.OtelCol.Spec.Affinity,
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
InitContainers: params.OtelCol.Spec.InitContainers,
Containers: append(params.OtelCol.Spec.AdditionalContainers, Container(params.Config, params.Log, params.OtelCol, true)),
Volumes: Volumes(params.Config, params.OtelCol),
DNSPolicy: getDNSPolicy(params.OtelCol),
DNSPolicy: manifestutils.GetDNSPolicy(params.OtelCol.Spec.HostNetwork),
HostNetwork: params.OtelCol.Spec.HostNetwork,
ShareProcessNamespace: &params.OtelCol.Spec.ShareProcessNamespace,
Tolerations: params.OtelCol.Spec.Tolerations,
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func StatefulSet(params manifests.Params) (*appsv1.StatefulSet, error) {
InitContainers: params.OtelCol.Spec.InitContainers,
Containers: append(params.OtelCol.Spec.AdditionalContainers, Container(params.Config, params.Log, params.OtelCol, true)),
Volumes: Volumes(params.Config, params.OtelCol),
DNSPolicy: getDNSPolicy(params.OtelCol),
DNSPolicy: manifestutils.GetDNSPolicy(params.OtelCol.Spec.HostNetwork),
HostNetwork: params.OtelCol.Spec.HostNetwork,
ShareProcessNamespace: &params.OtelCol.Spec.ShareProcessNamespace,
Tolerations: params.OtelCol.Spec.Tolerations,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,16 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package collector
package manifestutils

import (
corev1 "k8s.io/api/core/v1"

"github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
)

func getDNSPolicy(otelcol v1beta1.OpenTelemetryCollector) corev1.DNSPolicy {
// Get the Pod DNS Policy depending on whether we're using a host network.
func GetDNSPolicy(hostNetwork bool) corev1.DNSPolicy {
dnsPolicy := corev1.DNSClusterFirst
if otelcol.Spec.HostNetwork {
if hostNetwork {
dnsPolicy = corev1.DNSClusterFirstWithHostNet
}
return dnsPolicy
Expand Down
18 changes: 15 additions & 3 deletions internal/manifests/targetallocator/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,20 @@ func Container(cfg config.Config, logger logr.Logger, instance v1alpha1.TargetAl
ContainerPort: 8080,
Protocol: corev1.ProtocolTCP,
})
for _, p := range instance.Spec.Ports {
ports = append(ports, corev1.ContainerPort{
Name: p.Name,
ContainerPort: p.Port,
Protocol: p.Protocol,
HostPort: p.HostPort,
})
}

volumeMounts := []corev1.VolumeMount{{
Name: naming.TAConfigMapVolume(),
MountPath: "/conf",
}}
volumeMounts = append(volumeMounts, instance.Spec.VolumeMounts...)

var envVars = instance.Spec.Env
if envVars == nil {
Expand Down Expand Up @@ -123,13 +132,16 @@ func Container(cfg config.Config, logger logr.Logger, instance v1alpha1.TargetAl
return corev1.Container{
Name: naming.TAContainer(),
Image: image,
ImagePullPolicy: instance.Spec.ImagePullPolicy,
Ports: ports,
Env: envVars,
VolumeMounts: volumeMounts,
Resources: instance.Spec.Resources,
Args: args,
Env: envVars,
EnvFrom: instance.Spec.EnvFrom,
Resources: instance.Spec.Resources,
SecurityContext: instance.Spec.SecurityContext,
LivenessProbe: livenessProbe,
ReadinessProbe: readinessProbe,
SecurityContext: instance.Spec.SecurityContext,
Lifecycle: instance.Spec.Lifecycle,
}
}
149 changes: 147 additions & 2 deletions internal/manifests/targetallocator/container_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func TestContainerWithImageOverridden(t *testing.T) {
assert.Equal(t, "overridden-image", c.Image)
}

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

func TestContainerVolumes(t *testing.T) {
func TestContainerDefaultVolumes(t *testing.T) {
// prepare
targetAllocator := v1alpha1.TargetAllocator{}
cfg := config.New()
Expand Down Expand Up @@ -383,3 +383,148 @@ func TestArgs(t *testing.T) {
expected := []string{"--akey=avalue", "--key=value"}
assert.Equal(t, expected, c.Args)
}

func TestContainerCustomVolumes(t *testing.T) {
// prepare
targetAllocator := v1alpha1.TargetAllocator{
Spec: v1alpha1.TargetAllocatorSpec{
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
VolumeMounts: []corev1.VolumeMount{{
Name: "custom-volume-mount",
}},
},
},
}
cfg := config.New()

// test
c := Container(cfg, logger, targetAllocator)

// verify
assert.Len(t, c.VolumeMounts, 2)
assert.Equal(t, "custom-volume-mount", c.VolumeMounts[1].Name)
}

func TestContainerCustomPorts(t *testing.T) {
// prepare
targetAllocator := v1alpha1.TargetAllocator{
Spec: v1alpha1.TargetAllocatorSpec{
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
Ports: []v1beta1.PortsSpec{
{
ServicePort: corev1.ServicePort{
Name: "testport1",
Port: 12345,
Protocol: corev1.ProtocolTCP,
},
HostPort: 54321,
},
},
},
},
}
cfg := config.New()

// test
c := Container(cfg, logger, targetAllocator)

// verify
assert.Len(t, c.Ports, 2)
actual := c.Ports[1]
expected := corev1.ContainerPort{
Name: "testport1",
ContainerPort: 12345,
Protocol: corev1.ProtocolTCP,
HostPort: 54321,
}
assert.Equal(t, expected, actual)
}

func TestContainerLifecycle(t *testing.T) {
// prepare
targetAllocator := v1alpha1.TargetAllocator{
Spec: v1alpha1.TargetAllocatorSpec{
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
Lifecycle: &corev1.Lifecycle{
PostStart: &corev1.LifecycleHandler{
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 100"}},
},
PreStop: &corev1.LifecycleHandler{
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 300"}},
},
},
},
},
}
cfg := config.New()

// test
c := Container(cfg, logger, targetAllocator)

expectedLifecycleHooks := corev1.Lifecycle{
PostStart: &corev1.LifecycleHandler{
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 100"}},
},
PreStop: &corev1.LifecycleHandler{
Exec: &corev1.ExecAction{Command: []string{"sh", "sleep 300"}},
},
}

// verify
assert.Equal(t, expectedLifecycleHooks, *c.Lifecycle)
}

func TestContainerEnvFrom(t *testing.T) {
//prepare
envFrom1 := corev1.EnvFromSource{
SecretRef: &corev1.SecretEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "env-as-secret",
},
},
}
envFrom2 := corev1.EnvFromSource{
ConfigMapRef: &corev1.ConfigMapEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "env-as-configmap",
},
},
}
// prepare
targetAllocator := v1alpha1.TargetAllocator{
Spec: v1alpha1.TargetAllocatorSpec{
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
EnvFrom: []corev1.EnvFromSource{
envFrom1,
envFrom2,
},
},
},
}
cfg := config.New()

// test
c := Container(cfg, logger, targetAllocator)

// verify
assert.Contains(t, c.EnvFrom, envFrom1)
assert.Contains(t, c.EnvFrom, envFrom2)
}

func TestContainerImagePullPolicy(t *testing.T) {
// prepare
targetAllocator := v1alpha1.TargetAllocator{
Spec: v1alpha1.TargetAllocatorSpec{
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
ImagePullPolicy: corev1.PullIfNotPresent,
},
},
}
cfg := config.New()

// test
c := Container(cfg, logger, targetAllocator)

// verify
assert.Equal(t, c.ImagePullPolicy, corev1.PullIfNotPresent)
}
22 changes: 14 additions & 8 deletions internal/manifests/targetallocator/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,20 @@ func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
Annotations: annotations,
},
Spec: corev1.PodSpec{
ServiceAccountName: ServiceAccountName(params.TargetAllocator),
Containers: []corev1.Container{Container(params.Config, params.Log, params.TargetAllocator)},
Volumes: Volumes(params.Config, params.TargetAllocator),
NodeSelector: params.TargetAllocator.Spec.NodeSelector,
Tolerations: params.TargetAllocator.Spec.Tolerations,
TopologySpreadConstraints: params.TargetAllocator.Spec.TopologySpreadConstraints,
Affinity: params.TargetAllocator.Spec.Affinity,
SecurityContext: params.TargetAllocator.Spec.PodSecurityContext,
ServiceAccountName: ServiceAccountName(params.TargetAllocator),
InitContainers: params.TargetAllocator.Spec.InitContainers,
Containers: append(params.TargetAllocator.Spec.AdditionalContainers, Container(params.Config, params.Log, params.TargetAllocator)),
Volumes: Volumes(params.Config, params.TargetAllocator),
DNSPolicy: manifestutils.GetDNSPolicy(params.TargetAllocator.Spec.HostNetwork),
HostNetwork: params.TargetAllocator.Spec.HostNetwork,
ShareProcessNamespace: &params.TargetAllocator.Spec.ShareProcessNamespace,
Tolerations: params.TargetAllocator.Spec.Tolerations,
NodeSelector: params.TargetAllocator.Spec.NodeSelector,
SecurityContext: params.TargetAllocator.Spec.PodSecurityContext,
PriorityClassName: params.TargetAllocator.Spec.PriorityClassName,
Affinity: params.TargetAllocator.Spec.Affinity,
TerminationGracePeriodSeconds: params.TargetAllocator.Spec.TerminationGracePeriodSeconds,
TopologySpreadConstraints: params.TargetAllocator.Spec.TopologySpreadConstraints,
},
},
},
Expand Down
Loading

0 comments on commit b4bfdb8

Please sign in to comment.