Skip to content

Commit 6845df4

Browse files
authored
put old snippets resource back (#272)
1 parent 6974010 commit 6845df4

19 files changed

+979
-0
lines changed

internal/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ import (
133133
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/schema_validation_settings"
134134
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/snippet"
135135
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/snippet_rules"
136+
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/snippets"
136137
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/spectrum_application"
137138
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/stream"
138139
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/stream_audio_track"
@@ -566,6 +567,7 @@ func (p *CloudflareProvider) Resources(ctx context.Context) []func() resource.Re
566567
observatory_scheduled_test.NewResource,
567568
hostname_tls_setting.NewResource,
568569
snippet.NewResource,
570+
snippets.NewResource, // deprecated.
569571
snippet_rules.NewResource,
570572
calls_sfu_app.NewResource,
571573
calls_turn_app.NewResource,
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package snippets
4+
5+
import (
6+
"context"
7+
"fmt"
8+
"io"
9+
"net/http"
10+
11+
"github.com/cloudflare/cloudflare-go/v5"
12+
"github.com/cloudflare/cloudflare-go/v5/option"
13+
"github.com/cloudflare/terraform-provider-cloudflare/internal/apijson"
14+
"github.com/cloudflare/terraform-provider-cloudflare/internal/logging"
15+
"github.com/hashicorp/terraform-plugin-framework/datasource"
16+
)
17+
18+
type SnippetsDataSource struct {
19+
client *cloudflare.Client
20+
}
21+
22+
var _ datasource.DataSourceWithConfigure = (*SnippetsDataSource)(nil)
23+
24+
func NewSnippetsDataSource() datasource.DataSource {
25+
return &SnippetsDataSource{}
26+
}
27+
28+
func (d *SnippetsDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
29+
resp.TypeName = req.ProviderTypeName + "_snippets"
30+
}
31+
32+
func (d *SnippetsDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
33+
if req.ProviderData == nil {
34+
return
35+
}
36+
37+
client, ok := req.ProviderData.(*cloudflare.Client)
38+
39+
if !ok {
40+
resp.Diagnostics.AddError(
41+
"unexpected resource configure type",
42+
fmt.Sprintf("Expected *cloudflare.Client, got: %T. Please report this issue to the provider developers.", req.ProviderData),
43+
)
44+
45+
return
46+
}
47+
48+
d.client = client
49+
}
50+
51+
func (d *SnippetsDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
52+
var data *SnippetsDataSourceModel
53+
54+
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
55+
56+
if resp.Diagnostics.HasError() {
57+
return
58+
}
59+
60+
params, diags := data.toReadParams(ctx)
61+
resp.Diagnostics.Append(diags...)
62+
if resp.Diagnostics.HasError() {
63+
return
64+
}
65+
66+
res := new(http.Response)
67+
env := SnippetsResultDataSourceEnvelope{*data}
68+
_, err := d.client.Snippets.Get(
69+
ctx,
70+
data.SnippetName.ValueString(),
71+
params,
72+
option.WithResponseBodyInto(&res),
73+
option.WithMiddleware(logging.Middleware(ctx)),
74+
)
75+
if err != nil {
76+
resp.Diagnostics.AddError("failed to make http request", err.Error())
77+
return
78+
}
79+
bytes, _ := io.ReadAll(res.Body)
80+
err = apijson.UnmarshalComputed(bytes, &env)
81+
if err != nil {
82+
resp.Diagnostics.AddError("failed to deserialize http request", err.Error())
83+
return
84+
}
85+
data = &env.Result
86+
87+
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
88+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package snippets
4+
5+
import (
6+
"context"
7+
8+
"github.com/cloudflare/cloudflare-go/v5"
9+
"github.com/cloudflare/cloudflare-go/v5/snippets"
10+
"github.com/hashicorp/terraform-plugin-framework-timetypes/timetypes"
11+
"github.com/hashicorp/terraform-plugin-framework/diag"
12+
"github.com/hashicorp/terraform-plugin-framework/types"
13+
)
14+
15+
type SnippetsResultDataSourceEnvelope struct {
16+
Result SnippetsDataSourceModel `json:"result,computed"`
17+
}
18+
19+
type SnippetsDataSourceModel struct {
20+
SnippetName types.String `tfsdk:"snippet_name" path:"snippet_name,required"`
21+
ZoneID types.String `tfsdk:"zone_id" path:"zone_id,required"`
22+
CreatedOn timetypes.RFC3339 `tfsdk:"created_on" json:"created_on,computed" format:"date-time"`
23+
ModifiedOn timetypes.RFC3339 `tfsdk:"modified_on" json:"modified_on,computed" format:"date-time"`
24+
}
25+
26+
func (m *SnippetsDataSourceModel) toReadParams(_ context.Context) (params snippets.SnippetGetParams, diags diag.Diagnostics) {
27+
params = snippets.SnippetGetParams{
28+
ZoneID: cloudflare.F(m.ZoneID.ValueString()),
29+
}
30+
31+
return
32+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package snippets
4+
5+
import (
6+
"context"
7+
8+
"github.com/hashicorp/terraform-plugin-framework-timetypes/timetypes"
9+
"github.com/hashicorp/terraform-plugin-framework/datasource"
10+
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
11+
)
12+
13+
var _ datasource.DataSourceWithConfigValidators = (*SnippetsDataSource)(nil)
14+
15+
func DataSourceSchema(ctx context.Context) schema.Schema {
16+
return schema.Schema{
17+
Attributes: map[string]schema.Attribute{
18+
"snippet_name": schema.StringAttribute{
19+
Description: "The identifying name of the snippet.",
20+
Required: true,
21+
},
22+
"zone_id": schema.StringAttribute{
23+
Description: "The unique ID of the zone.",
24+
Required: true,
25+
},
26+
"created_on": schema.StringAttribute{
27+
Description: "The timestamp of when the snippet was created.",
28+
Computed: true,
29+
CustomType: timetypes.RFC3339Type{},
30+
},
31+
"modified_on": schema.StringAttribute{
32+
Description: "The timestamp of when the snippet was last modified.",
33+
Computed: true,
34+
CustomType: timetypes.RFC3339Type{},
35+
},
36+
},
37+
}
38+
}
39+
40+
func (d *SnippetsDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
41+
resp.Schema = DataSourceSchema(ctx)
42+
}
43+
44+
func (d *SnippetsDataSource) ConfigValidators(_ context.Context) []datasource.ConfigValidator {
45+
return []datasource.ConfigValidator{}
46+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package snippets_test
4+
5+
import (
6+
"context"
7+
"testing"
8+
9+
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/snippets"
10+
"github.com/cloudflare/terraform-provider-cloudflare/internal/test_helpers"
11+
)
12+
13+
func TestSnippetsDataSourceModelSchemaParity(t *testing.T) {
14+
t.Parallel()
15+
model := (*snippets.SnippetsDataSourceModel)(nil)
16+
schema := snippets.DataSourceSchema(context.TODO())
17+
errs := test_helpers.ValidateDataSourceModelSchemaIntegrity(model, schema)
18+
errs.Report(t)
19+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package snippets_test
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
"github.com/cloudflare/terraform-provider-cloudflare/internal/acctest"
8+
"github.com/cloudflare/terraform-provider-cloudflare/internal/utils"
9+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-testing/terraform"
11+
)
12+
13+
func TestAccCloudflareSnippetsDataSource_Basic(t *testing.T) {
14+
t.Skip("Not implemented yet")
15+
rnd := utils.GenerateRandomResourceName()
16+
name := "cloudflare_snippets." + rnd
17+
18+
resource.Test(t, resource.TestCase{
19+
PreCheck: func() { acctest.TestAccPreCheck(t) },
20+
ProtoV6ProviderFactories: acctest.TestAccProtoV6ProviderFactories,
21+
Steps: []resource.TestStep{
22+
{
23+
Config: testAccSnippetsDataSourceConfig(rnd),
24+
Check: resource.ComposeTestCheckFunc(
25+
func(s *terraform.State) error {
26+
return errors.New("test not implemented")
27+
},
28+
resource.TestCheckResourceAttr(name, "some_string_attribute", "string_value"),
29+
),
30+
},
31+
},
32+
})
33+
}
34+
35+
func testAccSnippetsDataSourceConfig(rnd string) string {
36+
return acctest.LoadTestCase("datasource_basic.tf", rnd)
37+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package snippets
4+
5+
import (
6+
"context"
7+
"fmt"
8+
9+
"github.com/cloudflare/cloudflare-go/v5"
10+
"github.com/cloudflare/terraform-provider-cloudflare/internal/apijson"
11+
"github.com/cloudflare/terraform-provider-cloudflare/internal/customfield"
12+
"github.com/hashicorp/terraform-plugin-framework/attr"
13+
"github.com/hashicorp/terraform-plugin-framework/datasource"
14+
)
15+
16+
type SnippetsListDataSource struct {
17+
client *cloudflare.Client
18+
}
19+
20+
var _ datasource.DataSourceWithConfigure = (*SnippetsListDataSource)(nil)
21+
22+
func NewSnippetsListDataSource() datasource.DataSource {
23+
return &SnippetsListDataSource{}
24+
}
25+
26+
func (d *SnippetsListDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
27+
resp.TypeName = req.ProviderTypeName + "_snippets_list"
28+
}
29+
30+
func (d *SnippetsListDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
31+
if req.ProviderData == nil {
32+
return
33+
}
34+
35+
client, ok := req.ProviderData.(*cloudflare.Client)
36+
37+
if !ok {
38+
resp.Diagnostics.AddError(
39+
"unexpected resource configure type",
40+
fmt.Sprintf("Expected *cloudflare.Client, got: %T. Please report this issue to the provider developers.", req.ProviderData),
41+
)
42+
43+
return
44+
}
45+
46+
d.client = client
47+
}
48+
49+
func (d *SnippetsListDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
50+
var data *SnippetsListDataSourceModel
51+
52+
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
53+
54+
if resp.Diagnostics.HasError() {
55+
return
56+
}
57+
58+
params, diags := data.toListParams(ctx)
59+
resp.Diagnostics.Append(diags...)
60+
if resp.Diagnostics.HasError() {
61+
return
62+
}
63+
64+
env := SnippetsListResultListDataSourceEnvelope{}
65+
maxItems := int(data.MaxItems.ValueInt64())
66+
acc := []attr.Value{}
67+
if maxItems <= 0 {
68+
maxItems = 1000
69+
}
70+
page, err := d.client.Snippets.List(ctx, params)
71+
if err != nil {
72+
resp.Diagnostics.AddError("failed to make http request", err.Error())
73+
return
74+
}
75+
76+
for page != nil && len(page.Result) > 0 {
77+
bytes := []byte(page.JSON.RawJSON())
78+
err = apijson.UnmarshalComputed(bytes, &env)
79+
if err != nil {
80+
resp.Diagnostics.AddError("failed to unmarshal http request", err.Error())
81+
return
82+
}
83+
acc = append(acc, env.Result.Elements()...)
84+
if len(acc) >= maxItems {
85+
break
86+
}
87+
page, err = page.GetNextPage()
88+
if err != nil {
89+
resp.Diagnostics.AddError("failed to fetch next page", err.Error())
90+
return
91+
}
92+
}
93+
94+
acc = acc[:min(len(acc), maxItems)]
95+
result, diags := customfield.NewObjectListFromAttributes[SnippetsListResultDataSourceModel](ctx, acc)
96+
resp.Diagnostics.Append(diags...)
97+
data.Result = result
98+
99+
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
100+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package snippets
4+
5+
import (
6+
"context"
7+
8+
"github.com/cloudflare/cloudflare-go/v5"
9+
"github.com/cloudflare/cloudflare-go/v5/snippets"
10+
"github.com/cloudflare/terraform-provider-cloudflare/internal/customfield"
11+
"github.com/hashicorp/terraform-plugin-framework-timetypes/timetypes"
12+
"github.com/hashicorp/terraform-plugin-framework/diag"
13+
"github.com/hashicorp/terraform-plugin-framework/types"
14+
)
15+
16+
type SnippetsListResultListDataSourceEnvelope struct {
17+
Result customfield.NestedObjectList[SnippetsListResultDataSourceModel] `json:"result,computed"`
18+
}
19+
20+
type SnippetsListDataSourceModel struct {
21+
ZoneID types.String `tfsdk:"zone_id" path:"zone_id,required"`
22+
MaxItems types.Int64 `tfsdk:"max_items"`
23+
Result customfield.NestedObjectList[SnippetsListResultDataSourceModel] `tfsdk:"result"`
24+
}
25+
26+
func (m *SnippetsListDataSourceModel) toListParams(_ context.Context) (params snippets.SnippetListParams, diags diag.Diagnostics) {
27+
params = snippets.SnippetListParams{
28+
ZoneID: cloudflare.F(m.ZoneID.ValueString()),
29+
}
30+
31+
return
32+
}
33+
34+
type SnippetsListResultDataSourceModel struct {
35+
CreatedOn timetypes.RFC3339 `tfsdk:"created_on" json:"created_on,computed" format:"date-time"`
36+
SnippetName types.String `tfsdk:"snippet_name" json:"snippet_name,computed"`
37+
ModifiedOn timetypes.RFC3339 `tfsdk:"modified_on" json:"modified_on,computed" format:"date-time"`
38+
}

0 commit comments

Comments
 (0)