Skip to content

Commit 7db7cf0

Browse files
Add FlexCache fields to Volume (#15416) (#10976)
[upstream:24424cae53f67fcd08fc442bcaeabf9d725f48f5] Signed-off-by: Modular Magician <[email protected]>
1 parent 9be2b54 commit 7db7cf0

File tree

4 files changed

+419
-0
lines changed

4 files changed

+419
-0
lines changed

.changelog/15416.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
netapp: added `cache_parameters` field to `google_netapp_volume` resource
3+
```

google-beta/services/netapp/resource_netapp_volume.go

Lines changed: 346 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,85 @@ the parent Volume's 'capacity_gib'.`,
199199
},
200200
},
201201
},
202+
"cache_parameters": {
203+
Type: schema.TypeList,
204+
Optional: true,
205+
Description: `Cache parameters for the volume.`,
206+
MaxItems: 1,
207+
Elem: &schema.Resource{
208+
Schema: map[string]*schema.Schema{
209+
"cache_config": {
210+
Type: schema.TypeList,
211+
Optional: true,
212+
Description: `Optional. Configuration of the cache volume.`,
213+
MaxItems: 1,
214+
Elem: &schema.Resource{
215+
Schema: map[string]*schema.Schema{
216+
"cifs_change_notify_enabled": {
217+
Type: schema.TypeBool,
218+
Optional: true,
219+
Description: `Optional. Flag indicating whether a CIFS change notification is enabled for the FlexCache volume.`,
220+
},
221+
},
222+
},
223+
},
224+
"enable_global_file_lock": {
225+
Type: schema.TypeBool,
226+
Optional: true,
227+
Description: `Optional. Field indicating whether cache volume as global file lock enabled.`,
228+
},
229+
"peer_cluster_name": {
230+
Type: schema.TypeString,
231+
Optional: true,
232+
Description: `Required. Name of the origin volume's ONTAP cluster.`,
233+
},
234+
"peer_ip_addresses": {
235+
Type: schema.TypeList,
236+
Optional: true,
237+
Description: `Required. List of IC LIF addresses of the origin volume's ONTAP cluster.`,
238+
Elem: &schema.Schema{
239+
Type: schema.TypeString,
240+
},
241+
},
242+
"peer_svm_name": {
243+
Type: schema.TypeString,
244+
Optional: true,
245+
Description: `Required. Name of the origin volume's SVM.`,
246+
},
247+
"peer_volume_name": {
248+
Type: schema.TypeString,
249+
Optional: true,
250+
Description: `Required. Name of the origin volume for the cache volume.`,
251+
},
252+
"peering_command_expiry_time": {
253+
Type: schema.TypeString,
254+
Computed: true,
255+
Optional: true,
256+
Description: `Optional. Expiration time for the peering command to be executed on user's ONTAP. A timestamp in RFC3339 UTC "Zulu" format. Examples: "2023-06-22T09:13:01.617Z".`,
257+
},
258+
"cache_state": {
259+
Type: schema.TypeString,
260+
Computed: true,
261+
Description: `State of the cache volume indicating the peering status.`,
262+
},
263+
"command": {
264+
Type: schema.TypeString,
265+
Computed: true,
266+
Description: `Copy-paste-able commands to be used on user's ONTAP to accept peering requests.`,
267+
},
268+
"passphrase": {
269+
Type: schema.TypeString,
270+
Computed: true,
271+
Description: `Temporary passphrase generated to accept cluster peering command.`,
272+
},
273+
"state_details": {
274+
Type: schema.TypeString,
275+
Computed: true,
276+
Description: `Detailed description of the current cache state.`,
277+
},
278+
},
279+
},
280+
},
202281
"description": {
203282
Type: schema.TypeString,
204283
Optional: true,
@@ -913,6 +992,12 @@ func resourceNetappVolumeCreate(d *schema.ResourceData, meta interface{}) error
913992
} else if v, ok := d.GetOkExists("throughput_mibps"); !tpgresource.IsEmptyValue(reflect.ValueOf(throughputMibpsProp)) && (ok || !reflect.DeepEqual(v, throughputMibpsProp)) {
914993
obj["throughputMibps"] = throughputMibpsProp
915994
}
995+
cacheParametersProp, err := expandNetappVolumeCacheParameters(d.Get("cache_parameters"), d, config)
996+
if err != nil {
997+
return err
998+
} else if v, ok := d.GetOkExists("cache_parameters"); !tpgresource.IsEmptyValue(reflect.ValueOf(cacheParametersProp)) && (ok || !reflect.DeepEqual(v, cacheParametersProp)) {
999+
obj["cacheParameters"] = cacheParametersProp
1000+
}
9161001
blockDevicesProp, err := expandNetappVolumeBlockDevices(d.Get("block_devices"), d, config)
9171002
if err != nil {
9181003
return err
@@ -1141,6 +1226,9 @@ func resourceNetappVolumeRead(d *schema.ResourceData, meta interface{}) error {
11411226
if err := d.Set("hot_tier_size_used_gib", flattenNetappVolumeHotTierSizeUsedGib(res["hotTierSizeUsedGib"], d, config)); err != nil {
11421227
return fmt.Errorf("Error reading Volume: %s", err)
11431228
}
1229+
if err := d.Set("cache_parameters", flattenNetappVolumeCacheParameters(res["cacheParameters"], d, config)); err != nil {
1230+
return fmt.Errorf("Error reading Volume: %s", err)
1231+
}
11441232
if err := d.Set("block_devices", flattenNetappVolumeBlockDevices(res["blockDevices"], d, config)); err != nil {
11451233
return fmt.Errorf("Error reading Volume: %s", err)
11461234
}
@@ -1254,6 +1342,12 @@ func resourceNetappVolumeUpdate(d *schema.ResourceData, meta interface{}) error
12541342
} else if v, ok := d.GetOkExists("throughput_mibps"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, throughputMibpsProp)) {
12551343
obj["throughputMibps"] = throughputMibpsProp
12561344
}
1345+
cacheParametersProp, err := expandNetappVolumeCacheParameters(d.Get("cache_parameters"), d, config)
1346+
if err != nil {
1347+
return err
1348+
} else if v, ok := d.GetOkExists("cache_parameters"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, cacheParametersProp)) {
1349+
obj["cacheParameters"] = cacheParametersProp
1350+
}
12571351
blockDevicesProp, err := expandNetappVolumeBlockDevices(d.Get("block_devices"), d, config)
12581352
if err != nil {
12591353
return err
@@ -1336,6 +1430,10 @@ func resourceNetappVolumeUpdate(d *schema.ResourceData, meta interface{}) error
13361430
updateMask = append(updateMask, "throughputMibps")
13371431
}
13381432

