Skip to content

Commit a9218b8

Browse files
authored
fix: Allow override of default /tmp volume mount in repo server (argoproj-labs#1459)
Signed-off-by: Jonathan West <jonwest@redhat.com>
1 parent 806551f commit a9218b8

File tree

3 files changed

+103
-21
lines changed

3 files changed

+103
-21
lines changed

controllers/argocd/deployment.go

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,15 @@ func (r *ReconcileArgoCD) reconcileRepoDeployment(cr *argoproj.ArgoCD, useTLSFor
895895
deploy.Spec.Template.Spec.InitContainers = append(deploy.Spec.Template.Spec.InitContainers, cr.Spec.Repo.InitContainers...)
896896
}
897897

898+
// If the user has specified a custom volume mount that overrides the existing /tmp mount, then we should use the user's custom mount, rather than the default.
899+
volumeMountOverridesTmpVolume := false
900+
for _, volumeMount := range cr.Spec.Repo.VolumeMounts {
901+
if volumeMount.MountPath == "/tmp" {
902+
volumeMountOverridesTmpVolume = true
903+
break
904+
}
905+
}
906+
898907
repoServerVolumeMounts := []corev1.VolumeMount{
899908
{
900909
Name: "ssh-known-hosts",
@@ -912,10 +921,6 @@ func (r *ReconcileArgoCD) reconcileRepoDeployment(cr *argoproj.ArgoCD, useTLSFor
912921
Name: "gpg-keyring",
913922
MountPath: "/app/config/gpg/keys",
914923
},
915-
{
916-
Name: "tmp",
917-
MountPath: "/tmp",
918-
},
919924
{
920925
Name: "argocd-repo-server-tls",
921926
MountPath: "/app/config/reposerver/tls",
@@ -930,6 +935,15 @@ func (r *ReconcileArgoCD) reconcileRepoDeployment(cr *argoproj.ArgoCD, useTLSFor
930935
},
931936
}
932937

938+
if !volumeMountOverridesTmpVolume {
939+
940+
repoServerVolumeMounts = append(repoServerVolumeMounts, corev1.VolumeMount{
941+
Name: "tmp",
942+
MountPath: "/tmp",
943+
})
944+
945+
}
946+
933947
if cr.Spec.Repo.VolumeMounts != nil {
934948
repoServerVolumeMounts = append(repoServerVolumeMounts, cr.Spec.Repo.VolumeMounts...)
935949
}
@@ -1024,12 +1038,6 @@ func (r *ReconcileArgoCD) reconcileRepoDeployment(cr *argoproj.ArgoCD, useTLSFor
10241038
EmptyDir: &corev1.EmptyDirVolumeSource{},
10251039
},
10261040
},
1027-
{
1028-
Name: "tmp",
1029-
VolumeSource: corev1.VolumeSource{
1030-
EmptyDir: &corev1.EmptyDirVolumeSource{},
1031-
},
1032-
},
10331041
{
10341042
Name: "argocd-repo-server-tls",
10351043
VolumeSource: corev1.VolumeSource{
@@ -1062,6 +1070,16 @@ func (r *ReconcileArgoCD) reconcileRepoDeployment(cr *argoproj.ArgoCD, useTLSFor
10621070
},
10631071
}
10641072

1073+
// If the user is not used a custom /tmp mount, then just use the default
1074+
if !volumeMountOverridesTmpVolume {
1075+
repoServerVolumes = append(repoServerVolumes, corev1.Volume{
1076+
Name: "tmp",
1077+
VolumeSource: corev1.VolumeSource{
1078+
EmptyDir: &corev1.EmptyDirVolumeSource{},
1079+
},
1080+
})
1081+
}
1082+
10651083
if cr.Spec.Repo.Volumes != nil {
10661084
repoServerVolumes = append(repoServerVolumes, cr.Spec.Repo.Volumes...)
10671085
}

controllers/argocd/deployment_test.go

Lines changed: 71 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,70 @@ func TestReconcileArgoCD_reconcileRepoDeployment_mounts(t *testing.T) {
497497
assert.NoError(t, err)
498498
assert.Contains(t, deployment.Spec.Template.Spec.Containers[0].VolumeMounts, testMount)
499499
})
500+
501+
t.Run("Add extra volume mount and volume that override default /tmp volume mount and volume", func(t *testing.T) {
502+
testMount := corev1.VolumeMount{
503+
Name: "test-mount",
504+
MountPath: "/tmp",
505+
}
506+
507+
logf.SetLogger(ZapLogger(true))
508+
a := makeTestArgoCD(func(a *argoproj.ArgoCD) {
509+
a.Spec.Repo.VolumeMounts = []corev1.VolumeMount{testMount}
510+
a.Spec.Repo.Volumes = []corev1.Volume{{Name: "test-mount"}}
511+
})
512+
513+
resObjs := []client.Object{a}
514+
subresObjs := []client.Object{a}
515+
runtimeObjs := []runtime.Object{}
516+
sch := makeTestReconcilerScheme(argoproj.AddToScheme)
517+
cl := makeTestReconcilerClient(sch, resObjs, subresObjs, runtimeObjs)
518+
r := makeTestReconciler(cl, sch)
519+
520+
err := r.reconcileRepoDeployment(a, false)
521+
assert.NoError(t, err)
522+
523+
deployment := &appsv1.Deployment{}
524+
err = r.Client.Get(context.TODO(), types.NamespacedName{
525+
Name: "argocd-repo-server",
526+
Namespace: testNamespace,
527+
}, deployment)
528+
assert.NoError(t, err)
529+
530+
assert.Len(t, deployment.Spec.Template.Spec.Containers, 1)
531+
532+
container := deployment.Spec.Template.Spec.Containers[0]
533+
534+
containsTestMount := false
535+
containsDefaultMount := false
536+
537+
for _, volumeMount := range container.VolumeMounts {
538+
539+
if volumeMount.Name == testMount.Name {
540+
containsTestMount = true
541+
} else if volumeMount.MountPath == "/tmp" {
542+
containsDefaultMount = true
543+
}
544+
}
545+
546+
assert.True(t, containsTestMount, "should contain test-mount volume mount")
547+
assert.False(t, containsDefaultMount, "should not contain the default mount, since this is being overriden by the test-mount")
548+
549+
containsTestMountVolume := false
550+
containsDefaultVolume := false
551+
for _, volume := range deployment.Spec.Template.Spec.Volumes {
552+
if volume.Name == "test-mount" {
553+
containsTestMountVolume = true
554+
}
555+
if volume.Name == "tmp" {
556+
containsDefaultVolume = true
557+
}
558+
}
559+
560+
assert.True(t, containsTestMountVolume, "should contain test-mount molume")
561+
assert.False(t, containsDefaultVolume, "should not contain default tmp volume")
562+
563+
})
500564
}
501565

502566
func TestReconcileArgoCD_reconcileRepoDeployment_initContainers(t *testing.T) {
@@ -1776,12 +1840,6 @@ func repoServerDefaultVolumes() []corev1.Volume {
17761840
EmptyDir: &corev1.EmptyDirVolumeSource{},
17771841
},
17781842
},
1779-
{
1780-
Name: "tmp",
1781-
VolumeSource: corev1.VolumeSource{
1782-
EmptyDir: &corev1.EmptyDirVolumeSource{},
1783-
},
1784-
},
17851843
{
17861844
Name: "argocd-repo-server-tls",
17871845
VolumeSource: corev1.VolumeSource{
@@ -1812,6 +1870,12 @@ func repoServerDefaultVolumes() []corev1.Volume {
18121870
EmptyDir: &corev1.EmptyDirVolumeSource{},
18131871
},
18141872
},
1873+
{
1874+
Name: "tmp",
1875+
VolumeSource: corev1.VolumeSource{
1876+
EmptyDir: &corev1.EmptyDirVolumeSource{},
1877+
},
1878+
},
18151879
}
18161880
return volumes
18171881
}
@@ -1823,10 +1887,10 @@ func repoServerDefaultVolumeMounts() []corev1.VolumeMount {
18231887
{Name: "tls-certs", MountPath: "/app/config/tls"},
18241888
{Name: "gpg-keys", MountPath: "/app/config/gpg/source"},
18251889
{Name: "gpg-keyring", MountPath: "/app/config/gpg/keys"},
1826-
{Name: "tmp", MountPath: "/tmp"},
18271890
{Name: "argocd-repo-server-tls", MountPath: "/app/config/reposerver/tls"},
18281891
{Name: common.ArgoCDRedisServerTLSSecretName, MountPath: "/app/config/reposerver/tls/redis"},
18291892
{Name: "plugins", MountPath: "/home/argocd/cmp-server/plugins"},
1893+
{Name: "tmp", MountPath: "/tmp"},
18301894
}
18311895
return mounts
18321896
}

tests/k8s/1-007_validate_volume_mounts/01-assert.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ spec:
6363
name: gpg-keys
6464
- mountPath: /app/config/gpg/keys
6565
name: gpg-keyring
66-
- mountPath: /tmp
67-
name: tmp
6866
- mountPath: /app/config/reposerver/tls
6967
name: argocd-repo-server-tls
7068
- mountPath: /app/config/reposerver/tls/redis
7169
name: argocd-operator-redis-tls
7270
- mountPath: /home/argocd/cmp-server/plugins
7371
name: plugins
72+
- mountPath: /tmp
73+
name: tmp
7474
volumes:
7575
- configMap:
7676
defaultMode: 420
@@ -86,8 +86,6 @@ spec:
8686
name: gpg-keys
8787
- emptyDir: {}
8888
name: gpg-keyring
89-
- emptyDir: {}
90-
name: tmp
9189
- name: argocd-repo-server-tls
9290
secret:
9391
defaultMode: 420
@@ -102,6 +100,8 @@ spec:
102100
name: var-files
103101
- emptyDir: {}
104102
name: plugins
103+
- emptyDir: {}
104+
name: tmp
105105
---
106106
apiVersion: apps/v1
107107
kind: StatefulSet

0 commit comments

Comments
 (0)