@@ -19,12 +19,14 @@ import (
19
19
"net/http"
20
20
"os"
21
21
"os/user"
22
+ "strings"
22
23
"time"
23
24
)
24
25
25
26
const (
26
- dummyAppImage = "europe-north1-docker.pkg.dev/nais-io/nais/images/kafka-debug:latest"
27
- updateRetries = 3
27
+ dummyAppImage = "europe-north1-docker.pkg.dev/nais-io/nais/images/kafka-debug:latest"
28
+ updateRetries = 3
29
+ migrationAuthNetworkPrefix = "migrator:"
28
30
)
29
31
30
32
func CreateInstance (ctx context.Context , cfg * config.Config , source * resolved.Instance , gcpProject * resolved.GcpProject , databaseName string , mgr * common_main.Manager ) (* resolved.Instance , error ) {
@@ -145,14 +147,11 @@ func prepareSourceInstanceWithRetries(ctx context.Context, cfg *config.Config, s
145
147
}
146
148
sourceSqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks = appendAuthNetIfNotExists (sourceSqlInstance , authNetwork )
147
149
148
- if cfg .Development .AddAuthNetwork {
149
- authNetwork , err = createDevelopmentAuthNetwork ()
150
- if err != nil {
151
- return err
152
- }
153
-
154
- sourceSqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks = appendAuthNetIfNotExists (sourceSqlInstance , authNetwork )
150
+ authNetwork , err = createMigratorAuthNetwork ()
151
+ if err != nil {
152
+ return err
155
153
}
154
+ sourceSqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks = appendAuthNetIfNotExists (sourceSqlInstance , authNetwork )
156
155
157
156
setFlag (sourceSqlInstance , "cloudsql.enable_pglogical" )
158
157
setFlag (sourceSqlInstance , "cloudsql.logical_decoding" )
@@ -208,16 +207,14 @@ func prepareTargetInstanceWithRetries(ctx context.Context, cfg *config.Config, t
208
207
209
208
targetSqlInstance .Spec .Settings .BackupConfiguration .Enabled = ptr .To (false )
210
209
211
- if cfg .Development .AddAuthNetwork {
212
- var authNetwork v1beta1.InstanceAuthorizedNetworks
213
- authNetwork , err = createDevelopmentAuthNetwork ()
214
- if err != nil {
215
- return err
216
- }
217
-
218
- targetSqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks = appendAuthNetIfNotExists (targetSqlInstance , authNetwork )
210
+ var authNetwork v1beta1.InstanceAuthorizedNetworks
211
+ authNetwork , err = createMigratorAuthNetwork ()
212
+ if err != nil {
213
+ return err
219
214
}
220
215
216
+ targetSqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks = appendAuthNetIfNotExists (targetSqlInstance , authNetwork )
217
+
221
218
_ , err = mgr .SqlInstanceClient .Update (ctx , targetSqlInstance )
222
219
if err != nil {
223
220
if k8s_errors .IsConflict (err ) && retries > 0 {
@@ -296,12 +293,35 @@ func DeleteInstance(ctx context.Context, instanceName string, gcpProject *resolv
296
293
return nil
297
294
}
298
295
299
- func createDevelopmentAuthNetwork () (v1beta1.InstanceAuthorizedNetworks , error ) {
296
+ func CleanupAuthNetworks (ctx context.Context , target * resolved.Instance , mgr * common_main.Manager ) error {
297
+ return cleanupAuthNetworksWithRetries (ctx , target , mgr , updateRetries )
298
+ }
299
+
300
+ func cleanupAuthNetworksWithRetries (ctx context.Context , target * resolved.Instance , mgr * common_main.Manager , retries int ) error {
301
+ targetSqlInstance , err := mgr .SqlInstanceClient .Get (ctx , target .Name )
302
+ if err != nil {
303
+ return fmt .Errorf ("failed to get target instance: %w" , err )
304
+ }
305
+
306
+ targetSqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks = removeMigrationAuthNetwork (targetSqlInstance )
307
+
308
+ _ , err = mgr .SqlInstanceClient .Update (ctx , targetSqlInstance )
309
+ if err != nil {
310
+ if k8s_errors .IsConflict (err ) && retries > 0 {
311
+ mgr .Logger .Info ("retrying update of target instance" , "remaining_retries" , retries )
312
+ return cleanupAuthNetworksWithRetries (ctx , target , mgr , retries - 1 )
313
+ }
314
+ return err
315
+ }
316
+ return nil
317
+ }
318
+
319
+ func createMigratorAuthNetwork () (v1beta1.InstanceAuthorizedNetworks , error ) {
300
320
outgoingIp , err := getOutgoingIp ()
301
321
if err != nil {
302
322
return v1beta1.InstanceAuthorizedNetworks {}, err
303
323
}
304
- name , err := getDeveloperName ()
324
+ name , err := getNetworkName ()
305
325
if err != nil {
306
326
return v1beta1.InstanceAuthorizedNetworks {}, err
307
327
}
@@ -313,7 +333,7 @@ func createDevelopmentAuthNetwork() (v1beta1.InstanceAuthorizedNetworks, error)
313
333
return authNetwork , nil
314
334
}
315
335
316
- func getDeveloperName () (string , error ) {
336
+ func getNetworkName () (string , error ) {
317
337
u , err := user .Current ()
318
338
if err != nil {
319
339
return "" , err
@@ -324,7 +344,7 @@ func getDeveloperName() (string, error) {
324
344
return "" , err
325
345
}
326
346
327
- return fmt .Sprintf ("%s@%s" , u .Username , h ), nil
347
+ return fmt .Sprintf ("%s%s @%s" , migrationAuthNetworkPrefix , u .Username , h ), nil
328
348
}
329
349
330
350
func getOutgoingIp () (string , error ) {
@@ -345,6 +365,17 @@ func getOutgoingIp() (string, error) {
345
365
return string (data ), nil
346
366
}
347
367
368
+ func removeMigrationAuthNetwork (sqlInstance * v1beta1.SQLInstance ) []v1beta1.InstanceAuthorizedNetworks {
369
+ newAuthNetworks := make ([]v1beta1.InstanceAuthorizedNetworks , 0 )
370
+ for _ , network := range sqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks {
371
+ if strings .HasPrefix (migrationAuthNetworkPrefix , * network .Name ) {
372
+ continue
373
+ }
374
+ newAuthNetworks = append (newAuthNetworks , network )
375
+ }
376
+ return newAuthNetworks
377
+ }
378
+
348
379
func appendAuthNetIfNotExists (sqlInstance * v1beta1.SQLInstance , authNetwork v1beta1.InstanceAuthorizedNetworks ) []v1beta1.InstanceAuthorizedNetworks {
349
380
for _ , network := range sqlInstance .Spec .Settings .IpConfiguration .AuthorizedNetworks {
350
381
if network .Value == authNetwork .Value {
0 commit comments