1433+
if d.HasChange("cache_parameters") {
1434+
updateMask = append(updateMask, "cacheParameters")
1435+
}
1436+
13391437
if d.HasChange("block_devices") {
13401438
updateMask = append(updateMask, "blockDevices")
13411439
}
@@ -2239,6 +2337,96 @@ func flattenNetappVolumeHotTierSizeUsedGib(v interface{}, d *schema.ResourceData
22392337
return v
22402338
}
22412339

2340+
func flattenNetappVolumeCacheParameters(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2341+
if v == nil {
2342+
return nil
2343+
}
2344+
original := v.(map[string]interface{})
2345+
if len(original) == 0 {
2346+
return nil
2347+
}
2348+
transformed := make(map[string]interface{})
2349+
transformed["peer_volume_name"] =
2350+
flattenNetappVolumeCacheParametersPeerVolumeName(original["peerVolumeName"], d, config)
2351+
transformed["peer_cluster_name"] =
2352+
flattenNetappVolumeCacheParametersPeerClusterName(original["peerClusterName"], d, config)
2353+
transformed["peer_svm_name"] =
2354+
flattenNetappVolumeCacheParametersPeerSvmName(original["peerSvmName"], d, config)
2355+
transformed["peer_ip_addresses"] =
2356+
flattenNetappVolumeCacheParametersPeerIpAddresses(original["peerIpAddresses"], d, config)
2357+
transformed["enable_global_file_lock"] =
2358+
flattenNetappVolumeCacheParametersEnableGlobalFileLock(original["enableGlobalFileLock"], d, config)
2359+
transformed["peering_command_expiry_time"] =
2360+
flattenNetappVolumeCacheParametersPeeringCommandExpiryTime(original["peeringCommandExpiryTime"], d, config)
2361+
transformed["cache_state"] =
2362+
flattenNetappVolumeCacheParametersCacheState(original["cacheState"], d, config)
2363+
transformed["command"] =
2364+
flattenNetappVolumeCacheParametersCommand(original["command"], d, config)
2365+
transformed["passphrase"] =
2366+
flattenNetappVolumeCacheParametersPassphrase(original["passphrase"], d, config)
2367+
transformed["state_details"] =
2368+
flattenNetappVolumeCacheParametersStateDetails(original["stateDetails"], d, config)
2369+
transformed["cache_config"] =
2370+
flattenNetappVolumeCacheParametersCacheConfig(original["cacheConfig"], d, config)
2371+
return []interface{}{transformed}
2372+
}
2373+
func flattenNetappVolumeCacheParametersPeerVolumeName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2374+
return v
2375+
}
2376+
2377+
func flattenNetappVolumeCacheParametersPeerClusterName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2378+
return v
2379+
}
2380+
2381+
func flattenNetappVolumeCacheParametersPeerSvmName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2382+
return v
2383+
}
2384+
2385+
func flattenNetappVolumeCacheParametersPeerIpAddresses(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2386+
return v
2387+
}
2388+
2389+
func flattenNetappVolumeCacheParametersEnableGlobalFileLock(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2390+
return v
2391+
}
2392+
2393+
func flattenNetappVolumeCacheParametersPeeringCommandExpiryTime(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2394+
return v
2395+
}
2396+
2397+
func flattenNetappVolumeCacheParametersCacheState(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2398+
return v
2399+
}
2400+
2401+
func flattenNetappVolumeCacheParametersCommand(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2402+
return v
2403+
}
2404+
2405+
func flattenNetappVolumeCacheParametersPassphrase(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2406+
return v
2407+
}
2408+
2409+
func flattenNetappVolumeCacheParametersStateDetails(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2410+
return v
2411+
}
2412+
2413+
func flattenNetappVolumeCacheParametersCacheConfig(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2414+
if v == nil {
2415+
return nil
2416+
}
2417+
original := v.(map[string]interface{})
2418+
if len(original) == 0 {
2419+
return nil
2420+
}
2421+
transformed := make(map[string]interface{})
2422+
transformed["cifs_change_notify_enabled"] =
2423+
flattenNetappVolumeCacheParametersCacheConfigCifsChangeNotifyEnabled(original["cifsChangeNotifyEnabled"], d, config)
2424+
return []interface{}{transformed}
2425+
}
2426+
func flattenNetappVolumeCacheParametersCacheConfigCifsChangeNotifyEnabled(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
2427+
return v
2428+
}
2429+
22422430
func flattenNetappVolumeBlockDevices(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
22432431
if v == nil {
22442432
return v
@@ -3085,6 +3273,164 @@ func expandNetappVolumeThroughputMibps(v interface{}, d tpgresource.TerraformRes
30853273
return v, nil
30863274
}
30873275

3276+
func expandNetappVolumeCacheParameters(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3277+
if v == nil {
3278+
return nil, nil
3279+
}
3280+
l := v.([]interface{})
3281+
if len(l) == 0 || l[0] == nil {
3282+
return nil, nil
3283+
}
3284+
raw := l[0]
3285+
original := raw.(map[string]interface{})
3286+
transformed := make(map[string]interface{})
3287+
3288+
transformedPeerVolumeName, err := expandNetappVolumeCacheParametersPeerVolumeName(original["peer_volume_name"], d, config)
3289+
if err != nil {
3290+
return nil, err
3291+
} else if val := reflect.ValueOf(transformedPeerVolumeName); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3292+
transformed["peerVolumeName"] = transformedPeerVolumeName
3293+
}
3294+
3295+
transformedPeerClusterName, err := expandNetappVolumeCacheParametersPeerClusterName(original["peer_cluster_name"], d, config)
3296+
if err != nil {
3297+
return nil, err
3298+
} else if val := reflect.ValueOf(transformedPeerClusterName); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3299+
transformed["peerClusterName"] = transformedPeerClusterName
3300+
}
3301+
3302+
transformedPeerSvmName, err := expandNetappVolumeCacheParametersPeerSvmName(original["peer_svm_name"], d, config)
3303+
if err != nil {
3304+
return nil, err
3305+
} else if val := reflect.ValueOf(transformedPeerSvmName); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3306+
transformed["peerSvmName"] = transformedPeerSvmName
3307+
}
3308+
3309+
transformedPeerIpAddresses, err := expandNetappVolumeCacheParametersPeerIpAddresses(original["peer_ip_addresses"], d, config)
3310+
if err != nil {
3311+
return nil, err
3312+
} else if val := reflect.ValueOf(transformedPeerIpAddresses); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3313+
transformed["peerIpAddresses"] = transformedPeerIpAddresses
3314+
}
3315+
3316+
transformedEnableGlobalFileLock, err := expandNetappVolumeCacheParametersEnableGlobalFileLock(original["enable_global_file_lock"], d, config)
3317+
if err != nil {
3318+
return nil, err
3319+
} else if val := reflect.ValueOf(transformedEnableGlobalFileLock); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3320+
transformed["enableGlobalFileLock"] = transformedEnableGlobalFileLock
3321+
}
3322+
3323+
transformedPeeringCommandExpiryTime, err := expandNetappVolumeCacheParametersPeeringCommandExpiryTime(original["peering_command_expiry_time"], d, config)
3324+
if err != nil {
3325+
return nil, err
3326+
} else if val := reflect.ValueOf(transformedPeeringCommandExpiryTime); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3327+
transformed["peeringCommandExpiryTime"] = transformedPeeringCommandExpiryTime
3328+
}
3329+
3330+
transformedCacheState, err := expandNetappVolumeCacheParametersCacheState(original["cache_state"], d, config)
3331+
if err != nil {
3332+
return nil, err
3333+
} else if val := reflect.ValueOf(transformedCacheState); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3334+
transformed["cacheState"] = transformedCacheState
3335+
}
3336+
3337+
transformedCommand, err := expandNetappVolumeCacheParametersCommand(original["command"], d, config)
3338+
if err != nil {
3339+
return nil, err
3340+
} else if val := reflect.ValueOf(transformedCommand); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3341+
transformed["command"] = transformedCommand
3342+
}
3343+
3344+
transformedPassphrase, err := expandNetappVolumeCacheParametersPassphrase(original["passphrase"], d, config)
3345+
if err != nil {
3346+
return nil, err
3347+
} else if val := reflect.ValueOf(transformedPassphrase); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3348+
transformed["passphrase"] = transformedPassphrase
3349+
}
3350+
3351+
transformedStateDetails, err := expandNetappVolumeCacheParametersStateDetails(original["state_details"], d, config)
3352+
if err != nil {
3353+
return nil, err
3354+
} else if val := reflect.ValueOf(transformedStateDetails); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3355+
transformed["stateDetails"] = transformedStateDetails
3356+
}
3357+
3358+
transformedCacheConfig, err := expandNetappVolumeCacheParametersCacheConfig(original["cache_config"], d, config)
3359+
if err != nil {
3360+
return nil, err
3361+
} else if val := reflect.ValueOf(transformedCacheConfig); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3362+
transformed["cacheConfig"] = transformedCacheConfig
3363+
}
3364+
3365+
return transformed, nil
3366+
}
3367+
3368+
func expandNetappVolumeCacheParametersPeerVolumeName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3369+
return v, nil
3370+
}
3371+
3372+
func expandNetappVolumeCacheParametersPeerClusterName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3373+
return v, nil
3374+
}
3375+
3376+
func expandNetappVolumeCacheParametersPeerSvmName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3377+
return v, nil
3378+
}
3379+
3380+
func expandNetappVolumeCacheParametersPeerIpAddresses(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3381+
return v, nil
3382+
}
3383+
3384+
func expandNetappVolumeCacheParametersEnableGlobalFileLock(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3385+
return v, nil
3386+
}
3387+
3388+
func expandNetappVolumeCacheParametersPeeringCommandExpiryTime(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3389+
return v, nil
3390+
}
3391+
3392+
func expandNetappVolumeCacheParametersCacheState(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3393+
return v, nil
3394+
}
3395+
3396+
func expandNetappVolumeCacheParametersCommand(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3397+
return v, nil
3398+
}
3399+
3400+
func expandNetappVolumeCacheParametersPassphrase(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3401+
return v, nil
3402+
}
3403+
3404+
func expandNetappVolumeCacheParametersStateDetails(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3405+
return v, nil
3406+
}
3407+
3408+
func expandNetappVolumeCacheParametersCacheConfig(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3409+
if v == nil {
3410+
return nil, nil
3411+
}
3412+
l := v.([]interface{})
3413+
if len(l) == 0 || l[0] == nil {
3414+
return nil, nil
3415+
}
3416+
raw := l[0]
3417+
original := raw.(map[string]interface{})
3418+
transformed := make(map[string]interface{})
3419+
3420+
transformedCifsChangeNotifyEnabled, err := expandNetappVolumeCacheParametersCacheConfigCifsChangeNotifyEnabled(original["cifs_change_notify_enabled"], d, config)
3421+
if err != nil {
3422+
return nil, err
3423+
} else if val := reflect.ValueOf(transformedCifsChangeNotifyEnabled); val.IsValid() && !tpgresource.IsEmptyValue(val) {
3424+
transformed["cifsChangeNotifyEnabled"] = transformedCifsChangeNotifyEnabled
3425+
}
3426+
3427+
return transformed, nil
3428+
}
3429+
3430+
func expandNetappVolumeCacheParametersCacheConfigCifsChangeNotifyEnabled(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
3431+
return v, nil
3432+
}
3433+
30883434
func expandNetappVolumeBlockDevices(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
30893435
if v == nil {
30903436
return nil, nil

0 commit comments

Comments
 (0)