This repository has been archived by the owner on Jan 13, 2023. It is now read-only.
forked from cloudflare/terraform-provider-cloudflare
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for changing TieredCacheSmartTopology (#46)
* create provider for TieredCacheSmartTopology * use latest shopify cloudflare-go fork
- Loading branch information
1 parent
ea760c6
commit c966c01
Showing
3 changed files
with
115 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
88 changes: 88 additions & 0 deletions
88
internal/provider/resource_cloudflare_zone_cache_tiered_cache_smart_topology.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package provider | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
"fmt" | ||
"strings" | ||
|
||
cloudflare "github.com/cloudflare/cloudflare-go" | ||
"github.com/hashicorp/terraform-plugin-log/tflog" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
) | ||
|
||
func resourceCloudflareZoneCacheTieredCacheSmartTopology() *schema.Resource { | ||
return &schema.Resource{ | ||
Schema: resourceCloudflareZoneCacheTieredCacheSmartTopologySchema(), | ||
CreateContext: resourceCloudflareZoneCacheTieredCacheSmartTopologyUpdate, | ||
ReadContext: resourceCloudflareZoneCacheTieredCacheSmartTopologyRead, | ||
UpdateContext: resourceCloudflareZoneCacheTieredCacheSmartTopologyUpdate, | ||
DeleteContext: resourceCloudflareZoneCacheTieredCacheSmartTopologyDelete, | ||
} | ||
} | ||
|
||
func resourceCloudflareZoneCacheTieredCacheSmartTopologyRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||
client := meta.(*cloudflare.API) | ||
|
||
tflog.Info(ctx, fmt.Sprintf("Reading Zone Cache TieredCacheSmartTopology %q", d.Id())) | ||
|
||
topology, err := client.TieredCacheSmartTopology(ctx, d.Id()) | ||
|
||
if err != nil { | ||
if strings.Contains(err.Error(), "HTTP status 404") { | ||
tflog.Info(ctx, fmt.Sprintf("Zone Cache TieredCacheSmartTopology for zone %q not found", d.Id())) | ||
d.SetId("") | ||
return nil | ||
} else { | ||
return diag.FromErr(fmt.Errorf("error reading cache TieredCacheSmartTopology for zone %q: %w", d.Id(), err)) | ||
} | ||
} | ||
|
||
value := topology.Value | ||
|
||
if err := d.Set("value", value); err != nil { | ||
return diag.FromErr(fmt.Errorf("failed to set value: %w", err)) | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func parseValue(value string) (cloudflare.TieredCacheSmartTopologyValue, error) { | ||
switch value { | ||
case "on": | ||
return cloudflare.TieredCacheSmartTopologyOn, nil | ||
case "off": | ||
return cloudflare.TieredCacheSmartTopologyOff, nil | ||
default: | ||
return cloudflare.TieredCacheSmartTopologyOff, errors.New("invalid value for TieredCacheSmartTopologyValue") | ||
} | ||
} | ||
|
||
func resourceCloudflareZoneCacheTieredCacheSmartTopologyUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||
client := meta.(*cloudflare.API) | ||
|
||
zoneID := d.Get("zone_id").(string) | ||
d.SetId(zoneID) | ||
|
||
value, err := parseValue(d.Get("value").(string)) | ||
if err != nil { | ||
return diag.FromErr(err) | ||
} | ||
tflog.Info(ctx, fmt.Sprintf("Setting Zone Cache TieredCacheSmartTopology to struct: %+v for zone ID: %q", value, d.Id())) | ||
|
||
_, err = client.UpdateTieredCacheSmartTopology(ctx, d.Id(), cloudflare.TieredCacheSmartTopologyUpdateOptions{Value: value}) | ||
|
||
if err != nil { | ||
return diag.FromErr(fmt.Errorf("error setting cache TieredCacheSmartTopology for zone %q: %w", d.Id(), err)) | ||
} | ||
|
||
return resourceCloudflareZoneCacheTieredCacheSmartTopologyRead(ctx, d, meta) | ||
} | ||
|
||
func resourceCloudflareZoneCacheTieredCacheSmartTopologyDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||
tflog.Info(ctx, fmt.Sprintf("Deleting Zone Cache TieredCacheSmartTopology for zone ID: %q", d.Id())) | ||
d.Set("value", cloudflare.TieredCacheSmartTopologyOff) | ||
|
||
return resourceCloudflareZoneCacheTieredCacheSmartTopologyUpdate(ctx, d, meta) | ||
} |
25 changes: 25 additions & 0 deletions
25
internal/provider/schema_cloudflare_zone_cache_tiered_cache_smart_topology.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package provider | ||
|
||
import ( | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
) | ||
|
||
func resourceCloudflareZoneCacheTieredCacheSmartTopologySchema() map[string]*schema.Schema { | ||
return map[string]*schema.Schema{ | ||
"zone_id": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
"value": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
ValidateFunc: validation.StringInSlice([]string{ | ||
"on", | ||
"off", | ||
}, false), | ||
}, | ||
} | ||
} |