Skip to content

Commit 12959cc

Browse files
Remove immutable annotation from engine_version to support version upgrade. (#13149) (#9534)
[upstream:26817a8f129c2c0c6b5ce68b45346e2efcefa380] Signed-off-by: Modular Magician <[email protected]>
1 parent 6186990 commit 12959cc

File tree

4 files changed

+61
-4
lines changed

4 files changed

+61
-4
lines changed

Diff for: .changelog/13149.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
memorystore: added update support for `engine_version` field in `google_memorystore_instance` resource
3+
```

Diff for: google-beta/services/memorystore/resource_memorystore_instance.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ IAM_AUTH`,
109109
Type: schema.TypeString,
110110
Computed: true,
111111
Optional: true,
112-
ForceNew: true,
113-
Description: `Optional. Immutable. Engine version of the instance.`,
112+
Description: `Optional. Engine version of the instance.`,
114113
},
115114
"labels": {
116115
Type: schema.TypeMap,
@@ -877,6 +876,12 @@ func resourceMemorystoreInstanceUpdate(d *schema.ResourceData, meta interface{})
877876
} else if v, ok := d.GetOkExists("persistence_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, persistenceConfigProp)) {
878877
obj["persistenceConfig"] = persistenceConfigProp
879878
}
879+
engineVersionProp, err := expandMemorystoreInstanceEngineVersion(d.Get("engine_version"), d, config)
880+
if err != nil {
881+
return err
882+
} else if v, ok := d.GetOkExists("engine_version"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, engineVersionProp)) {
883+
obj["engineVersion"] = engineVersionProp
884+
}
880885
engineConfigsProp, err := expandMemorystoreInstanceEngineConfigs(d.Get("engine_configs"), d, config)
881886
if err != nil {
882887
return err
@@ -922,6 +927,10 @@ func resourceMemorystoreInstanceUpdate(d *schema.ResourceData, meta interface{})
922927
updateMask = append(updateMask, "persistenceConfig")
923928
}
924929

930+
if d.HasChange("engine_version") {
931+
updateMask = append(updateMask, "engineVersion")
932+
}
933+
925934
if d.HasChange("engine_configs") {
926935
updateMask = append(updateMask, "engineConfigs")
927936
}

Diff for: google-beta/services/memorystore/resource_memorystore_instance_test.go

+46-1
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,49 @@ func TestAccMemorystoreInstance_updateDeletionProtection(t *testing.T) {
188188
})
189189
}
190190

191+
// Validate that engine version is updated for the cluster
192+
func TestAccMemorystoreInstance_updateEngineVersion(t *testing.T) {
193+
t.Parallel()
194+
195+
name := fmt.Sprintf("tf-test-%d", acctest.RandInt(t))
196+
197+
acctest.VcrTest(t, resource.TestCase{
198+
PreCheck: func() { acctest.AccTestPreCheck(t) },
199+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
200+
CheckDestroy: testAccCheckMemorystoreInstanceDestroyProducer(t),
201+
Steps: []resource.TestStep{
202+
{
203+
// create cluster with engine version 7.2
204+
Config: createOrUpdateMemorystoreInstance(&InstanceParams{
205+
name: name,
206+
shardCount: 3,
207+
zoneDistributionMode: "MULTI_ZONE",
208+
engineVersion: "VALKEY_7_2",
209+
}),
210+
},
211+
{
212+
ResourceName: "google_memorystore_instance.test",
213+
ImportState: true,
214+
ImportStateVerify: true,
215+
},
216+
{
217+
// update cluster with engine version 8.0
218+
Config: createOrUpdateMemorystoreInstance(&InstanceParams{
219+
name: name,
220+
shardCount: 3,
221+
zoneDistributionMode: "MULTI_ZONE",
222+
engineVersion: "VALKEY_8_0",
223+
}),
224+
},
225+
{
226+
ResourceName: "google_memorystore_instance.test",
227+
ImportState: true,
228+
ImportStateVerify: true,
229+
},
230+
},
231+
})
232+
}
233+
191234
// Validate that persistence config is updated for the cluster
192235
func TestAccMemorystoreInstance_updatePersistence(t *testing.T) {
193236
t.Parallel()
@@ -236,6 +279,7 @@ type InstanceParams struct {
236279
zone string
237280
deletionProtectionEnabled bool
238281
persistenceMode string
282+
engineVersion string
239283
}
240284

241285
func createOrUpdateMemorystoreInstance(params *InstanceParams) string {
@@ -280,6 +324,7 @@ resource "google_memorystore_instance" "test" {
280324
project_id = data.google_project.project.project_id
281325
}
282326
deletion_protection_enabled = %t
327+
engine_version = "%s"
283328
engine_configs = {
284329
%s
285330
}
@@ -316,5 +361,5 @@ resource "google_compute_network" "producer_net" {
316361
317362
data "google_project" "project" {
318363
}
319-
`, params.name, params.replicaCount, params.shardCount, params.nodeType, params.deletionProtectionEnabled, strBuilder.String(), zoneDistributionConfigBlock, persistenceBlock, lifecycleBlock, params.name, params.name, params.name)
364+
`, params.name, params.replicaCount, params.shardCount, params.nodeType, params.deletionProtectionEnabled, params.engineVersion, strBuilder.String(), zoneDistributionConfigBlock, persistenceBlock, lifecycleBlock, params.name, params.name, params.name)
320365
}

Diff for: website/docs/r/memorystore_instance.html.markdown

+1-1
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ The following arguments are supported:
280280

281281
* `engine_version` -
282282
(Optional)
283-
Optional. Immutable. Engine version of the instance.
283+
Optional. Engine version of the instance.
284284

285285
* `engine_configs` -
286286
(Optional)

0 commit comments

Comments
 (0)