Skip to content

Commit b7b728d

Browse files
committed
chore: detects read mode and acts accordingly, and workflow changes for testing
1 parent 63c29fe commit b7b728d

File tree

2 files changed

+128
-37
lines changed

2 files changed

+128
-37
lines changed

.github/workflows/terraform_provider_pr.yml

Lines changed: 76 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ jobs:
125125
go-version-file: go.mod
126126
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudActiveActiveTransitGatewayAttachment_CRUDI"'
127127

128+
# ===== WAVE 1: Critical smoke tests for PR changes =====
129+
# These test our direct code changes and must pass first
130+
128131
go_test_smoke_aa_db:
129132
name: go test smoke aa db
130133
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
@@ -134,30 +137,35 @@ jobs:
134137
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
135138
with:
136139
go-version-file: go.mod
137-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudActiveActiveDatabase_CRUDI"'
140+
- uses: ./.github/actions/run-testacc
141+
with:
142+
test_pattern: TestAccResourceRedisCloudActiveActiveDatabase_CRUDI
138143

139-
go_test_smoke_essentials_sub:
140-
name: go test smoke essentials sub
144+
go_test_smoke_aa_db_enable_default_user:
145+
name: go test smoke aa db enable default user
141146
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
142147
runs-on: ubuntu-latest
143148
steps:
144149
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
145150
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
146151
with:
147152
go-version-file: go.mod
148-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudEssentialsSubscription"'
149-
153+
- uses: ./.github/actions/run-testacc
154+
with:
155+
test_pattern: TestAccResourceRedisCloudActiveActiveDatabase_enableDefaultUser
150156

151-
go_test_smoke_essentials_db:
152-
name: go test smoke essentials db
153-
needs: go_test_smoke_essentials_sub
157+
go_test_smoke_aa_sub:
158+
name: go test smoke aa sub
159+
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
154160
runs-on: ubuntu-latest
155161
steps:
156162
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
157163
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
158164
with:
159165
go-version-file: go.mod
160-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudEssentialsDatabase_CRUDI"'
166+
- uses: ./.github/actions/run-testacc
167+
with:
168+
test_pattern: TestAccResourceRedisCloudActiveActiveSubscription_CRUDI
161169

162170
go_test_smoke_pro_db:
163171
name: go test smoke pro db
@@ -168,64 +176,104 @@ jobs:
168176
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
169177
with:
170178
go-version-file: go.mod
171-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudProDatabase_CRUDI"'
179+
- uses: ./.github/actions/run-testacc
180+
with:
181+
test_pattern: TestAccResourceRedisCloudProDatabase_CRUDI
172182

183+
go_test_smoke_pro_sub:
184+
name: go test smoke pro sub
185+
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
186+
runs-on: ubuntu-latest
187+
steps:
188+
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
189+
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
190+
with:
191+
go-version-file: go.mod
192+
- uses: ./.github/actions/run-testacc
193+
with:
194+
test_pattern: TestAccResourceRedisCloudProSubscription_CRUDI
195+
196+
# ===== WAVE 2: Additional smoke tests (run after Wave 1 passes) =====
197+
198+
go_test_smoke_essentials_sub:
199+
name: go test smoke essentials sub
200+
needs: [go_test_smoke_aa_db, go_test_smoke_aa_db_enable_default_user, go_test_smoke_aa_sub, go_test_smoke_pro_db, go_test_smoke_pro_sub]
201+
runs-on: ubuntu-latest
202+
steps:
203+
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
204+
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
205+
with:
206+
go-version-file: go.mod
207+
- uses: ./.github/actions/run-testacc
208+
with:
209+
test_pattern: TestAccResourceRedisCloudEssentialsSubscription
210+
211+
212+
go_test_smoke_essentials_db:
213+
name: go test smoke essentials db
214+
needs: go_test_smoke_essentials_sub
215+
runs-on: ubuntu-latest
216+
steps:
217+
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
218+
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
219+
with:
220+
go-version-file: go.mod
221+
- uses: ./.github/actions/run-testacc
222+
with:
223+
test_pattern: TestAccResourceRedisCloudEssentialsDatabase_CRUDI
173224

174225
go_test_smoke_misc:
175226
name: go test smoke misc
176-
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
227+
needs: [go_test_smoke_aa_db, go_test_smoke_aa_db_enable_default_user, go_test_smoke_aa_sub, go_test_smoke_pro_db, go_test_smoke_pro_sub]
177228
runs-on: ubuntu-latest
178229
steps:
179230
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
180231
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
181232
with:
182233
go-version-file: go.mod
183-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloud(PrivateServiceConnect_CRUDI|AclRule_CRUDI)"'
234+
- uses: ./.github/actions/run-testacc
235+
with:
236+
test_pattern: TestAccResourceRedisCloud(PrivateServiceConnect_CRUDI|AclRule_CRUDI)
184237

185238
go_test_pro_db_upgrade:
186239
name: go test smoke pro db upgrade
187-
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
240+
needs: [go_test_smoke_aa_db, go_test_smoke_aa_db_enable_default_user, go_test_smoke_aa_sub, go_test_smoke_pro_db, go_test_smoke_pro_sub]
188241
runs-on: ubuntu-latest
189242
steps:
190243
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
191244
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
192245
with:
193246
go-version-file: go.mod
194-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudProDatabase_Upgrade"'
247+
- uses: ./.github/actions/run-testacc
248+
with:
249+
test_pattern: TestAccResourceRedisCloudProDatabase_Redis8_Upgrade
195250

