Skip to content

Commit d56cac5

Browse files
cortlyonsSirCortly
authored andcommitted
Update tiered_cache v4->v5 migration
1 parent 9100548 commit d56cac5

File tree

7 files changed

+443
-89
lines changed

7 files changed

+443
-89
lines changed

.github/workflows/ci.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ jobs:
2121
- name: Checkout code
2222
uses: actions/checkout@v4
2323

24+
- name: Free up disk space
25+
run: |
26+
sudo rm -rf /usr/share/dotnet
27+
sudo rm -rf /opt/ghc
28+
sudo rm -rf /usr/local/share/boost
29+
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
30+
df -h
31+
2432
- name: Setup Go
2533
uses: actions/setup-go@v5
2634
with:

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
{
2424
"attributes": {
2525
"id": "test-zone-id-generic",
26-
"value": "on",
26+
"value": "off",
2727
"zone_id": "test-zone-id"
2828
},
2929
"schema_version": 0
@@ -32,7 +32,7 @@
3232
"mode": "managed",
3333
"name": "generic",
3434
"provider": "provider[\"registry.terraform.io/cloudflare/cloudflare\"]",
35-
"type": "cloudflare_argo_tiered_caching"
35+
"type": "cloudflare_tiered_cache"
3636
},
3737
{
3838
"instances": [
@@ -71,7 +71,7 @@
7171
{
7272
"attributes": {
7373
"id": "test-zone-id-lifecycle",
74-
"value": "on",
74+
"value": "off",
7575
"zone_id": "test-zone-id"
7676
},
7777
"schema_version": 0
@@ -80,7 +80,7 @@
8080
"mode": "managed",
8181
"name": "lifecycle",
8282
"provider": "provider[\"registry.terraform.io/cloudflare/cloudflare\"]",
83-
"type": "cloudflare_argo_tiered_caching"
83+
"type": "cloudflare_tiered_cache"
8484
}
8585
],
8686
"serial": 1,

integration/v4_to_v5/testdata/tiered_cache/expected/tiered_cache.tf

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,48 @@ variable "cache_type" {
1818
default = "off"
1919
}
2020

21+
22+
23+
24+
2125
resource "cloudflare_tiered_cache" "smart" {
2226
zone_id = var.cloudflare_zone_id
2327
value = "on"
2428
}
25-
29+
resource "cloudflare_argo_tiered_caching" "smart" {
30+
zone_id = var.cloudflare_zone_id
31+
value = "on"
32+
}
2633
resource "cloudflare_tiered_cache" "off" {
2734
zone_id = var.cloudflare_zone_id
2835
value = "off"
2936
}
30-
31-
32-
resource "cloudflare_tiered_cache" "variable" {
37+
resource "cloudflare_argo_tiered_caching" "off" {
3338
zone_id = var.cloudflare_zone_id
34-
value = var.cache_type
39+
value = "off"
40+
}
41+
resource "cloudflare_tiered_cache" "generic" {
42+
zone_id = var.cloudflare_zone_id
43+
value = "off"
3544
}
36-
3745
resource "cloudflare_argo_tiered_caching" "generic" {
3846
zone_id = var.cloudflare_zone_id
3947
value = "on"
4048
}
41-
moved {
42-
from = cloudflare_tiered_cache.generic
43-
to = cloudflare_argo_tiered_caching.generic
49+
resource "cloudflare_tiered_cache" "variable" {
50+
zone_id = var.cloudflare_zone_id
51+
value = "off"
52+
}
53+
resource "cloudflare_argo_tiered_caching" "variable" {
54+
zone_id = var.cloudflare_zone_id
55+
value = "off"
56+
}
57+
resource "cloudflare_tiered_cache" "lifecycle" {
58+
zone_id = var.cloudflare_zone_id
59+
value = "off"
60+
lifecycle {
61+
create_before_destroy = true
62+
}
4463
}
4564
resource "cloudflare_argo_tiered_caching" "lifecycle" {
4665
zone_id = var.cloudflare_zone_id
@@ -49,7 +68,3 @@ resource "cloudflare_argo_tiered_caching" "lifecycle" {
4968
create_before_destroy = true
5069
}
5170
}
52-
moved {
53-
from = cloudflare_tiered_cache.lifecycle
54-
to = cloudflare_argo_tiered_caching.lifecycle
55-
}

internal/resources/tiered_cache/v4_to_v5.go

Lines changed: 98 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,40 @@ func (m *V4ToV5Migrator) TransformConfig(ctx *transform.Context, block *hclwrite
5050
body := block.Body()
5151

5252
blocks := make([]*hclwrite.Block, 0)
53-
removeOriginal := false
5453

55-
// rename cache_type to value
54+
// rename cache_type to value in the original block
5655
tfhcl.RenameAttribute(body, "cache_type", "value")
5756

5857
resourceName := tfhcl.GetResourceName(block)
59-
value := tfhcl.ExtractStringFromAttribute(body.GetAttribute("value"))
58+
valueAttr := body.GetAttribute("value")
59+
60+
// Try to get the actual value
61+
var value string
62+
if tfhcl.IsExpressionAttribute(valueAttr) {
63+
// It's a variable reference - look up the actual value in state
64+
value = state.GetResourceAttribute(ctx.StateJSON, "cloudflare_tiered_cache", resourceName, "cache_type")
65+
} else {
66+
// It's a literal value
67+
value = tfhcl.ExtractStringFromAttribute(valueAttr)
68+
}
69+
6070
if value == "smart" {
61-
// cache_type="smart" → value="on"
71+
// cache_type="smart" → value="on" for both resources
72+
// Create tiered_cache resource with value="on"
6273
tfhcl.SetAttribute(body, "value", "on")
63-
blocks = append(blocks, block)
64-
} else if value == "off" {
65-
// cache_type="off" → value="off"
66-
tfhcl.SetAttribute(body, "value", "off")
67-
blocks = append(blocks, block)
68-
} else if value == "generic" {
69-
newBlock := tfhcl.CreateDerivedBlock(
74+
tieredCacheBlock := tfhcl.CreateDerivedBlock(
75+
block,
76+
"cloudflare_tiered_cache",
77+
resourceName,
78+
tfhcl.AttributeTransform{
79+
Copy: []string{"zone_id", "value"},
80+
CopyMetaArguments: true,
81+
},
82+
)
83+
blocks = append(blocks, tieredCacheBlock)
84+
85+
// Create argo_tiered_caching resource with value="on"
86+
argoBlock := tfhcl.CreateDerivedBlock(
7087
block,
7188
"cloudflare_argo_tiered_caching",
7289
resourceName,
@@ -76,21 +93,78 @@ func (m *V4ToV5Migrator) TransformConfig(ctx *transform.Context, block *hclwrite
7693
CopyMetaArguments: true,
7794
},
7895
)
96+
blocks = append(blocks, argoBlock)
97+
} else if value == "off" {
98+
// cache_type="off" → value="off" for both resources
99+
// Create tiered_cache resource with value="off"
100+
tfhcl.SetAttribute(body, "value", "off")
101+
tieredCacheBlock := tfhcl.CreateDerivedBlock(
102+
block,
103+
"cloudflare_tiered_cache",
104+
resourceName,
105+
tfhcl.AttributeTransform{
106+
Copy: []string{"zone_id", "value"},
107+
CopyMetaArguments: true,
108+
},
109+
)
110+
blocks = append(blocks, tieredCacheBlock)
79111

80-
movedBlock := tfhcl.CreateMovedBlock(
81-
"cloudflare_tiered_cache."+resourceName,
82-
"cloudflare_argo_tiered_caching."+resourceName,
112+
// Create argo_tiered_caching resource with value="off"
113+
argoBlock := tfhcl.CreateDerivedBlock(
114+
block,
115+
"cloudflare_argo_tiered_caching",
116+
resourceName,
117+
tfhcl.AttributeTransform{
118+
Copy: []string{"zone_id"},
119+
Set: map[string]interface{}{"value": "off"},
120+
CopyMetaArguments: true,
121+
},
122+
)
123+
blocks = append(blocks, argoBlock)
124+
} else if value == "generic" {
125+
// cache_type="generic" → tiered_cache value="off", argo_tiered_caching value="on"
126+
// Create tiered_cache resource with value="off"
127+
tfhcl.SetAttribute(body, "value", "off")
128+
tieredCacheBlock := tfhcl.CreateDerivedBlock(
129+
block,
130+
"cloudflare_tiered_cache",
131+
resourceName,
132+
tfhcl.AttributeTransform{
133+
Copy: []string{"zone_id", "value"},
134+
CopyMetaArguments: true,
135+
},
83136
)
137+
blocks = append(blocks, tieredCacheBlock)
84138

85-
blocks = append(blocks, newBlock, movedBlock)
86-
removeOriginal = true
139+
// Create argo_tiered_caching resource with value="on"
140+
argoBlock := tfhcl.CreateDerivedBlock(
141+
block,
142+
"cloudflare_argo_tiered_caching",
143+
resourceName,
144+
tfhcl.AttributeTransform{
145+
Copy: []string{"zone_id"},
146+
Set: map[string]interface{}{"value": "on"},
147+
CopyMetaArguments: true,
148+
},
149+
)
150+
blocks = append(blocks, argoBlock)
87151
} else {
88-
blocks = append(blocks, block)
152+
// For variables or other expressions, just rename the attribute and copy as-is
153+
tieredCacheBlock := tfhcl.CreateDerivedBlock(
154+
block,
155+
"cloudflare_tiered_cache",
156+
resourceName,
157+
tfhcl.AttributeTransform{
158+
Copy: []string{"zone_id", "value"},
159+
CopyMetaArguments: true,
160+
},
161+
)
162+
blocks = append(blocks, tieredCacheBlock)
89163
}
90164

91165
return &transform.TransformResult{
92166
Blocks: blocks,
93-
RemoveOriginal: removeOriginal,
167+
RemoveOriginal: true,
94168
}, nil
95169
}
96170

@@ -119,35 +193,28 @@ func (m *V4ToV5Migrator) TransformState(ctx *transform.Context, stateJSON gjson.
119193

120194
cacheTypeValue := cacheTypeField.String()
121195

122-
// Determine target resource type based on cache_type value
123-
var targetType string
124-
125196
// Transform based on cache_type value
197+
// All resources stay as cloudflare_tiered_cache in the state
198+
// The argo_tiered_caching resources in the config are new and will be created on next apply
126199
if cacheTypeValue == "generic" {
127-
// Transform to argo_tiered_caching
128-
targetType = "cloudflare_argo_tiered_caching"
200+
// For generic, the tiered_cache resource gets value="off"
129201
result, _ = sjson.Delete(result, "attributes.cache_type")
130-
result, _ = sjson.Set(result, "attributes.value", "on")
202+
result, _ = sjson.Set(result, "attributes.value", "off")
131203
} else if cacheTypeValue == "smart" {
132-
// Keep as tiered_cache, transform smart → on
133-
targetType = "cloudflare_tiered_cache"
204+
// For smart, the tiered_cache resource gets value="on"
134205
result, _ = sjson.Delete(result, "attributes.cache_type")
135206
result, _ = sjson.Set(result, "attributes.value", "on")
136207
} else if cacheTypeValue == "off" {
137-
// Keep as tiered_cache, cache_type → value (no value change)
138-
targetType = "cloudflare_tiered_cache"
208+
// For off, the tiered_cache resource gets value="off"
139209
result, _ = sjson.Delete(result, "attributes.cache_type")
140210
result, _ = sjson.Set(result, "attributes.value", "off")
141211
} else {
142212
// Unknown value (variables, expressions), just rename the field
143-
targetType = "cloudflare_tiered_cache"
144213
result = state.RenameField(result, "attributes", attrs, "cache_type", "value")
145214
}
146215

147216
// Set schema version to 0
148217
result, _ = sjson.Set(result, "schema_version", 0)
149218

150-
transform.SetStateTypeRename(ctx, resourceName, "cloudflare_tiered_cache", targetType)
151-
152219
return result, nil
153220
}

0 commit comments

Comments
 (0)