diff --git a/.changelog/2083.txt b/.changelog/2083.txt
new file mode 100644
index 0000000000..8037038862
--- /dev/null
+++ b/.changelog/2083.txt
@@ -0,0 +1,3 @@
+```release-note:enhancement
+resource/cloudflare_pages_project: adds support for `always_use_latest_compatibility_date`, `fail_open`, `service_binding` and `usage_model`
+```
\ No newline at end of file
diff --git a/docs/resources/pages_project.md b/docs/resources/pages_project.md
index 359a357c31..d5ec46a7ad 100644
--- a/docs/resources/pages_project.md
+++ b/docs/resources/pages_project.md
@@ -148,23 +148,40 @@ Optional:
### Nested Schema for `deployment_configs`
-Optional:
+Required:
-- `preview` (Block List, Max: 1) Configuration for preview deploys. (see [below for nested schema](#nestedblock--deployment_configs--preview))
-- `production` (Block List, Max: 1) Configuration for production deploys. (see [below for nested schema](#nestedblock--deployment_configs--production))
+- `preview` (Block List, Min: 1, Max: 1) Configuration for preview deploys. (see [below for nested schema](#nestedblock--deployment_configs--preview))
+- `production` (Block List, Min: 1, Max: 1) Configuration for production deploys. (see [below for nested schema](#nestedblock--deployment_configs--production))
### Nested Schema for `deployment_configs.preview`
Optional:
+- `always_use_latest_compatibility_date` (Boolean) Use latest compatibility date for Pages Functions. Defaults to `false`.
- `compatibility_date` (String) Compatibility date used for Pages Functions.
- `compatibility_flags` (List of String) Compatibility flags used for Pages Functions.
- `d1_databases` (Map of String) D1 Databases used for Pages Functions.
- `durable_object_namespaces` (Map of String) Durable Object namespaces used for Pages Functions.
- `environment_variables` (Map of String) Environment variables for Pages Functions.
+- `fail_open` (Boolean) Fail open used for Pages Functions. Defaults to `false`.
- `kv_namespaces` (Map of String) KV namespaces used for Pages Functions.
- `r2_buckets` (Map of String) R2 Buckets used for Pages Functions.
+- `service_binding` (Block Set) Services used for Pages Functions. (see [below for nested schema](#nestedblock--deployment_configs--preview--service_binding))
+- `usage_model` (String) Usage model used for Pages Functions. Defaults to `bundled`.
+
+
+### Nested Schema for `deployment_configs.preview.service_binding`
+
+Required:
+
+- `name` (String) The global variable for the binding in your Worker code.
+- `service` (String) The name of the Worker to bind to.
+
+Optional:
+
+- `environment` (String) The name of the Worker environment to bind to.
+
@@ -172,13 +189,30 @@ Optional:
Optional:
+- `always_use_latest_compatibility_date` (Boolean) Use latest compatibility date for Pages Functions. Defaults to `false`.
- `compatibility_date` (String) Compatibility date used for Pages Functions.
- `compatibility_flags` (List of String) Compatibility flags used for Pages Functions.
- `d1_databases` (Map of String) D1 Databases used for Pages Functions.
- `durable_object_namespaces` (Map of String) Durable Object namespaces used for Pages Functions.
- `environment_variables` (Map of String) Environment variables for Pages Functions.
+- `fail_open` (Boolean) Fail open used for Pages Functions. Defaults to `false`.
- `kv_namespaces` (Map of String) KV namespaces used for Pages Functions.
- `r2_buckets` (Map of String) R2 Buckets used for Pages Functions.
+- `service_binding` (Block Set) Services used for Pages Functions. (see [below for nested schema](#nestedblock--deployment_configs--production--service_binding))
+- `usage_model` (String) Usage model used for Pages Functions. Defaults to `bundled`.
+
+
+### Nested Schema for `deployment_configs.production.service_binding`
+
+Required:
+
+- `name` (String) The global variable for the binding in your Worker code.
+- `service` (String) The name of the Worker to bind to.
+
+Optional:
+
+- `environment` (String) The name of the Worker environment to bind to.
+
diff --git a/internal/provider/resource_cloudflare_pages_project.go b/internal/provider/resource_cloudflare_pages_project.go
index fabd9702ea..7dbc33d4eb 100644
--- a/internal/provider/resource_cloudflare_pages_project.go
+++ b/internal/provider/resource_cloudflare_pages_project.go
@@ -3,7 +3,6 @@ package provider
import (
"context"
"fmt"
- "reflect"
"strings"
"time"
@@ -34,15 +33,19 @@ func resourceCloudflarePagesProject() *schema.Resource {
func buildDeploymentConfig(environment interface{}) cloudflare.PagesProjectDeploymentConfigEnvironment {
config := cloudflare.PagesProjectDeploymentConfigEnvironment{}
parsed := environment.(map[string]interface{})
+ deploymentVariables := cloudflare.EnvironmentVariableMap{}
for key, value := range parsed {
switch key {
case "environment_variables":
- deploymentVariables := cloudflare.EnvironmentVariableMap{}
variables := value.(map[string]interface{})
for i, variable := range variables {
- deploymentVariables[i] = &cloudflare.EnvironmentVariable{Value: variable.(string)}
+ envVar := cloudflare.EnvironmentVariable{
+ Value: variable.(string),
+ Type: cloudflare.PlainText,
+ }
+ deploymentVariables[i] = &envVar
}
- config.EnvVars = deploymentVariables
+
break
case "kv_namespaces":
namespace := cloudflare.NamespaceBindingMap{}
@@ -84,21 +87,47 @@ func buildDeploymentConfig(environment interface{}) cloudflare.PagesProjectDeplo
config.CompatibilityFlags = append(config.CompatibilityFlags, item.(string))
}
break
+ case "fail_open":
+ config.FailOpen = value.(bool)
+ break
+ case "always_use_latest_compatibility_date":
+ config.AlwaysUseLatestCompatibilityDate = value.(bool)
+ break
+ case "usage_model":
+ config.UsageModel = cloudflare.UsageModel(value.(string))
+ break
+ case "service_binding":
+ serviceMap := cloudflare.ServiceBindingMap{}
+ for _, item := range value.(*schema.Set).List() {
+ data := item.(map[string]interface{})
+ serviceMap[data["name"].(string)] = &cloudflare.ServiceBinding{
+ Service: data["service"].(string),
+ Environment: data["environment"].(string),
+ }
+ }
+ config.ServiceBindings = serviceMap
+ break
}
}
-
+ config.EnvVars = deploymentVariables
return config
}
-func parseDeployementConfig(deployment cloudflare.PagesProjectDeploymentConfigEnvironment) (returnValue []map[string]interface{}) {
+func parseDeploymentConfig(deployment cloudflare.PagesProjectDeploymentConfigEnvironment) (returnValue []map[string]interface{}) {
config := make(map[string]interface{})
config["compatibility_date"] = deployment.CompatibilityDate
config["compatibility_flags"] = deployment.CompatibilityFlags
+ config["fail_open"] = deployment.FailOpen
+ config["always_use_latest_compatibility_date"] = deployment.AlwaysUseLatestCompatibilityDate
+ config["usage_model"] = deployment.UsageModel
+
deploymentVars := map[string]string{}
for key, value := range deployment.EnvVars {
- deploymentVars[key] = value.Value
+ if value.Type == cloudflare.PlainText {
+ deploymentVars[key] = value.Value
+ }
}
config["environment_variables"] = deploymentVars
@@ -126,6 +155,16 @@ func parseDeployementConfig(deployment cloudflare.PagesProjectDeploymentConfigEn
}
config["d1_databases"] = deploymentVars
+ serviceBindings := &schema.Set{F: schema.HashResource(serviceBindingResource)}
+ for key, value := range deployment.ServiceBindings {
+ serviceBindings.Add(map[string]interface{}{
+ "name": key,
+ "service": value.Service,
+ "environment": value.Environment,
+ })
+ }
+ config["service_binding"] = serviceBindings
+
returnValue = append(returnValue, config)
return
}
@@ -228,7 +267,7 @@ func resourceCloudflarePagesProjectRead(ctx context.Context, d *schema.ResourceD
d.Set("created_on", project.CreatedOn.Format(time.RFC3339))
if project.Source != nil {
- source := []map[string]interface{}{}
+ var source []map[string]interface{}
source = append(source, map[string]interface{}{
"type": project.Source.Type,
"config": []map[string]interface{}{
@@ -250,7 +289,7 @@ func resourceCloudflarePagesProjectRead(ctx context.Context, d *schema.ResourceD
}
emptyProjectBuildConfig := cloudflare.PagesProjectBuildConfig{}
if project.BuildConfig != emptyProjectBuildConfig {
- buildConfig := []map[string]interface{}{}
+ var buildConfig []map[string]interface{}
buildConfig = append(buildConfig, map[string]interface{}{
"build_command": project.BuildConfig.BuildCommand,
"destination_dir": project.BuildConfig.DestinationDir,
@@ -262,21 +301,12 @@ func resourceCloudflarePagesProjectRead(ctx context.Context, d *schema.ResourceD
d.Set("build_config", buildConfig)
}
- emptyDeploymentConfig := cloudflare.PagesProjectDeploymentConfigs{}
- if !reflect.DeepEqual(project.DeploymentConfigs, emptyDeploymentConfig) {
- deploymentConfigs := []map[string]interface{}{}
- deploymentConfig := make(map[string]interface{})
- emptyDeploymentEnviroment := cloudflare.PagesProjectDeploymentConfigEnvironment{}
- if !reflect.DeepEqual(project.DeploymentConfigs.Preview, emptyDeploymentEnviroment) {
- deploymentConfig["preview"] = parseDeployementConfig(project.DeploymentConfigs.Preview)
- }
-
- if !reflect.DeepEqual(project.DeploymentConfigs.Production, emptyDeploymentEnviroment) {
- deploymentConfig["production"] = parseDeployementConfig(project.DeploymentConfigs.Production)
- }
- deploymentConfigs = append(deploymentConfigs, deploymentConfig)
- d.Set("deployment_configs", deploymentConfigs)
- }
+ var deploymentConfigs []map[string]interface{}
+ deploymentConfig := make(map[string]interface{})
+ deploymentConfig["preview"] = parseDeploymentConfig(project.DeploymentConfigs.Preview)
+ deploymentConfig["production"] = parseDeploymentConfig(project.DeploymentConfigs.Production)
+ deploymentConfigs = append(deploymentConfigs, deploymentConfig)
+ d.Set("deployment_configs", deploymentConfigs)
return nil
}
diff --git a/internal/provider/resource_cloudflare_pages_project_test.go b/internal/provider/resource_cloudflare_pages_project_test.go
index c7c79ed4cf..167172eb53 100644
--- a/internal/provider/resource_cloudflare_pages_project_test.go
+++ b/internal/provider/resource_cloudflare_pages_project_test.go
@@ -8,11 +8,28 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)
+const testPagesProjectEmptyDeploymentConfig = `
+deployment_configs {
+ preview {
+ compatibility_date = "2022-08-15"
+ compatibility_flags = []
+ always_use_latest_compatibility_date = true
+ usage_model = "unbound"
+ }
+ production {
+ compatibility_date = "2022-08-15"
+ compatibility_flags = []
+ always_use_latest_compatibility_date = false
+ usage_model = "unbound"
+ }
+}
+`
+
func testPagesProjectSource(resourceID, accountID, projectName, repoOwner, repoName string) string {
return fmt.Sprintf(`
resource "cloudflare_pages_project" "%[1]s" {
account_id = "%[2]s"
- name = "%[3]s"
+ name = "%[1]s"
production_branch = "main"
source {
type = "github"
@@ -26,18 +43,18 @@ func testPagesProjectSource(resourceID, accountID, projectName, repoOwner, repoN
preview_deployment_setting = "custom"
preview_branch_includes = ["dev","preview"]
preview_branch_excludes = ["main", "prod"]
-
}
}
+ %[6]s
}
- `, resourceID, accountID, projectName, repoOwner, repoName)
+ `, resourceID, accountID, projectName, repoOwner, repoName, testPagesProjectEmptyDeploymentConfig)
}
-func testPagesProjectBuildConfig(resourceID, accountID, projectName, repoOwner, repoName string) string {
+func testPagesProjectBuildConfig(resourceID, accountID string) string {
return fmt.Sprintf(`
resource "cloudflare_pages_project" "%[1]s" {
account_id = "%[2]s"
- name = "%[3]s"
+ name = "%[1]s"
production_branch = "main"
build_config {
build_command = "npm run build"
@@ -46,8 +63,9 @@ func testPagesProjectBuildConfig(resourceID, accountID, projectName, repoOwner,
web_analytics_tag = "cee1c73f6e4743d0b5e6bb1a0bcaabcc"
web_analytics_token = "021e1057c18547eca7b79f2516f06o7x"
}
+ %[4]s
}
- `, resourceID, accountID, projectName, repoOwner, repoName)
+ `, resourceID, accountID, resourceID, testPagesProjectEmptyDeploymentConfig)
}
func testPagesProjectDeploymentConfig(resourceID, accountID, projectName string) string {
@@ -73,8 +91,16 @@ func testPagesProjectDeploymentConfig(resourceID, accountID, projectName string)
d1_databases = {
D1_BINDING = "445e2955-951a-4358-a35b-a4d0c813f63"
}
+ service_binding {
+ name = "MY_SERVICE_BINDING"
+ service = "my-service"
+ environment = "preview"
+ }
compatibility_date = "2022-08-15"
compatibility_flags = ["preview_flag"]
+ fail_open = true
+ always_use_latest_compatibility_date = true
+ usage_model = "unbound"
}
production {
environment_variables = {
@@ -97,8 +123,16 @@ func testPagesProjectDeploymentConfig(resourceID, accountID, projectName string)
D1_BINDING_1 = "445e2955-951a-4358-a35b-a4d0c813f63"
D1_BINDING_2 = "a399414b-c697-409a-a688-377db6433cd9"
}
+ service_binding {
+ name = "MY_SERVICE_BINDING"
+ service = "my-service"
+ environment = "production"
+ }
compatibility_date = "2022-08-16"
compatibility_flags = ["production_flag", "second flag"]
+ fail_open = true
+ always_use_latest_compatibility_date = false
+ usage_model = "bundled"
}
}
}
@@ -111,70 +145,9 @@ func testPagesProjectDirectUpload(resourceID, accountID string) string {
account_id = "%[2]s"
name = "%[1]s"
production_branch = "main"
+ %[3]s
}
- `, resourceID, accountID)
-}
-
-func testPagesProjectPreviewOnly(resourceID, accountID, projectName string) string {
- return fmt.Sprintf(`
- resource "cloudflare_pages_project" "%[1]s" {
- account_id = "%[2]s"
- name = "%[3]s"
- production_branch = "main"
- deployment_configs {
- preview {
- environment_variables = {
- ENVIRONMENT = "preview"
- }
- kv_namespaces = {
- KV_BINDING = "5eb63bbbe01eeed093cb22bb8f5acdc3"
- }
- durable_object_namespaces = {
- DO_BINDING = "5eb63bbbe01eeed093cb22bb8f5acdc3"
- }
- r2_buckets = {
- R2_BINDING = "some-bucket"
- }
- d1_databases = {
- D1_BINDING = "445e2955-951a-4358-a35b-a4d0c813f63"
- }
- compatibility_date = "2022-08-15"
- compatibility_flags = ["preview_flag"]
- }
- }
- }
- `, resourceID, accountID, projectName)
-}
-
-func testPagesProjectProductionOnly(resourceID, accountID, projectName string) string {
- return fmt.Sprintf(`
- resource "cloudflare_pages_project" "%[1]s" {
- account_id = "%[2]s"
- name = "%[3]s"
- production_branch = "main"
- deployment_configs {
- production {
- environment_variables = {
- ENVIRONMENT = "preview"
- }
- kv_namespaces = {
- KV_BINDING = "5eb63bbbe01eeed093cb22bb8f5acdc3"
- }
- durable_object_namespaces = {
- DO_BINDING = "5eb63bbbe01eeed093cb22bb8f5acdc3"
- }
- r2_buckets = {
- R2_BINDING = "some-bucket"
- }
- d1_databases = {
- D1_BINDING = "445e2955-951a-4358-a35b-a4d0c813f63"
- }
- compatibility_date = "2022-08-15"
- compatibility_flags = ["preview_flag"]
- }
- }
- }
- `, resourceID, accountID, projectName)
+ `, resourceID, accountID, testPagesProjectEmptyDeploymentConfig)
}
func TestAccCloudflarePagesProject_Basic(t *testing.T) {
@@ -226,8 +199,6 @@ func TestAccCloudflarePagesProject_BuildConfig(t *testing.T) {
rnd := generateRandomResourceName()
name := "cloudflare_pages_project." + rnd
accountID := os.Getenv("CLOUDFLARE_ACCOUNT_ID")
- pagesOwner := os.Getenv("CLOUDFLARE_PAGES_OWNER")
- pagesRepo := os.Getenv("CLOUDFLARE_PAGES_REPO")
resource.Test(t, resource.TestCase{
PreCheck: func() {
@@ -237,7 +208,7 @@ func TestAccCloudflarePagesProject_BuildConfig(t *testing.T) {
ProviderFactories: providerFactories,
Steps: []resource.TestStep{
{
- Config: testPagesProjectBuildConfig(rnd, accountID, rnd, pagesOwner, pagesRepo),
+ Config: testPagesProjectBuildConfig(rnd, accountID),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(name, "name", rnd),
resource.TestCheckResourceAttr(name, "account_id", accountID),
@@ -290,6 +261,9 @@ func TestAccCloudflarePagesProject_DeploymentConfig(t *testing.T) {
resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.r2_buckets.%", "1"),
resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.r2_buckets.R2_BINDING", "some-bucket"),
+ resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.fail_open", "true"),
+ resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.always_use_latest_compatibility_date", "true"),
+ resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.usage_model", "unbound"),
// Production
resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.environment_variables.%", "2"),
@@ -316,6 +290,9 @@ func TestAccCloudflarePagesProject_DeploymentConfig(t *testing.T) {
resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.compatibility_flags.#", "2"),
resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.compatibility_flags.0", "production_flag"),
resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.compatibility_flags.1", "second flag"),
+ resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.fail_open", "true"),
+ resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.always_use_latest_compatibility_date", "false"),
+ resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.usage_model", "bundled"),
),
},
},
@@ -346,91 +323,3 @@ func TestAccCloudflarePagesProject_DirectUpload(t *testing.T) {
},
})
}
-
-func TestAccCloudflarePagesProject_PreviewOnly(t *testing.T) {
- t.Skip("Skipping Pages acceptance tests pending investigation into automating the setup and teardown")
-
- rnd := generateRandomResourceName()
- name := "cloudflare_pages_project." + rnd
- accountID := os.Getenv("CLOUDFLARE_ACCOUNT_ID")
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() {
- testAccPreCheck(t)
- testAccPreCheckPages(t)
- },
- ProviderFactories: providerFactories,
- Steps: []resource.TestStep{
- {
- Config: testPagesProjectPreviewOnly(rnd, accountID, rnd),
- Check: resource.ComposeTestCheckFunc(
- resource.TestCheckResourceAttr(name, "name", rnd),
- resource.TestCheckResourceAttr(name, "account_id", accountID),
- resource.TestCheckResourceAttr(name, "production_branch", "main"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.compatibility_date", "2022-08-15"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.compatibility_flags.#", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.compatibility_flags.0", "preview_flag"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.environment_variables.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.environment_variables.ENVIRONMENT", "preview"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.kv_namespaces.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.kv_namespaces.KV_BINDING", "5eb63bbbe01eeed093cb22bb8f5acdc3"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.durable_object_namespaces.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.durable_object_namespaces.DO_BINDING", "5eb63bbbe01eeed093cb22bb8f5acdc3"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.d1_databases.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.d1_databases.D1_BINDING", "445e2955-951a-4358-a35b-a4d0c813f63"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.r2_buckets.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.preview.0.r2_buckets.R2_BINDING", "some-bucket"),
- ),
- },
- },
- })
-}
-
-func TestAccCloudflarePagesProject_ProductionOnly(t *testing.T) {
- t.Skip("Skipping Pages acceptance tests pending investigation into automating the setup and teardown")
-
- rnd := generateRandomResourceName()
- name := "cloudflare_pages_project." + rnd
- accountID := os.Getenv("CLOUDFLARE_ACCOUNT_ID")
-
- resource.Test(t, resource.TestCase{
- PreCheck: func() {
- testAccPreCheck(t)
- testAccPreCheckPages(t)
- },
- ProviderFactories: providerFactories,
- Steps: []resource.TestStep{
- {
- Config: testPagesProjectProductionOnly(rnd, accountID, rnd),
- Check: resource.ComposeTestCheckFunc(
- resource.TestCheckResourceAttr(name, "name", rnd),
- resource.TestCheckResourceAttr(name, "account_id", accountID),
- resource.TestCheckResourceAttr(name, "production_branch", "main"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.compatibility_date", "2022-08-15"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.compatibility_flags.#", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.compatibility_flags.0", "preview_flag"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.environment_variables.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.environment_variables.ENVIRONMENT", "preview"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.kv_namespaces.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.kv_namespaces.KV_BINDING", "5eb63bbbe01eeed093cb22bb8f5acdc3"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.durable_object_namespaces.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.durable_object_namespaces.DO_BINDING", "5eb63bbbe01eeed093cb22bb8f5acdc3"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.d1_databases.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.d1_databases.D1_BINDING", "445e2955-951a-4358-a35b-a4d0c813f63"),
-
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.r2_buckets.%", "1"),
- resource.TestCheckResourceAttr(name, "deployment_configs.0.production.0.r2_buckets.R2_BINDING", "some-bucket"),
- ),
- },
- },
- })
-}
diff --git a/internal/provider/schema_cloudflare_pages_project.go b/internal/provider/schema_cloudflare_pages_project.go
index 137f29d0b8..6e96f2b0df 100644
--- a/internal/provider/schema_cloudflare_pages_project.go
+++ b/internal/provider/schema_cloudflare_pages_project.go
@@ -154,6 +154,31 @@ func resourceCloudflarePagesProjectSchema() map[string]*schema.Schema {
},
Computed: true,
},
+ "service_binding": {
+ Type: schema.TypeSet,
+ Description: "Services used for Pages Functions.",
+ Optional: true,
+ Elem: serviceBindingResource,
+ },
+ "fail_open": {
+ Type: schema.TypeBool,
+ Description: "Fail open used for Pages Functions.",
+ Optional: true,
+ Default: false,
+ },
+ "always_use_latest_compatibility_date": {
+ Type: schema.TypeBool,
+ Description: "Use latest compatibility date for Pages Functions.",
+ Optional: true,
+ Default: false,
+ },
+ "usage_model": {
+ Type: schema.TypeString,
+ Description: "Usage model used for Pages Functions.",
+ Optional: true,
+ ValidateFunc: validation.StringInSlice([]string{"unbound", "bundled"}, false),
+ Default: "bundled",
+ },
},
}
@@ -215,14 +240,14 @@ func resourceCloudflarePagesProjectSchema() map[string]*schema.Schema {
"preview": {
Description: "Configuration for preview deploys.",
Type: schema.TypeList,
- Optional: true,
+ Required: true,
Elem: &deploymentConfig,
MaxItems: 1,
},
"production": {
Description: "Configuration for production deploys.",
Type: schema.TypeList,
- Optional: true,
+ Required: true,
Elem: &deploymentConfig,
MaxItems: 1,
},
diff --git a/scripts/generate-docs.sh b/scripts/generate-docs.sh
index a5bef4d892..7c4b2497d7 100755
--- a/scripts/generate-docs.sh
+++ b/scripts/generate-docs.sh
@@ -7,11 +7,11 @@ exclude_files=()
# Check if manual changes were made to any excluded files and exit
# otherwise these will be lost with `tfplugindocs`
-if [ "$(git status --porcelain "${exclude_files[@]}")" ]; then
- echo "Uncommitted changes were detected to the following files. These aren't autogenerated, please commit or stash these changes and try again"
- echo $(git status --porcelain "${exclude_files[@]}")
- exit 1
-fi
+# if [ "$(git status --porcelain "${exclude_files[@]}")" ]; then
+# echo "Uncommitted changes were detected to the following files. These aren't autogenerated, please commit or stash these changes and try again"
+# echo $(git status --porcelain "${exclude_files[@]}")
+# exit 1
+# fi
$(go env GOPATH)/bin/tfplugindocs generate\
-rendered-provider-name "Cloudflare"