Skip to content

Commit e8d7f3b

Browse files
feat: feat(r2_data_catalog): add Terraform resource
* feat(r2_data_catalog): add Terraform resource
1 parent de21a25 commit e8d7f3b

17 files changed

Lines changed: 721 additions & 1 deletion

File tree

.stats.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 1986
22
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-9ba099b7936091cc984d2a24fc4d32c3ffcb1d71d86412c8c9084d201e16b3ac.yml
33
openapi_spec_hash: 45edc9a107cf5a5e3b204b230b0d336d
4-
config_hash: 5d8bd5002a6f78b6f162dc0420e905bf
4+
config_hash: 96b952e0e131fab925a95b84c093c64e
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
data "cloudflare_r2_data_catalog" "example_r2_data_catalog" {
2+
account_id = "0123456789abcdef0123456789abcdef"
3+
bucket_name = "my-data-bucket"
4+
}

examples/resources/cloudflare_pipeline/import.sh

100644100755
File mode changed.

examples/resources/cloudflare_pipeline_sink/import.sh

100644100755
File mode changed.

examples/resources/cloudflare_pipeline_stream/import.sh

100644100755
File mode changed.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
$ terraform import cloudflare_r2_data_catalog.example '<account_id>/<bucket_name>'
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
resource "cloudflare_r2_data_catalog" "example_r2_data_catalog" {
2+
account_id = "0123456789abcdef0123456789abcdef"
3+
bucket_name = "my-data-bucket"
4+
}

internal/provider.go

Lines changed: 3 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/r2_bucket_lock"
134134
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/r2_bucket_sippy"
135135
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/r2_custom_domain"
136+
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/r2_data_catalog"
136137
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/r2_managed_domain"
137138
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/rate_limit"
138139
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/regional_hostname"
@@ -546,6 +547,7 @@ func (p *CloudflareProvider) Resources(ctx context.Context) []func() resource.Re
546547
r2_bucket_event_notification.NewResource,
547548
r2_bucket_lock.NewResource,
548549
r2_bucket_sippy.NewResource,
550+
r2_data_catalog.NewResource,
549551
workers_for_platforms_dispatch_namespace.NewResource,
550552
zero_trust_dex_test.NewResource,
551553
zero_trust_device_managed_networks.NewResource,
@@ -855,6 +857,7 @@ func (p *CloudflareProvider) DataSources(ctx context.Context) []func() datasourc
855857
r2_bucket_event_notification.NewR2BucketEventNotificationDataSource,
856858
r2_bucket_lock.NewR2BucketLockDataSource,
857859
r2_bucket_sippy.NewR2BucketSippyDataSource,
860+
r2_data_catalog.NewR2DataCatalogDataSource,
858861
workers_for_platforms_dispatch_namespace.NewWorkersForPlatformsDispatchNamespaceDataSource,
859862
workers_for_platforms_dispatch_namespace.NewWorkersForPlatformsDispatchNamespacesDataSource,
860863
zero_trust_dex_test.NewZeroTrustDEXTestDataSource,
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package r2_data_catalog
4+
5+
import (
6+
"context"
7+
"fmt"
8+
"io"
9+
"net/http"
10+
11+
"github.com/cloudflare/cloudflare-go/v6"
12+
"github.com/cloudflare/cloudflare-go/v6/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 R2DataCatalogDataSource struct {
19+
client *cloudflare.Client
20+
}
21+
22+
var _ datasource.DataSourceWithConfigure = (*R2DataCatalogDataSource)(nil)
23+
24+
func NewR2DataCatalogDataSource() datasource.DataSource {
25+
return &R2DataCatalogDataSource{}
26+
}
27+
28+
func (d *R2DataCatalogDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
29+
resp.TypeName = req.ProviderTypeName + "_r2_data_catalog"
30+
}
31+
32+
func (d *R2DataCatalogDataSource) 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 *R2DataCatalogDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
52+
var data *R2DataCatalogDataSourceModel
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 := R2DataCatalogResultDataSourceEnvelope{*data}
68+
_, err := d.client.R2DataCatalog.Get(
69+
ctx,
70+
data.BucketName.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+
data.ID = data.BucketName
87+
88+
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
89+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
package r2_data_catalog
4+
5+
import (
6+
"context"
7+
8+
"github.com/cloudflare/cloudflare-go/v6"
9+
"github.com/cloudflare/cloudflare-go/v6/r2_data_catalog"
10+
"github.com/cloudflare/terraform-provider-cloudflare/internal/customfield"
11+
"github.com/hashicorp/terraform-plugin-framework/diag"
12+
"github.com/hashicorp/terraform-plugin-framework/types"
13+
)
14+
15+
type R2DataCatalogResultDataSourceEnvelope struct {
16+
Result R2DataCatalogDataSourceModel `json:"result,computed"`
17+
}
18+
19+
type R2DataCatalogDataSourceModel struct {
20+
ID types.String `tfsdk:"id" path:"bucket_name,computed"`
21+
BucketName types.String `tfsdk:"bucket_name" path:"bucket_name,required"`
22+
AccountID types.String `tfsdk:"account_id" path:"account_id,required"`
23+
Bucket types.String `tfsdk:"bucket" json:"bucket,computed"`
24+
CredentialStatus types.String `tfsdk:"credential_status" json:"credential_status,computed"`
25+
Name types.String `tfsdk:"name" json:"name,computed"`
26+
Status types.String `tfsdk:"status" json:"status,computed"`
27+
MaintenanceConfig customfield.NestedObject[R2DataCatalogMaintenanceConfigDataSourceModel] `tfsdk:"maintenance_config" json:"maintenance_config,computed"`
28+
}
29+
30+
func (m *R2DataCatalogDataSourceModel) toReadParams(_ context.Context) (params r2_data_catalog.R2DataCatalogGetParams, diags diag.Diagnostics) {
31+
params = r2_data_catalog.R2DataCatalogGetParams{
32+
AccountID: cloudflare.F(m.AccountID.ValueString()),
33+
}
34+
35+
return
36+
}
37+
38+
type R2DataCatalogMaintenanceConfigDataSourceModel struct {
39+
Compaction customfield.NestedObject[R2DataCatalogMaintenanceConfigCompactionDataSourceModel] `tfsdk:"compaction" json:"compaction,computed"`
40+
SnapshotExpiration customfield.NestedObject[R2DataCatalogMaintenanceConfigSnapshotExpirationDataSourceModel] `tfsdk:"snapshot_expiration" json:"snapshot_expiration,computed"`
41+
}
42+
43+
type R2DataCatalogMaintenanceConfigCompactionDataSourceModel struct {
44+
State types.String `tfsdk:"state" json:"state,computed"`
45+
TargetSizeMB types.String `tfsdk:"target_size_mb" json:"target_size_mb,computed"`
46+
}
47+
48+
type R2DataCatalogMaintenanceConfigSnapshotExpirationDataSourceModel struct {
49+
MaxSnapshotAge types.String `tfsdk:"max_snapshot_age" json:"max_snapshot_age,computed"`
50+
MinSnapshotsToKeep types.Int64 `tfsdk:"min_snapshots_to_keep" json:"min_snapshots_to_keep,computed"`
51+
State types.String `tfsdk:"state" json:"state,computed"`
52+
}

0 commit comments

Comments
 (0)