Skip to content
This repository has been archived by the owner on Jan 13, 2023. It is now read-only.

Commit

Permalink
Add support for changing TieredCacheSmartTopology (#46)
Browse files Browse the repository at this point in the history
* create provider for TieredCacheSmartTopology

* use latest shopify cloudflare-go fork
  • Loading branch information
yknx4 authored and sbfaulkner committed Jun 20, 2022
1 parent ea760c6 commit c966c01
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 0 deletions.
2 changes: 2 additions & 0 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,8 @@ func New(version string) func() *schema.Provider {
"cloudflare_zone_lockdown": resourceCloudflareZoneLockdown(),
"cloudflare_zone_settings_override": resourceCloudflareZoneSettingsOverride(),
"cloudflare_zone": resourceCloudflareZone(),
/* Non Public below this line*/
"cloudflare_zone_cache_tiered_cache_smart_topology": resourceCloudflareZoneCacheTieredCacheSmartTopology(),
},
}

Expand Down
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)
}
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),
},
}
}

0 comments on commit c966c01

Please sign in to comment.