Skip to content

Commit 57c4f44

Browse files
committed
feat(deployment): enable AutomountServiceAccountToken for the log-collector image
1 parent bf47737 commit 57c4f44

File tree

3 files changed

+144
-3
lines changed

3 files changed

+144
-3
lines changed

cluster/kube/builder/deployment.go

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
corev1 "k8s.io/api/core/v1"
66
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
77
"k8s.io/apimachinery/pkg/util/intstr"
8+
"strings"
89
)
910

1011
type Deployment interface {
@@ -37,6 +38,10 @@ func (b *deployment) Create() (*appsv1.Deployment, error) { // nolint:golint,unp
3738
maxSurge := intstr.FromInt32(0)
3839
maxUnavailable := intstr.FromInt32(1)
3940

41+
container := b.container()
42+
image := container.Image
43+
automountServiceAccountToken := b.determineAutomountServiceAccountToken(image)
44+
4045
kdeployment := &appsv1.Deployment{
4146
ObjectMeta: metav1.ObjectMeta{
4247
Name: b.Name(),
@@ -65,8 +70,8 @@ func (b *deployment) Create() (*appsv1.Deployment, error) { // nolint:golint,unp
6570
SecurityContext: &corev1.PodSecurityContext{
6671
RunAsNonRoot: &falseValue,
6772
},
68-
AutomountServiceAccountToken: &falseValue,
69-
Containers: []corev1.Container{b.container()},
73+
AutomountServiceAccountToken: &automountServiceAccountToken,
74+
Containers: []corev1.Container{container},
7075
ImagePullSecrets: b.secretsRefs,
7176
Volumes: b.volumesObjs,
7277
},
@@ -79,16 +84,44 @@ func (b *deployment) Create() (*appsv1.Deployment, error) { // nolint:golint,unp
7984

8085
func (b *deployment) Update(obj *appsv1.Deployment) (*appsv1.Deployment, error) { // nolint:golint,unparam
8186
uobj := obj.DeepCopy()
87+
container := b.container()
8288

8389
uobj.Labels = updateAkashLabels(obj.Labels, b.labels())
8490
uobj.Spec.Selector.MatchLabels = b.selectorLabels()
8591
uobj.Spec.Replicas = b.replicas()
8692
uobj.Spec.Template.Labels = b.labels()
8793
uobj.Spec.Template.Spec.Affinity = b.affinity()
8894
uobj.Spec.Template.Spec.RuntimeClassName = b.runtimeClass()
89-
uobj.Spec.Template.Spec.Containers = []corev1.Container{b.container()}
95+
uobj.Spec.Template.Spec.Containers = []corev1.Container{container}
9096
uobj.Spec.Template.Spec.ImagePullSecrets = b.secretsRefs
9197
uobj.Spec.Template.Spec.Volumes = b.volumesObjs
9298

99+
image := container.Image
100+
automountServiceAccountToken := b.determineAutomountServiceAccountToken(image)
101+
uobj.Spec.Template.Spec.AutomountServiceAccountToken = &automountServiceAccountToken
102+
93103
return uobj, nil
94104
}
105+
106+
func (b *deployment) determineAutomountServiceAccountToken(image string) bool {
107+
automountImages := []string{
108+
"ghcr.io/akash-network/log-collector",
109+
}
110+
111+
imageName := extractImageName(image)
112+
113+
for _, automountImage := range automountImages {
114+
if strings.EqualFold(imageName, automountImage) {
115+
return true
116+
}
117+
}
118+
119+
return false
120+
}
121+
122+
func extractImageName(image string) string {
123+
if idx := strings.LastIndex(image, ":"); idx != -1 {
124+
return image[:idx]
125+
}
126+
return image
127+
}

cluster/kube/builder/deployment_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,70 @@ func TestDeploySetsEnvironmentVariables(t *testing.T) {
7979
require.True(t, ok)
8080
require.Equal(t, lid.Provider, value)
8181
}
82+
83+
func TestDeploymentAutomountServiceAccountToken(t *testing.T) {
84+
log := testutil.Logger(t)
85+
const fakeHostname = "ahostname.dev"
86+
settings := Settings{
87+
ClusterPublicHostname: fakeHostname,
88+
}
89+
lid := testutil.LeaseID(t)
90+
91+
testCases := []struct {
92+
name string
93+
sdlFile string
94+
expectedResult bool
95+
}{
96+
{
97+
name: "should enable automount for log-collector image",
98+
sdlFile: "../../../testdata/deployment/deployment-log-collector.yaml",
99+
expectedResult: true,
100+
},
101+
{
102+
name: "should disable automount for regular image",
103+
sdlFile: "../../../testdata/deployment/deployment.yaml",
104+
expectedResult: false,
105+
},
106+
}
107+
108+
for _, testCase := range testCases {
109+
t.Run(testCase.name, func(t *testing.T) {
110+
sdl, err := sdl.ReadFile(testCase.sdlFile)
111+
require.NoError(t, err)
112+
113+
manifest, err := sdl.Manifest()
114+
require.NoError(t, err)
115+
116+
schedulerParams := make([]*crd.SchedulerParams, len(manifest.GetGroups()[0].Services))
117+
118+
clusterManifest, err := crd.NewManifest("lease", lid, &manifest.GetGroups()[0], crd.ClusterSettings{SchedulerParams: schedulerParams})
119+
require.NoError(t, err)
120+
121+
group, schedulerParams, err := clusterManifest.Spec.Group.FromCRD()
122+
require.NoError(t, err)
123+
124+
clusterDeployment := &ClusterDeployment{
125+
Lid: lid,
126+
Group: &group,
127+
Sparams: crd.ClusterSettings{SchedulerParams: schedulerParams},
128+
}
129+
130+
workload, err := NewWorkloadBuilder(log, settings, clusterDeployment, clusterManifest, 0)
131+
require.NoError(t, err)
132+
133+
deploymentBuilder := NewDeployment(workload)
134+
135+
require.NotNil(t, deploymentBuilder)
136+
137+
deploymentInstance := deploymentBuilder.(*deployment)
138+
139+
deployment, err := deploymentInstance.Create()
140+
require.NoError(t, err)
141+
require.NotNil(t, deployment)
142+
143+
automountValue := deployment.Spec.Template.Spec.AutomountServiceAccountToken
144+
require.NotNil(t, automountValue)
145+
require.Equal(t, testCase.expectedResult, *automountValue)
146+
})
147+
}
148+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
version: "2.0"
3+
4+
services:
5+
log-collector:
6+
image: ghcr.io/akash-network/log-collector:1.7.0
7+
expose:
8+
- port: 8080
9+
to:
10+
- global: true
11+
accept:
12+
- log-collector.localhost
13+
env:
14+
- PROVIDER=DATADOG
15+
- POD_LABEL_SELECTOR="akash.network/manifest-service=target"
16+
- DD_API_KEY=some-secret-value
17+
- DD_SITE=datadoghq.eu
18+
19+
profiles:
20+
compute:
21+
log-collector:
22+
resources:
23+
cpu:
24+
units: "0.01"
25+
memory:
26+
size: "128Mi"
27+
storage:
28+
size: "512Mi"
29+
30+
placement:
31+
global:
32+
pricing:
33+
log-collector:
34+
denom: uakt
35+
amount: 30
36+
37+
deployment:
38+
log-collector:
39+
global:
40+
profile: log-collector
41+
count: 1

0 commit comments

Comments
 (0)