196251
go_test_privatelink:
197252
name: go test smoke privatelink
198-
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
253+
needs: [go_test_smoke_aa_db, go_test_smoke_aa_db_enable_default_user, go_test_smoke_aa_sub, go_test_smoke_pro_db, go_test_smoke_pro_sub]
199254
runs-on: ubuntu-latest
200255
steps:
201256
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
202257
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
203258
with:
204259
go-version-file: go.mod
205-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudPrivateLink_CRUDI"'
260+
- uses: ./.github/actions/run-testacc
261+
with:
262+
test_pattern: TestAccResourceRedisCloudPrivateLink_CRUDI
206263

207264

208265
go_test_block_public_endpoints:
209266
name: go test smoke public endpoints
210-
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
267+
needs: [go_test_smoke_aa_db, go_test_smoke_aa_db_enable_default_user, go_test_smoke_aa_sub, go_test_smoke_pro_db, go_test_smoke_pro_sub]
211268
runs-on: ubuntu-latest
212269
steps:
213270
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
214271
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
215272
with:
216273
go-version-file: go.mod
217-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAcc(RedisCloudProDatabaseBlockPublicEndpoints|ActiveActiveSubscriptionDatabaseBlockPublicEndpoints)"'
218-
219-
go_test_smoke_qpf:
220-
name: go test smoke query performance factor
221-
needs: [go_unit_test, tfproviderlint, terraform_providers_schema]
222-
runs-on: ubuntu-latest
223-
steps:
224-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
225-
- uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
274+
- uses: ./.github/actions/run-testacc
226275
with:
227-
go-version-file: go.mod
228-
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudProDatabase_qpf"'
276+
test_pattern: TestAcc(RedisCloudProDatabase_BlockPublicEndpoints|ActiveActiveSubscriptionDatabase_BlockPublicEndpoints)
229277

230278
tfproviderlint:
231279
name: tfproviderlint

provider/resource_rediscloud_active_active_database.go

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,48 @@ func resourceRedisCloudActiveActiveDatabaseCreate(ctx context.Context, d *schema
483483
return resourceRedisCloudActiveActiveDatabaseUpdate(ctx, d, meta)
484484
}
485485

486+
type readOperationMode int
487+
488+
const (
489+
readModeImport readOperationMode = iota // Import: no config/state exists yet
490+
readModeApply // Apply/Update: config is available
491+
readModeRefresh // Refresh: only state is available
492+
)
493+
494+
// String returns a human-readable name for the mode
495+
func (m readOperationMode) String() string {
496+
switch m {
497+
case readModeImport:
498+
return "import"
499+
case readModeApply:
500+
return "apply/update"
501+
case readModeRefresh:
502+
return "refresh"
503+
default:
504+
return "unknown"
505+
}
506+
}
507+
508+
// detectReadOperationMode determines which operation mode we're in based on availability of config and state
509+
func detectReadOperationMode(d *schema.ResourceData) readOperationMode {
510+
rawConfig := d.GetRawConfig()
511+
rawState := d.GetRawState()
512+
513+
configAvailable := !rawConfig.IsNull() && rawConfig.IsKnown()
514+
stateExists := !rawState.IsNull() && rawState.IsKnown() && len(d.Get("override_region").(*schema.Set).List()) > 0
515+
516+
if !configAvailable && !stateExists {
517+
// Import: Neither config nor state available yet
518+
return readModeImport
519+
} else if configAvailable {
520+
// Apply/Update: Config is available (Create/Update operation)
521+
return readModeApply
522+
} else {
523+
// Refresh: Only state available (standalone refresh operation)
524+
return readModeRefresh
525+
}
526+
}
527+
486528
func resourceRedisCloudActiveActiveDatabaseRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
487529
api := meta.(*client.ApiClient)
488530

@@ -640,17 +682,17 @@ func resourceRedisCloudActiveActiveDatabaseRead(ctx context.Context, d *schema.R
640682

641683
log.Printf("[DEBUG] Read enable_default_user for region %s: region=%v, global=%v", region, regionEnableDefaultUser, globalEnableDefaultUser)
642684

643-
// Check if GetRawConfig is available (during Apply/Update)
644-
rawConfig := d.GetRawConfig()
645-
getRawConfigAvailable := !rawConfig.IsNull() && rawConfig.IsKnown()
685+
// Detect operation mode to determine how to handle enable_default_user
686+
mode := detectReadOperationMode(d)
646687

647688
shouldInclude := false
648689
var reason string
649690

650-
if getRawConfigAvailable {
651-
// Config-based mode: Check if explicitly set in config
691+
switch mode {
692+
case readModeApply:
693+
// Apply/Update mode: Check if explicitly set in config
652694
wasExplicitlySet := isEnableDefaultUserExplicitlySetInConfig(d, region)
653-
log.Printf("[DEBUG] Config-based detection for region %s: wasExplicitlySet=%v", region, wasExplicitlySet)
695+
log.Printf("[DEBUG] Apply/Update mode for region %s: wasExplicitlySet=%v", region, wasExplicitlySet)
654696

655697
if wasExplicitlySet {
656698
shouldInclude = true
@@ -662,10 +704,11 @@ func resourceRedisCloudActiveActiveDatabaseRead(ctx context.Context, d *schema.R
662704
shouldInclude = false
663705
reason = "not in config and matches global (inherited)"
664706
}
665-
} else {
666-
// State-based mode: Check if was in actual persisted state
707+
708+
case readModeRefresh, readModeImport:
709+
// Refresh/Import mode: Check if was in actual persisted state
667710
fieldWasInActualState := isEnableDefaultUserInActualPersistedState(d, region)
668-
log.Printf("[DEBUG] State-based detection for region %s: fieldWasInActualState=%v", region, fieldWasInActualState)
711+
log.Printf("[DEBUG] %s mode for region %s: fieldWasInActualState=%v", mode.String(), region, fieldWasInActualState)
669712

670713
if fieldWasInActualState {
671714
shouldInclude = true

0 commit comments

Comments
 (0)