Skip to content

Commit 6974010

Browse files
authored
fix: re-add ruleset and fix up snippet
* re-add ruleset * snippet fixes * snippet fixes
1 parent fcc2200 commit 6974010

File tree

99 files changed

+6583
-13
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

99 files changed

+6583
-13
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
data "cloudflare_ruleset" "example_ruleset" {
2+
ruleset_id = "2f2feab2026849078ba485f918791bdc"
3+
account_id = "account_id"
4+
zone_id = "zone_id"
5+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
data "cloudflare_rulesets" "example_rulesets" {
2+
account_id = "account_id"
3+
zone_id = "zone_id"
4+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
$ terraform import cloudflare_ruleset.example '<{accounts|zones}/{account_id|zone_id}>/<ruleset_id>'
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
resource "cloudflare_ruleset" "example_ruleset" {
2+
kind = "root"
3+
name = "My ruleset"
4+
phase = "http_request_firewall_custom"
5+
zone_id = "zone_id"
6+
description = "My ruleset to execute managed rulesets"
7+
rules = [{
8+
action = "block"
9+
action_parameters = {
10+
response = {
11+
content = <<EOT
12+
{
13+
"success": false,
14+
"error": "you have been blocked"
15+
}
16+
EOT
17+
content_type = "application/json"
18+
status_code = 400
19+
}
20+
}
21+
description = "Block when the IP address is not 1.1.1.1"
22+
enabled = true
23+
exposed_credential_check = {
24+
password_expression = "url_decode(http.request.body.form[\\\"password\\\"][0])"
25+
username_expression = "url_decode(http.request.body.form[\\\"username\\\"][0])"
26+
}
27+
expression = "ip.src ne 1.1.1.1"
28+
logging = {
29+
enabled = true
30+
}
31+
ratelimit = {
32+
characteristics = ["ip.src"]
33+
period = 60
34+
counting_expression = "http.request.body.raw eq \"abcd\""
35+
mitigation_timeout = 600
36+
requests_per_period = 1000
37+
requests_to_origin = true
38+
score_per_period = 400
39+
score_response_header_name = "my-score"
40+
}
41+
ref = "my_ref"
42+
}]
43+
}

internal/provider.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import (
77
"fmt"
88
"os"
99
"regexp"
10-
"github.com/cloudflare/terraform-provider-cloudflare/internal/consts"
10+
1111
"github.com/cloudflare/cloudflare-go/v5"
1212
"github.com/cloudflare/cloudflare-go/v5/option"
13+
"github.com/cloudflare/terraform-provider-cloudflare/internal/consts"
1314
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/access_rule"
1415
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/account"
1516
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/account_api_token_permission_groups"
@@ -126,6 +127,7 @@ import (
126127
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/regional_tiered_cache"
127128
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/registrar_domain"
128129
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/resource_group"
130+
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/ruleset"
129131
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/schema_validation_operation_settings"
130132
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/schema_validation_schemas"
131133
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/schema_validation_settings"
@@ -218,9 +220,9 @@ import (
218220
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/zone_hold"
219221
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/zone_lockdown"
220222
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/zone_setting"
223+
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/zone_subscription"
221224
"github.com/cloudflare/terraform-provider-cloudflare/internal/utils"
222225
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
223-
"github.com/cloudflare/terraform-provider-cloudflare/internal/services/zone_subscription"
224226
"github.com/hashicorp/terraform-plugin-framework/datasource"
225227
"github.com/hashicorp/terraform-plugin-framework/path"
226228
"github.com/hashicorp/terraform-plugin-framework/provider"
@@ -468,6 +470,7 @@ func (p *CloudflareProvider) Resources(ctx context.Context) []func() resource.Re
468470
api_shield_schema.NewResource,
469471
managed_transforms.NewResource,
470472
page_shield_policy.NewResource,
473+
ruleset.NewResource,
471474
url_normalization_settings.NewResource,
472475
spectrum_application.NewResource,
473476
regional_hostname.NewResource,
@@ -723,6 +726,8 @@ func (p *CloudflareProvider) DataSources(ctx context.Context) []func() datasourc
723726
page_shield_scripts.NewPageShieldScriptsListDataSource,
724727
page_shield_cookies.NewPageShieldCookiesDataSource,
725728
page_shield_cookies.NewPageShieldCookiesListDataSource,
729+
ruleset.NewRulesetDataSource,
730+
ruleset.NewRulesetsDataSource,
726731
url_normalization_settings.NewURLNormalizationSettingsDataSource,
727732
spectrum_application.NewSpectrumApplicationDataSource,
728733
spectrum_application.NewSpectrumApplicationsDataSource,
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 ruleset
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 RulesetDataSource struct {
19+
client *cloudflare.Client
20+
}
21+
22+
var _ datasource.DataSourceWithConfigure = (*RulesetDataSource)(nil)
23+
24+
func NewRulesetDataSource() datasource.DataSource {
25+
return &RulesetDataSource{}
26+
}
27+
28+
func (d *RulesetDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
29+
resp.TypeName = req.ProviderTypeName + "_ruleset"
30+
}
31+
32+
func (d *RulesetDataSource) 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 *RulesetDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
52+
var data *RulesetDataSourceModel
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 := RulesetResultDataSourceEnvelope{*data}
68+
_, err := d.client.Rulesets.Get(
69+
ctx,
70+
data.RulesetID.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+
}

0 commit comments

Comments
 (0)