@@ -77,6 +77,9 @@ func initBootstrapper(apiRouter *mux.Router, context *Context) {
7777}
7878
7979func handleSetCredentials (c * Context , w http.ResponseWriter , r * http.Request ) {
80+ vars := mux .Vars (r )
81+ cloudProvider := vars ["cloudProvider" ]
82+
8083 var credentials model.Credentials
8184 json .NewDecoder (r .Body ).Decode (& credentials )
8285
@@ -99,7 +102,8 @@ func handleSetCredentials(c *Context, w http.ResponseWriter, r *http.Request) {
99102 return
100103 }
101104
102- err = UpdateStateCredentials (c .BootstrapperState , & credentials )
105+ // Update both credentials and provider in state
106+ err = UpdateStateCredentialsAndProvider (c .BootstrapperState , & credentials , cloudProvider )
103107 if err != nil {
104108 logger .FromContext (c .Ctx ).WithError (err ).Error ("Failed to update state credentials - settings will not be persisted" )
105109 }
@@ -199,6 +203,12 @@ func handleGetCluster(c *Context, w http.ResponseWriter, r *http.Request) {
199203 w .WriteHeader (http .StatusInternalServerError )
200204 }
201205
206+ // Update cluster name in state when accessing a cluster
207+ err = UpdateStateClusterName (c .BootstrapperState , clusterName )
208+ if err != nil {
209+ logger .FromContext (c .Ctx ).WithError (err ).Error ("Failed to update cluster name in state" )
210+ }
211+
202212 json .NewEncoder (w ).Encode (result )
203213}
204214
@@ -431,7 +441,7 @@ func handleDeployNginxOperator(c *Context, w http.ResponseWriter, r *http.Reques
431441 annotations:
432442 service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "tcp"
433443 service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
434- service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-1:926412419614 :certificate/e13f9426-e452-4670-9f6a-f56b3f346bf1 `
444+ service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-1:110643744285 :certificate/8fcc5250-8a60-4ab8-8337-7491fb447906 `
435445
436446 chartSpec := helmclient.ChartSpec {
437447 ReleaseName : "ingress-nginx" ,
@@ -754,6 +764,7 @@ func handlePatchMattermostInstallation(c *Context, w http.ResponseWriter, r *htt
754764 logger .FromContext (c .Ctx ).Infof ("Patch request: %+v" , patchRequest .FilestorePatch )
755765
756766 if ! patchRequest .IsValid () {
767+ logger .FromContext (c .Ctx ).Errorf ("Invalid patch request - version validation failed for version: %s" , patchRequest .Version )
757768 w .WriteHeader (http .StatusBadRequest )
758769 return
759770 }
@@ -899,6 +910,12 @@ func handlePatchMattermostInstallation(c *Context, w http.ResponseWriter, r *htt
899910 database .External .Secret = updatedSecret .ObjectMeta .Name
900911 }
901912
913+ // Update environment variables if provided
914+ if len (patchRequest .MattermostEnv ) > 0 {
915+ logger .FromContext (c .Ctx ).Infof ("Updating environment variables, count: %d" , len (patchRequest .MattermostEnv ))
916+ installation .Spec .MattermostEnv = patchRequest .MattermostEnv
917+ }
918+
902919 installation .Spec .Version = patchRequest .Version
903920 installation .Spec .Image = patchRequest .Image
904921 installation .Spec .FileStore = MMFilestore
@@ -1009,6 +1026,7 @@ func handleCreateMattermostInstallation(c *Context, w http.ResponseWriter, r *ht
10091026
10101027 var writer string
10111028 var reader string
1029+ var databaseSecretName string
10121030
10131031 if create .DBConnectionOption == model .DatabaseOptionCreateForMe {
10141032 dbCluster := & cnpgv1.Cluster {
@@ -1066,29 +1084,38 @@ func handleCreateMattermostInstallation(c *Context, w http.ResponseWriter, r *ht
10661084 writer = strings .Replace (initial , "postgresql:" , "postgres:" , 1 ) // Replace once
10671085 reader = strings .Replace (writer , fmt .Sprintf ("%s-rw:" , secretName ), fmt .Sprintf ("%s-ro:" , secretName ), 1 )
10681086 } else if create .DBConnectionOption == model .DatabaseOptionExisting {
1069- writer = create .ExistingDBConnection .ConnectionString
1070- reader = create .ExistingDBConnection .ConnectionString
1087+ if create .ExistingDBSecretName != "" {
1088+ databaseSecretName = create .ExistingDBSecretName
1089+ } else {
1090+ writer = create .ExistingDBConnection .ConnectionString
1091+ reader = create .ExistingDBConnection .ConnectionString
1092+ }
10711093 }
10721094
1073- databaseSecret := & v1.Secret {
1074- ObjectMeta : metav1.ObjectMeta {
1075- Name : model .SecretNameDatabase ,
1076- Namespace : namespaceName ,
1077- },
1078- Type : v1 .SecretTypeOpaque ,
1079- StringData : map [string ]string {
1080- "DB_CONNECTION_CHECK_URL" : writer ,
1081- "DB_CONNECTION_STRING" : writer ,
1082- "MM_SQLSETTINGS_DATASOURCEREPLICAS" : reader , // Assuming read replicas for now
1083- },
1084- }
1095+ if databaseSecretName == "" {
1096+ databaseSecret := & v1.Secret {
1097+ ObjectMeta : metav1.ObjectMeta {
1098+ Name : model .SecretNameDatabase ,
1099+ Namespace : namespaceName ,
1100+ },
1101+ Type : v1 .SecretTypeOpaque ,
1102+ StringData : map [string ]string {
1103+ "DB_CONNECTION_CHECK_URL" : writer ,
1104+ "DB_CONNECTION_STRING" : writer ,
1105+ "MM_SQLSETTINGS_DATASOURCEREPLICAS" : reader , // Assuming read replicas for now
1106+ "MM_CONFIG" : writer ,
1107+ },
1108+ }
10851109
1086- // Create the database secret
1087- _ , err = kubeClient .Clientset .CoreV1 ().Secrets (namespaceName ).Create (context .TODO (), databaseSecret , metav1.CreateOptions {})
1088- if err != nil {
1089- logger .FromContext (c .Ctx ).Errorf ("Error creating database secret:" , err )
1090- w .WriteHeader (http .StatusInternalServerError )
1091- return
1110+ // Create the database secret
1111+ _ , err = kubeClient .Clientset .CoreV1 ().Secrets (namespaceName ).Create (context .TODO (), databaseSecret , metav1.CreateOptions {})
1112+ if err != nil {
1113+ logger .FromContext (c .Ctx ).Errorf ("Error creating database secret:" , err )
1114+ w .WriteHeader (http .StatusInternalServerError )
1115+ return
1116+ }
1117+
1118+ databaseSecretName = databaseSecret .ObjectMeta .Name
10921119 }
10931120
10941121 // License Secret
@@ -1114,6 +1141,9 @@ func handleCreateMattermostInstallation(c *Context, w http.ResponseWriter, r *ht
11141141 }
11151142
11161143 filestore := create .GetMMOperatorFilestore (namespaceName , filestoreSecret )
1144+ if filestore .External != nil && filestore .External .Secret == "" && create .FilestoreSecretName != "" {
1145+ filestore .External .Secret = create .FilestoreSecretName
1146+ }
11171147
11181148 mattermostCRD := & mmv1beta1.Mattermost {
11191149 ObjectMeta : metav1.ObjectMeta {
@@ -1133,7 +1163,12 @@ func handleCreateMattermostInstallation(c *Context, w http.ResponseWriter, r *ht
11331163 },
11341164 Database : mmv1beta1.Database {
11351165 External : & mmv1beta1.ExternalDatabase {
1136- Secret : model .SecretNameDatabase ,
1166+ Secret : func () string {
1167+ if databaseSecretName != "" {
1168+ return databaseSecretName
1169+ }
1170+ return model .SecretNameDatabase
1171+ }(),
11371172 },
11381173 },
11391174 FileStore : filestore ,
@@ -1143,6 +1178,17 @@ func handleCreateMattermostInstallation(c *Context, w http.ResponseWriter, r *ht
11431178 {Name : model .MMENVLicense , ValueFrom : & v1.EnvVarSource {
11441179 SecretKeyRef : & v1.SecretKeySelector {Key : "license" , LocalObjectReference : v1.LocalObjectReference {Name : licenseSecret .ObjectMeta .Name }, Optional : aws .Bool (true )}, // Add comma to separate items
11451180 }},
1181+ {Name : "MM_CONFIG" , ValueFrom : & v1.EnvVarSource {
1182+ SecretKeyRef : & v1.SecretKeySelector {
1183+ Key : "MM_CONFIG" ,
1184+ LocalObjectReference : v1.LocalObjectReference {Name : func () string {
1185+ if databaseSecretName != "" {
1186+ return databaseSecretName
1187+ }
1188+ return model .SecretNameDatabase
1189+ }()},
1190+ },
1191+ }},
11461192 },
11471193 PodTemplate : & mmv1beta1.PodTemplate {
11481194 SecurityContext : & v1.PodSecurityContext {
@@ -1219,11 +1265,11 @@ func handleDeployMattermostOperator(c *Context, w http.ResponseWriter, r *http.R
12191265 }
12201266
12211267 chartSpec := helmclient.ChartSpec {
1222- ReleaseName : "mattermost-operator" ,
1223- ChartName : "mattermost/mattermost-operator" ,
1224- Namespace : "mattermost-operator" ,
1225- UpgradeCRDs : true ,
1226- Version : "v1.22.0 " ,
1268+ ReleaseName : "mattermost-operator" ,
1269+ ChartName : "mattermost/mattermost-operator" ,
1270+ Namespace : "mattermost-operator" ,
1271+ UpgradeCRDs : true ,
1272+ // Version: "1.25.2 ",
12271273 Wait : true ,
12281274 Timeout : 300 * time .Second ,
12291275 CreateNamespace : true ,
0 commit comments