Skip to content

Commit 8698e61

Browse files
committed
set run triggers in secondary workspaces for faster failover
1 parent f9f5d2f commit 8698e61

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

cmd/cli/multiregion/setup.go

+63
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ func runSetup() {
4242
log.Fatalf("Error: " + err.Error())
4343
}
4444
}
45+
46+
err := setRunTriggers(pFlags)
47+
if err != nil {
48+
log.Fatalf("Error: " + err.Error())
49+
}
4550
}
4651

4752
// createSecondaryWorkspaces creates new secondary workspaces by cloning the corresponding primary workspace
@@ -459,3 +464,61 @@ func getWorkspaceID(org, workspaceName string) (string, error) {
459464
}
460465
return data.Data.ID, nil
461466
}
467+
468+
func setRunTriggers(pFlags PersistentFlags) error {
469+
fmt.Println("\nSetting workspace run triggers ...")
470+
471+
// map of workspaces (key) and source workspaces (value) for run triggers to be created
472+
runTriggers := map[string]string{
473+
databaseSecondaryWorkspace(pFlags): clusterSecondaryWorkspace(pFlags),
474+
emailSecondaryWorkspace(pFlags): databaseSecondaryWorkspace(pFlags),
475+
brokerSecondaryWorkspace(pFlags): emailSecondaryWorkspace(pFlags),
476+
pwSecondaryWorkspace(pFlags): brokerSecondaryWorkspace(pFlags),
477+
sspSecondaryWorkspace(pFlags): pwSecondaryWorkspace(pFlags),
478+
syncSecondaryWorkspace(pFlags): sspSecondaryWorkspace(pFlags),
479+
}
480+
481+
for workspace, source := range runTriggers {
482+
if err := createRunTrigger(pFlags, workspace, source); err != nil {
483+
return fmt.Errorf("failed to set run trigger from %s to %s: %w", source, workspace, err)
484+
}
485+
}
486+
return nil
487+
}
488+
489+
func createRunTrigger(pFlags PersistentFlags, workspaceName, sourceName string) error {
490+
workspaceID, err := getWorkspaceID(pFlags.org, workspaceName)
491+
if err != nil {
492+
return fmt.Errorf("failed to get workspace ID for run trigger: %w", err)
493+
}
494+
495+
sourceID, err := getWorkspaceID(pFlags.org, sourceName)
496+
if err != nil {
497+
return fmt.Errorf("failed to get source workspace ID for run trigger: %w", err)
498+
}
499+
500+
t, err := lib.FindRunTrigger(lib.FindRunTriggerConfig{
501+
WorkspaceID: workspaceID,
502+
SourceWorkspaceID: sourceID,
503+
})
504+
if err != nil {
505+
return fmt.Errorf("failed to get run triggers for workspace %s: %w", workspaceName, err)
506+
}
507+
if t != nil {
508+
fmt.Printf("Run trigger %s -> %s is already set\n", sourceName, workspaceName)
509+
return nil
510+
}
511+
512+
if pFlags.readOnlyMode {
513+
fmt.Printf("(Read-only Mode) Run trigger %s -> %s would be set\n", sourceName, workspaceName)
514+
return nil
515+
}
516+
517+
if err := lib.CreateRunTrigger(lib.RunTriggerConfig{
518+
WorkspaceID: workspaceID,
519+
SourceWorkspaceID: sourceID,
520+
}); err != nil {
521+
return fmt.Errorf("create run trigger API error: %w", err)
522+
}
523+
return nil
524+
}

0 commit comments

Comments
 (0)