Skip to content

Commit 510920a

Browse files
committed
reafactor: refactor state upgraders
1 parent 694c114 commit 510920a

File tree

7 files changed

+59
-1090
lines changed

7 files changed

+59
-1090
lines changed

integration/v4_to_v5/testdata/page_rule/expected/page_rule.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ resource "cloudflare_page_rule" "with_cache_key_fields" {
7777
user = {
7878
device_type = true
7979
geo = false
80+
lang = false
8081
}
8182
}
8283
}

integration/v4_to_v5/testdata/page_rule/expected/terraform.tfstate

Lines changed: 0 additions & 127 deletions
This file was deleted.

integration/v4_to_v5/testdata/page_rule/input/terraform.tfstate

Lines changed: 0 additions & 143 deletions
This file was deleted.

internal/resources/load_balancer_pool/v4_to_v5.go

Lines changed: 10 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package load_balancer_pool
22

33
import (
4-
"fmt"
54
"strings"
65

76
"github.com/hashicorp/hcl/v2/hclsyntax"
87
"github.com/hashicorp/hcl/v2/hclwrite"
98
"github.com/tidwall/gjson"
10-
"github.com/tidwall/sjson"
119

1210
"github.com/cloudflare/tf-migrate/internal"
1311
"github.com/cloudflare/tf-migrate/internal/transform"
@@ -166,59 +164,14 @@ func transformHeaderBlock(body *hclwrite.Body) {
166164
}
167165

168166
func (m *V4ToV5Migrator) TransformState(ctx *transform.Context, stateJSON gjson.Result, resourcePath, resourceName string) (string, error) {
169-
result := stateJSON.String()
170-
171-
// Transform load_shedding from array to object (or null if empty)
172-
// v4: "load_shedding": [{ ... }] or []
173-
// v5: "load_shedding": { ... } or null
174-
loadShedding := stateJSON.Get("attributes.load_shedding")
175-
if loadShedding.Exists() && loadShedding.IsArray() {
176-
if len(loadShedding.Array()) > 0 {
177-
firstElement := loadShedding.Array()[0]
178-
result, _ = sjson.Set(result, "attributes.load_shedding", firstElement.Value())
179-
} else {
180-
// Empty array -> null
181-
result, _ = sjson.Set(result, "attributes.load_shedding", nil)
182-
}
183-
}
184-
185-
// Transform origin_steering from array to object (or null if empty)
186-
// v4: "origin_steering": [{ ... }] or []
187-
// v5: "origin_steering": { ... } or null
188-
originSteering := stateJSON.Get("attributes.origin_steering")
189-
if originSteering.Exists() && originSteering.IsArray() {
190-
if len(originSteering.Array()) > 0 {
191-
firstElement := originSteering.Array()[0]
192-
result, _ = sjson.Set(result, "attributes.origin_steering", firstElement.Value())
193-
} else {
194-
// Empty array -> null
195-
result, _ = sjson.Set(result, "attributes.origin_steering", nil)
196-
}
197-
}
198-
199-
// Transform header field inside each origin from array to object/null
200-
// v4: origins[*].header = [] or [{ ... }]
201-
// v5: origins[*].header = {} or null (provider expects object, not array)
202-
// Re-parse to get updated state after previous transformations
203-
updatedState := gjson.Parse(result)
204-
origins := updatedState.Get("attributes.origins")
205-
if origins.Exists() && origins.IsArray() {
206-
originsArray := origins.Array()
207-
for i, origin := range originsArray {
208-
header := origin.Get("header")
209-
if header.Exists() && header.IsArray() {
210-
if len(header.Array()) == 0 {
211-
// Empty array -> empty object (v5 provider expects object type)
212-
result, _ = sjson.Set(result, fmt.Sprintf("attributes.origins.%d.header", i), map[string]interface{}{})
213-
} else {
214-
// Non-empty array -> convert first element to object
215-
// This handles the case where v4 had header as array of objects
216-
firstElement := header.Array()[0]
217-
result, _ = sjson.Set(result, fmt.Sprintf("attributes.origins.%d.header", i), firstElement.Value())
218-
}
219-
}
220-
}
221-
}
222-
223-
return result, nil
167+
// State transformation is now handled by the provider's StateUpgraders (UpgradeState)
168+
// The provider's migration/v500 package handles all state transformations:
169+
// - load_shedding: array[0] → object
170+
// - origin_steering: array[0] → object
171+
// - origins.header: array → object with structure change
172+
// - check_regions: Set → List
173+
//
174+
// This function is a no-op for cloudflare_load_balancer_pool migration.
175+
// The provider automatically applies state upgrades when users run `terraform apply`.
176+
return stateJSON.String(), nil
224177
}

0 commit comments

Comments
 (0)