@@ -65,6 +65,17 @@ func versionHasAdvertisedEndpoint(v driver.Version) bool {
6565 return v .CompareTo ("3.4.0" ) >= 0
6666}
6767
68+ func versionHasJWTSecretKeyfile (v driver.Version ) bool {
69+ if v .CompareTo ("3.3.22" ) >= 0 && v .CompareTo ("3.4.0" ) < 0 {
70+ return true
71+ }
72+ if v .CompareTo ("3.4.2" ) >= 0 {
73+ return true
74+ }
75+
76+ return false
77+ }
78+
6879// createArangodArgs creates command line arguments for an arangod server in the given group.
6980func createArangodArgs (apiObject metav1.Object , deplSpec api.DeploymentSpec , group api.ServerGroup ,
7081 agents api.MemberStatusList , id string , version driver.Version , autoUpgrade bool ) []string {
@@ -85,8 +96,17 @@ func createArangodArgs(apiObject metav1.Object, deplSpec api.DeploymentSpec, gro
8596 // With authentication
8697 options = append (options ,
8798 optionPair {"--server.authentication" , "true" },
88- optionPair {"--server.jwt-secret" , "$(" + constants .EnvArangodJWTSecret + ")" },
8999 )
100+ if versionHasJWTSecretKeyfile (version ) {
101+ keyPath := filepath .Join (k8sutil .ClusterJWTSecretVolumeName , constants .SecretKeyToken )
102+ options = append (options ,
103+ optionPair {"--server.jwt-secret-keyfile" , keyPath },
104+ )
105+ } else {
106+ options = append (options ,
107+ optionPair {"--server.jwt-secret" , "$(" + constants .EnvArangodJWTSecret + ")" },
108+ )
109+ }
90110 } else {
91111 // Without authentication
92112 options = append (options ,
@@ -499,17 +519,18 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
499519 // Create pod
500520 if group .IsArangod () {
501521 // Prepare arguments
522+ version := imageInfo .ArangoDBVersion
502523 autoUpgrade := m .Conditions .IsTrue (api .ConditionTypeAutoUpgrade )
503524 if autoUpgrade {
504525 newPhase = api .MemberPhaseUpgrading
505526 }
506- args := createArangodArgs (apiObject , spec , group , status .Members .Agents , m .ID , imageInfo . ArangoDBVersion , autoUpgrade )
527+ args := createArangodArgs (apiObject , spec , group , status .Members .Agents , m .ID , version , autoUpgrade )
507528 env := make (map [string ]k8sutil.EnvValue )
508529 livenessProbe , err := r .createLivenessProbe (spec , group )
509530 if err != nil {
510531 return maskAny (err )
511532 }
512- readinessProbe , err := r .createReadinessProbe (spec , group , imageInfo . ArangoDBVersion )
533+ readinessProbe , err := r .createReadinessProbe (spec , group , version )
513534 if err != nil {
514535 return maskAny (err )
515536 }
@@ -535,11 +556,21 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
535556 return maskAny (errors .Wrapf (err , "RocksDB encryption key secret validation failed" ))
536557 }
537558 }
559+ // Check cluster JWT secret
560+ var clusterJWTSecretName string
538561 if spec .IsAuthenticated () {
539- env [constants .EnvArangodJWTSecret ] = k8sutil.EnvValue {
540- SecretName : spec .Authentication .GetJWTSecretName (),
541- SecretKey : constants .SecretKeyToken ,
562+ if versionHasJWTSecretKeyfile (version ) {
563+ clusterJWTSecretName = spec .Authentication .GetJWTSecretName ()
564+ if err := k8sutil .ValidateTokenSecret (secrets , clusterJWTSecretName ); err != nil {
565+ return maskAny (errors .Wrapf (err , "Cluster JWT secret validation failed" ))
566+ }
567+ } else {
568+ env [constants .EnvArangodJWTSecret ] = k8sutil.EnvValue {
569+ SecretName : spec .Authentication .GetJWTSecretName (),
570+ SecretKey : constants .SecretKeyToken ,
571+ }
542572 }
573+
543574 }
544575
545576 if spec .License .HasSecretName () {
@@ -554,7 +585,7 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
554585 finalizers := r .createPodFinalizers (group )
555586 if err := k8sutil .CreateArangodPod (kubecli , spec .IsDevelopment (), apiObject , role , m .ID , m .PodName , m .PersistentVolumeClaimName , imageInfo .ImageID , lifecycleImage , alpineImage , spec .GetImagePullPolicy (),
556587 engine , requireUUID , terminationGracePeriod , args , env , finalizers , livenessProbe , readinessProbe , tolerations , serviceAccountName , tlsKeyfileSecretName , rocksdbEncryptionSecretName ,
557- groupSpec .GetNodeSelector ()); err != nil {
588+ clusterJWTSecretName , groupSpec .GetNodeSelector ()); err != nil {
558589 return maskAny (err )
559590 }
560591 log .Debug ().Str ("pod-name" , m .PodName ).Msg ("Created pod" )
0 commit comments