Repository: cloudflare/terraform-provider-cloudflare

Issue:
Add consecutive_down and consecutive_up parameters to cloudflare_load_balancer_monitor
### Current Terraform and Cloudflare provider version

terraform {
  required_providers {
    vault = {
      source = "hashicorp/vault"
    }
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 3.16.0"
    }
  }
  required_version = ">= 1.0"

  backend "remote" {
    organization = "bmgf"

    workspaces {
      name = "tf_cloudflare"
    }
  }
}

### Description

Via the Cloudflare API (https://api.cloudflare.com/#account-load-balancer-monitors-create-monitor) you can set the consecutive_down and consecutive_up parameter values for the Cloudflare Load Balancer Monitor resource but not with the Terraform Provider. Can we have these added?

### Use cases

We are managing our LB Monitors via Terraform as with everything else. Having a consecutive_up and consecutive_down parameter will give us more flexibility in fine-tuning the monitors we use for our LB pools.

### Potential Terraform configuration

resource "cloudflare_load_balancer_monitor" "lb_monitor" {
  type           = "https"
  expected_body  = "Healthy"
  expected_codes = "2xx"
  method         = "GET"
  timeout        = 5
  path           = "/healthcheck"
  interval       = 10
  port           = 443
  retries        = 1
  description    = "monitor for ${var.zone_name}"
  header {
    header = "Host"
    values = [var.zone_name]
  }
  allow_insecure   = true
  follow_redirects = false
  consecutive_down = 2
}

### References

_No response_

Discussion:
@andmor: +1@pwilczynskiclearcode: I reported a bug related to this resource https://github.com/cloudflare/terraform-provider-cloudflare/issues/5676

Solution patch:
diff --git a/.changelog/2721.txt b/.changelog/2721.txt
new file mode 100644
index 000000000..6cc971752
--- /dev/null
+++ b/.changelog/2721.txt
@@ -0,0 +1,3 @@
+```release-note:enhancement
+resource/cloudflare_access_application: Add custom_non_identity_deny_url field
+```
diff --git a/.changelog/2723.txt b/.changelog/2723.txt
new file mode 100644
index 000000000..4844fca5a
--- /dev/null
+++ b/.changelog/2723.txt
@@ -0,0 +1,3 @@
+```release-note:enhancement
+resource/cloudflare_load_balancer_monitor: add support for `consecutive_up` and `consecutive_down`
+```
diff --git a/.changelog/2734.txt b/.changelog/2734.txt
new file mode 100644
index 000000000..6b84a4230
--- /dev/null
+++ b/.changelog/2734.txt
@@ -0,0 +1,3 @@
+```release-note:enhancement
+resource/cloudflare_total_tls: add support for importing existing resources
+```
diff --git a/.changelog/2735.txt b/.changelog/2735.txt
new file mode 100644
index 000000000..5e0f7afbc
--- /dev/null
+++ b/.changelog/2735.txt
@@ -0,0 +1,3 @@
+```release-note:bug
+resource/cloudflare_access_identity_provider: Fix access IDPs not importing config obj 
+```
diff --git a/.changelog/2736.txt b/.changelog/2736.txt
new file mode 100644
index 000000000..6d0a3fc20
--- /dev/null
+++ b/.changelog/2736.txt
@@ -0,0 +1,3 @@
+```release-note:dependency
+provider: bumps actions/checkout from 3 to 4
+```
diff --git a/.changelog/2739.txt b/.changelog/2739.txt
new file mode 100644
index 000000000..65c6e10eb
--- /dev/null
+++ b/.changelog/2739.txt
@@ -0,0 +1,3 @@
+```release-note:dependency
+provider: bumps golang.org/x/net from 0.14.0 to 0.15.0
+```
diff --git a/.changelog/2740.txt b/.changelog/2740.txt
new file mode 100644
index 000000000..6c6be19b3
--- /dev/null
+++ b/.changelog/2740.txt
@@ -0,0 +1,3 @@
+```release-note:dependency
+provider: bumps github.com/aws/aws-sdk-go-v2/credentials from 1.13.36 to 1.13.37
+```
diff --git a/.changelog/2741.txt b/.changelog/2741.txt
new file mode 100644
index 000000000..c4c75da54
--- /dev/null
+++ b/.changelog/2741.txt
@@ -0,0 +1,3 @@
+```release-note:dependency
+provider: bumps github.com/aws/aws-sdk-go-v2/config from 1.18.38 to 1.18.39
+```
diff --git a/.changelog/2742.txt b/.changelog/2742.txt
new file mode 100644
index 000000000..85825a8e2
--- /dev/null
+++ b/.changelog/2742.txt
@@ -0,0 +1,3 @@
+```release-note:dependency
+provider: bumps goreleaser/goreleaser-action from 4.4.0 to 4.6.0
+```
diff --git a/.github/workflows/acceptance-tests.yml b/.github/workflows/acceptance-tests.yml
index ef329a374..b46fb48c8 100644
--- a/.github/workflows/acceptance-tests.yml
+++ b/.github/workflows/acceptance-tests.yml
@@ -44,7 +44,7 @@ jobs:
 
     steps:
     - name: Check out code into the Go module directory
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Set up Go
       uses: actions/setup-go@v4
       with:
diff --git a/.github/workflows/changelog-check.yml b/.github/workflows/changelog-check.yml
index dd02d5116..9cea0b9ab 100644
--- a/.github/workflows/changelog-check.yml
+++ b/.github/workflows/changelog-check.yml
@@ -8,7 +8,7 @@ jobs:
       matrix:
         os: [ubuntu-latest]
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - name: Set up Go
         uses: actions/setup-go@v4
         with:
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index ae4c736be..f6aeaed82 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -38,7 +38,7 @@ jobs:
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
 
     # Initializes the CodeQL tools for scanning.
     - name: Initialize CodeQL
diff --git a/.github/workflows/dependabot-changelog.yml b/.github/workflows/dependabot-changelog.yml
index 0ba8434f4..aaaccd7fb 100644
--- a/.github/workflows/dependabot-changelog.yml
+++ b/.github/workflows/dependabot-changelog.yml
@@ -13,7 +13,7 @@ jobs:
       - name: Fetch dependabot metadata
         id: dependabot-metadata
         uses: dependabot/fetch-metadata@v1.6.0
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - run: |
           gh pr checkout $PR_URL
           cat << EOF > .changelog/$PR_NUMBER.txt
diff --git a/.github/workflows/generate-changelog.yml b/.github/workflows/generate-changelog.yml
index 79182a8ba..2a5576c3f 100644
--- a/.github/workflows/generate-changelog.yml
+++ b/.github/workflows/generate-changelog.yml
@@ -13,7 +13,7 @@ jobs:
     if: github.event.pull_request.merged || github.event_name == 'workflow_dispatch'
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           fetch-depth: 0
       - run: cd tools && go install github.com/hashicorp/go-changelog/cmd/changelog-build
diff --git a/.github/workflows/issue-sync.yml b/.github/workflows/issue-sync.yml
index dfbdb4492..4dc2e7a20 100644
--- a/.github/workflows/issue-sync.yml
+++ b/.github/workflows/issue-sync.yml
@@ -11,7 +11,7 @@ jobs:
   internal-issue-sync:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - name: Set up Go
         uses: actions/setup-go@v4
         with:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 42ee5f8ae..748fffb27 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -10,7 +10,7 @@ jobs:
     name: golangci-lint
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           fetch-depth: 0 # needed for `only-new-issues` to compare diffs
       - name: Set up Go
@@ -31,7 +31,7 @@ jobs:
       matrix:
         os: [ubuntu-latest]
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - name: Set up Go
         uses: actions/setup-go@v4
         with:
diff --git a/.github/workflows/lock-released-issues.yml b/.github/workflows/lock-released-issues.yml
index e165223f1..f44571e65 100644
--- a/.github/workflows/lock-released-issues.yml
+++ b/.github/workflows/lock-released-issues.yml
@@ -15,7 +15,7 @@ jobs:
   lock-closed-issues:
     runs-on: ubuntu-latest
     steps: 
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - run: |
           IFS=',' read -r -a issues <<< "$ISSUES"
           for element in "${issues[@]}"
diff --git a/.github/workflows/maintainer-only-files.yml b/.github/workflows/maintainer-only-files.yml
index de973e3a5..d0d0a87c3 100644
--- a/.github/workflows/maintainer-only-files.yml
+++ b/.github/workflows/maintainer-only-files.yml
@@ -7,7 +7,7 @@ jobs:
   maintainer-only-files:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - name: Set up Go
         uses: actions/setup-go@v4
         with:
diff --git a/.github/workflows/make-docs.yml b/.github/workflows/make-docs.yml
index af77d0ab0..5757dd45a 100644
--- a/.github/workflows/make-docs.yml
+++ b/.github/workflows/make-docs.yml
@@ -11,7 +11,7 @@ jobs:
   make-docs:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - run: make docs
       - run: |
           if [[ `git status --porcelain` ]]; then
diff --git a/.github/workflows/milestone-closed.yml b/.github/workflows/milestone-closed.yml
index 0d71f6390..5c30baced 100644
--- a/.github/workflows/milestone-closed.yml
+++ b/.github/workflows/milestone-closed.yml
@@ -28,7 +28,7 @@ jobs:
     runs-on: ubuntu-latest
     needs: comment-on-closed-milestone
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - run: |
           IFS=',' read -r -a issues <<< "$ISSUES"
           for element in "${issues[@]}"
diff --git a/.github/workflows/milestones.yml b/.github/workflows/milestones.yml
index 2c04450b9..d161b0955 100644
--- a/.github/workflows/milestones.yml
+++ b/.github/workflows/milestones.yml
@@ -7,7 +7,7 @@ jobs:
     if: github.event.pull_request.merged
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           ref: ${{ github.event.pull_request.base.ref }}
       - id: get-current-milestone
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 40d416f97..a509275ce 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -8,7 +8,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
       - name: Set up Go
@@ -22,7 +22,7 @@ jobs:
           gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
           passphrase: ${{ secrets.GPG_PASSPHRASE }}
       - name: Run GoReleaser
-        uses: goreleaser/goreleaser-action@v4.4.0
+        uses: goreleaser/goreleaser-action@v4.6.0
         with:
           version: latest
           args: release --rm-dist
diff --git a/.github/workflows/reproduction-contains-dynamics.yml b/.github/workflows/reproduction-contains-dynamics.yml
index a3aa0e390..e60419219 100644
--- a/.github/workflows/reproduction-contains-dynamics.yml
+++ b/.github/workflows/reproduction-contains-dynamics.yml
@@ -10,7 +10,7 @@ jobs:
   reproduction-contains-dynamics:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - name: Add comment to issue about not using dynamic expressions
         uses: peter-evans/create-or-update-comment@v3
         with:
diff --git a/.github/workflows/semgrep.yml b/.github/workflows/semgrep.yml
index 9c6bc89db..da47fb6d8 100644
--- a/.github/workflows/semgrep.yml
+++ b/.github/workflows/semgrep.yml
@@ -16,7 +16,7 @@ jobs:
       image: returntocorp/semgrep
     if: (github.actor != 'dependabot[bot]')
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - run: semgrep ci --config .semgrep.yml
         env:
           # only trigger for files in this change
diff --git a/.github/workflows/terraform-log-check.yml b/.github/workflows/terraform-log-check.yml
index c2f589ab2..5791af977 100644
--- a/.github/workflows/terraform-log-check.yml
+++ b/.github/workflows/terraform-log-check.yml
@@ -11,7 +11,7 @@ jobs:
   tf-log-check:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - name: Set up Go
         uses: actions/setup-go@v4
         with:
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index 709f4207f..861054077 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -6,7 +6,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Check out code repository source code
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Set up Go
         uses: actions/setup-go@v4
         with:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7edab278d..f25017bcb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,17 +7,28 @@ FEATURES:
 
 ENHANCEMENTS:
 
+* resource/cloudflare_access_application: Add custom_non_identity_deny_url field ([#2721](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2721))
 * resource/cloudflare_access_group: Improve documentation for access_group usage ([#2718](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2718))
+* resource/cloudflare_total_tls: add support for importing existing resources ([#2734](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2734))
+
+BUG FIXES:
+
+* resource/cloudflare_access_identity_provider: Fix access IDPs not importing config obj ([#2735](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2735))
 
 DEPENDENCIES:
 
+* provider: bumps actions/checkout from 3 to 4 ([#2736](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2736))
 * provider: bumps github.com/aws/aws-sdk-go-v2/config from 1.18.36 to 1.18.37 ([#2714](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2714))
 * provider: bumps github.com/aws/aws-sdk-go-v2/config from 1.18.37 to 1.18.38 ([#2731](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2731))
+* provider: bumps github.com/aws/aws-sdk-go-v2/config from 1.18.38 to 1.18.39 ([#2741](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2741))
 * provider: bumps github.com/aws/aws-sdk-go-v2/credentials from 1.13.35 to 1.13.36 ([#2732](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2732))
+* provider: bumps github.com/aws/aws-sdk-go-v2/credentials from 1.13.36 to 1.13.37 ([#2740](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2740))
 * provider: bumps github.com/cloudflare/cloudflare-go from 0.75.0 to 0.76.0 ([#2726](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2726))
 * provider: bumps github.com/hashicorp/terraform-plugin-framework-validators from 0.11.0 to 0.12.0 ([#2727](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2727))
 * provider: bumps github.com/hashicorp/terraform-plugin-sdk/v2 from 2.27.0 to 2.28.0 ([#2719](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2719))
 * provider: bumps github.com/hashicorp/terraform-plugin-testing from 1.4.0 to 1.5.1 ([#2730](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2730))
+* provider: bumps golang.org/x/net from 0.14.0 to 0.15.0 ([#2739](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2739))
+* provider: bumps goreleaser/goreleaser-action from 4.4.0 to 4.6.0 ([#2742](https://github.com/cloudflare/terraform-provider-cloudflare/issues/2742))
 
 ## 4.13.0 (23rd August, 2023)
 
diff --git a/docs/resources/access_application.md b/docs/resources/access_application.md
index 13d9518ff..7a71f9f5e 100644
--- a/docs/resources/access_application.md
+++ b/docs/resources/access_application.md
@@ -62,7 +62,8 @@ resource "cloudflare_access_application" "staging_app" {
 - `auto_redirect_to_identity` (Boolean) Option to skip identity provider selection if only one is configured in `allowed_idps`. Defaults to `false`.
 - `cors_headers` (Block List) CORS configuration for the Access Application. See below for reference structure. (see [below for nested schema](#nestedblock--cors_headers))
 - `custom_deny_message` (String) Option that returns a custom error message when a user is denied access to the application.
-- `custom_deny_url` (String) Option that redirects to a custom URL when a user is denied access to the application.
+- `custom_deny_url` (String) Option that redirects to a custom URL when a user is denied access to the application via identity based rules.
+- `custom_non_identity_deny_url` (String) Option that redirects to a custom URL when a user is denied access to the application via non identity rules.
 - `custom_pages` (Set of String) The custom pages selected for the application.
 - `domain` (String) The primary hostname and path that Access will secure. If the app is visible in the App Launcher dashboard, this is the domain that will be displayed.
 - `enable_binding_cookie` (Boolean) Option to provide increased security against compromised authorization tokens and CSRF attacks by requiring an additional "binding" cookie on requests. Defaults to `false`.
diff --git a/docs/resources/load_balancer_monitor.md b/docs/resources/load_balancer_monitor.md
index d4353931d..20b33be52 100644
--- a/docs/resources/load_balancer_monitor.md
+++ b/docs/resources/load_balancer_monitor.md
@@ -61,6 +61,8 @@ resource "cloudflare_load_balancer_monitor" "example" {
 ### Optional
 
 - `allow_insecure` (Boolean) Do not validate the certificate when monitor use HTTPS.  Only valid if `type` is "http" or "https".
+- `consecutive_down` (Number) To be marked unhealthy the monitored origin must fail this healthcheck N consecutive times. Defaults to `0`.
+- `consecutive_up` (Number) To be marked healthy the monitored origin must pass this healthcheck N consecutive times. Defaults to `0`.
 - `description` (String) Free text description.
 - `expected_body` (String) A case-insensitive sub-string to look for in the response body. If this string is not found, the origin will be marked as unhealthy. Only valid if `type` is "http" or "https".
 - `expected_codes` (String) The expected HTTP response code or code range of the health check. Eg `2xx`. Only valid and required if `type` is "http" or "https".
diff --git a/docs/resources/total_tls.md b/docs/resources/total_tls.md
index 976282d97..7ac026fbc 100644
--- a/docs/resources/total_tls.md
+++ b/docs/resources/total_tls.md
@@ -34,4 +34,10 @@ resource "cloudflare_total_tls" "example" {
 
 - `id` (String) The ID of this resource.
 
+## Import
 
+Import is supported using the following syntax:
+
+```shell
+$ terraform import cloudflare_total_tls.example <zone_id>
+```
diff --git a/examples/resources/cloudflare_total_tls/import.sh b/examples/resources/cloudflare_total_tls/import.sh
new file mode 100644
index 000000000..6ac3972ac
--- /dev/null
+++ b/examples/resources/cloudflare_total_tls/import.sh
@@ -0,0 +1 @@
+$ terraform import cloudflare_total_tls.example <zone_id>
diff --git a/go.mod b/go.mod
index 13dcbaaa4..e466597e0 100644
--- a/go.mod
+++ b/go.mod
@@ -24,18 +24,18 @@ require (
 	github.com/oklog/run v1.1.0 // indirect
 	github.com/pkg/errors v0.9.1
 	github.com/zclconf/go-cty v1.13.3 // indirect
-	golang.org/x/crypto v0.12.0 // indirect
-	golang.org/x/net v0.14.0
-	golang.org/x/sys v0.11.0 // indirect
-	golang.org/x/text v0.12.0 // indirect
+	golang.org/x/crypto v0.13.0 // indirect
+	golang.org/x/net v0.15.0
+	golang.org/x/sys v0.12.0 // indirect
+	golang.org/x/text v0.13.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 )
 
 require (
 	github.com/MakeNowJust/heredoc/v2 v2.0.1
 	github.com/aws/aws-sdk-go-v2 v1.21.0
-	github.com/aws/aws-sdk-go-v2/config v1.18.38
-	github.com/aws/aws-sdk-go-v2/credentials v1.13.36
+	github.com/aws/aws-sdk-go-v2/config v1.18.39
+	github.com/aws/aws-sdk-go-v2/credentials v1.13.37
 	github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5
 	github.com/google/go-cmp v0.5.9
 	github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
@@ -61,7 +61,7 @@ require (
 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 // indirect
 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 // indirect
 	github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 // indirect
-	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.6 // indirect
 	github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect
 	github.com/aws/smithy-go v1.14.2 // indirect
 	github.com/cloudflare/circl v1.3.3 // indirect
diff --git a/go.sum b/go.sum
index 8a0f372c7..0b680f744 100644
--- a/go.sum
+++ b/go.sum
@@ -13,10 +13,10 @@ github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzR
 github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 h1:OPLEkmhXf6xFPiz0bLeDArZIDx1NNS4oJyG4nv3Gct0=
 github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
-github.com/aws/aws-sdk-go-v2/config v1.18.38 h1:CByQCELMgm2tM1lAehx3XNg0R/pfeXsYzqn0Aq2chJQ=
-github.com/aws/aws-sdk-go-v2/config v1.18.38/go.mod h1:vNm9Hf5VgG2fSUWhT3zFrqN/RosGcabFMYgiSoxKFU8=
-github.com/aws/aws-sdk-go-v2/credentials v1.13.36 h1:ps0cPswZjpsOk6sLwG6fdXTzrYjCplgPEyG3OUbbdqE=
-github.com/aws/aws-sdk-go-v2/credentials v1.13.36/go.mod h1:sY2phUzxbygoyDtTXhqi7GjGjCQ1S5a5Rj8u3ksBxCg=
+github.com/aws/aws-sdk-go-v2/config v1.18.39 h1:oPVyh6fuu/u4OiW4qcuQyEtk7U7uuNBmHmJSLg1AJsQ=
+github.com/aws/aws-sdk-go-v2/config v1.18.39/go.mod h1:+NH/ZigdPckFpgB1TRcRuWCB/Kbbvkxc/iNAKTq5RhE=
+github.com/aws/aws-sdk-go-v2/credentials v1.13.37 h1:BvEdm09+ZEh2XtN+PVHPcYwKY3wIeB6pw7vPRM4M9/U=
+github.com/aws/aws-sdk-go-v2/credentials v1.13.37/go.mod h1:ACLrdkd4CLZyXOghZ8IYumQbcooAcp2jo/s2xsFH8IM=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg=
 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8=
 github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g=
@@ -39,8 +39,8 @@ github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5 h1:A42xdtStObqy7NGvzZKpnyNXvoOmm
 github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM=
 github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 h1:2PylFCfKCEDv6PeSN09pC/VUiRd10wi1VfHG5FrW0/g=
 github.com/aws/aws-sdk-go-v2/service/sso v1.13.6/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.6 h1:pSB560BbVj9ZlJZF4WYj5zsytWHWKxg+NgyGV4B2L58=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.6/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4=
 github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 h1:CQBFElb0LS8RojMJlxRSo/HXipvTZW2S44Lt9Mk2aYQ=
 github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU=
 github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ=
@@ -190,8 +190,8 @@ github.com/zclconf/go-cty v1.13.3 h1:m+b9q3YDbg6Bec5rr+KGy1MzEVzY/jC2X+YX4yqKtHI
 github.com/zclconf/go-cty v1.13.3/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
-golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
+golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
+golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
 golang.org/x/exp v0.0.0-20230809150735-7b3493d9a819 h1:EDuYyU/MkFXllv9QF9819VlI9a4tzGuCbhG0ExK9o1U=
 golang.org/x/exp v0.0.0-20230809150735-7b3493d9a819/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
 golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU=
@@ -199,8 +199,8 @@ golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
-golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
+golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
+golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -212,15 +212,15 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
-golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
+golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0=
+golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
-golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
 golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/internal/sdkv2provider/resource_cloudflare_access_application.go b/internal/sdkv2provider/resource_cloudflare_access_application.go
index 22b602902..ed2e9cebb 100644
--- a/internal/sdkv2provider/resource_cloudflare_access_application.go
+++ b/internal/sdkv2provider/resource_cloudflare_access_application.go
@@ -38,20 +38,21 @@ func resourceCloudflareAccessApplicationCreate(ctx context.Context, d *schema.Re
 	appType := d.Get("type").(string)
 
 	newAccessApplication := cloudflare.CreateAccessApplicationParams{
-		Name:                    d.Get("name").(string),
-		Domain:                  d.Get("domain").(string),
-		Type:                    cloudflare.AccessApplicationType(appType),
-		SessionDuration:         d.Get("session_duration").(string),
-		AutoRedirectToIdentity:  cloudflare.BoolPtr(d.Get("auto_redirect_to_identity").(bool)),
-		EnableBindingCookie:     cloudflare.BoolPtr(d.Get("enable_binding_cookie").(bool)),
-		CustomDenyMessage:       d.Get("custom_deny_message").(string),
-		CustomDenyURL:           d.Get("custom_deny_url").(string),
-		HttpOnlyCookieAttribute: cloudflare.BoolPtr(d.Get("http_only_cookie_attribute").(bool)),
-		SameSiteCookieAttribute: d.Get("same_site_cookie_attribute").(string),
-		LogoURL:                 d.Get("logo_url").(string),
-		SkipInterstitial:        cloudflare.BoolPtr(d.Get("skip_interstitial").(bool)),
-		AppLauncherVisible:      cloudflare.BoolPtr(d.Get("app_launcher_visible").(bool)),
-		ServiceAuth401Redirect:  cloudflare.BoolPtr(d.Get("service_auth_401_redirect").(bool)),
+		Name:                     d.Get("name").(string),
+		Domain:                   d.Get("domain").(string),
+		Type:                     cloudflare.AccessApplicationType(appType),
+		SessionDuration:          d.Get("session_duration").(string),
+		AutoRedirectToIdentity:   cloudflare.BoolPtr(d.Get("auto_redirect_to_identity").(bool)),
+		EnableBindingCookie:      cloudflare.BoolPtr(d.Get("enable_binding_cookie").(bool)),
+		CustomDenyMessage:        d.Get("custom_deny_message").(string),
+		CustomDenyURL:            d.Get("custom_deny_url").(string),
+		CustomNonIdentityDenyURL: d.Get("custom_non_identity_deny_url").(string),
+		HttpOnlyCookieAttribute:  cloudflare.BoolPtr(d.Get("http_only_cookie_attribute").(bool)),
+		SameSiteCookieAttribute:  d.Get("same_site_cookie_attribute").(string),
+		LogoURL:                  d.Get("logo_url").(string),
+		SkipInterstitial:         cloudflare.BoolPtr(d.Get("skip_interstitial").(bool)),
+		AppLauncherVisible:       cloudflare.BoolPtr(d.Get("app_launcher_visible").(bool)),
+		ServiceAuth401Redirect:   cloudflare.BoolPtr(d.Get("service_auth_401_redirect").(bool)),
 	}
 
 	if value, ok := d.GetOk("allowed_idps"); ok {
@@ -124,6 +125,7 @@ func resourceCloudflareAccessApplicationRead(ctx context.Context, d *schema.Reso
 	d.Set("enable_binding_cookie", accessApplication.EnableBindingCookie)
 	d.Set("custom_deny_message", accessApplication.CustomDenyMessage)
 	d.Set("custom_deny_url", accessApplication.CustomDenyURL)
+	d.Set("custom_non_identity_deny_url", accessApplication.CustomNonIdentityDenyURL)
 	d.Set("allowed_idps", accessApplication.AllowedIdps)
 	d.Set("http_only_cookie_attribute", cloudflare.Bool(accessApplication.HttpOnlyCookieAttribute))
 	d.Set("same_site_cookie_attribute", accessApplication.SameSiteCookieAttribute)
@@ -156,21 +158,22 @@ func resourceCloudflareAccessApplicationUpdate(ctx context.Context, d *schema.Re
 	appType := d.Get("type").(string)
 
 	updatedAccessApplication := cloudflare.UpdateAccessApplicationParams{
-		ID:                      d.Id(),
-		Name:                    d.Get("name").(string),
-		Domain:                  d.Get("domain").(string),
-		Type:                    cloudflare.AccessApplicationType(appType),
-		SessionDuration:         d.Get("session_duration").(string),
-		AutoRedirectToIdentity:  cloudflare.BoolPtr(d.Get("auto_redirect_to_identity").(bool)),
-		EnableBindingCookie:     cloudflare.BoolPtr(d.Get("enable_binding_cookie").(bool)),
-		CustomDenyMessage:       d.Get("custom_deny_message").(string),
-		CustomDenyURL:           d.Get("custom_deny_url").(string),
-		HttpOnlyCookieAttribute: cloudflare.BoolPtr(d.Get("http_only_cookie_attribute").(bool)),
-		SameSiteCookieAttribute: d.Get("same_site_cookie_attribute").(string),
-		LogoURL:                 d.Get("logo_url").(string),
-		SkipInterstitial:        cloudflare.BoolPtr(d.Get("skip_interstitial").(bool)),
-		AppLauncherVisible:      cloudflare.BoolPtr(d.Get("app_launcher_visible").(bool)),
-		ServiceAuth401Redirect:  cloudflare.BoolPtr(d.Get("service_auth_401_redirect").(bool)),
+		ID:                       d.Id(),
+		Name:                     d.Get("name").(string),
+		Domain:                   d.Get("domain").(string),
+		Type:                     cloudflare.AccessApplicationType(appType),
+		SessionDuration:          d.Get("session_duration").(string),
+		AutoRedirectToIdentity:   cloudflare.BoolPtr(d.Get("auto_redirect_to_identity").(bool)),
+		EnableBindingCookie:      cloudflare.BoolPtr(d.Get("enable_binding_cookie").(bool)),
+		CustomDenyMessage:        d.Get("custom_deny_message").(string),
+		CustomDenyURL:            d.Get("custom_deny_url").(string),
+		CustomNonIdentityDenyURL: d.Get("custom_non_identity_deny_url").(string),
+		HttpOnlyCookieAttribute:  cloudflare.BoolPtr(d.Get("http_only_cookie_attribute").(bool)),
+		SameSiteCookieAttribute:  d.Get("same_site_cookie_attribute").(string),
+		LogoURL:                  d.Get("logo_url").(string),
+		SkipInterstitial:         cloudflare.BoolPtr(d.Get("skip_interstitial").(bool)),
+		AppLauncherVisible:       cloudflare.BoolPtr(d.Get("app_launcher_visible").(bool)),
+		ServiceAuth401Redirect:   cloudflare.BoolPtr(d.Get("service_auth_401_redirect").(bool)),
 	}
 
 	if appType != "saas" {
diff --git a/internal/sdkv2provider/resource_cloudflare_access_identity_provider.go b/internal/sdkv2provider/resource_cloudflare_access_identity_provider.go
index e4d1670bb..9cbf011f8 100644
--- a/internal/sdkv2provider/resource_cloudflare_access_identity_provider.go
+++ b/internal/sdkv2provider/resource_cloudflare_access_identity_provider.go
@@ -57,12 +57,12 @@ func resourceCloudflareAccessIdentityProviderRead(ctx context.Context, d *schema
 	d.Set("name", accessIdentityProvider.Name)
 	d.Set("type", accessIdentityProvider.Type)
 
-	config := convertStructToSchema(d, accessIdentityProvider.Config)
+	config := convertAccessIDPConfigStructToSchema(accessIdentityProvider.Config)
 	if configErr := d.Set("config", config); configErr != nil {
 		return diag.FromErr(fmt.Errorf("error setting Access Identity Provider configuration: %w", configErr))
 	}
 
-	scimConfig := convertScimConfigStructToSchema(d, accessIdentityProvider.ScimConfig)
+	scimConfig := convertAccessIDPScimConfigStructToSchema(accessIdentityProvider.ScimConfig)
 	if scimConfigErr := d.Set("scim_config", scimConfig); scimConfigErr != nil {
 		return diag.FromErr(fmt.Errorf("error setting Access Identity Provider scim configuration: %w", scimConfigErr))
 	}
@@ -245,11 +245,7 @@ func convertScimConfigSchemaToStruct(d *schema.ResourceData) cloudflare.AccessId
 	return ScimConfig
 }
 
-func convertStructToSchema(d *schema.ResourceData, options cloudflare.AccessIdentityProviderConfiguration) []interface{} {
-	if _, ok := d.GetOk("config"); !ok {
-		return []interface{}{}
-	}
-
+func convertAccessIDPConfigStructToSchema(options cloudflare.AccessIdentityProviderConfiguration) []interface{} {
 	attributes := make([]string, 0)
 	for _, value := range options.Attributes {
 		attributes = append(attributes, value)
@@ -285,11 +281,7 @@ func convertStructToSchema(d *schema.ResourceData, options cloudflare.AccessIden
 	return []interface{}{m}
 }
 
-func convertScimConfigStructToSchema(d *schema.ResourceData, options cloudflare.AccessIdentityProviderScimConfiguration) []interface{} {
-	if _, ok := d.GetOk("scim_config"); !ok {
-		return []interface{}{}
-	}
-
+func convertAccessIDPScimConfigStructToSchema(options cloudflare.AccessIdentityProviderScimConfiguration) []interface{} {
 	m := map[string]interface{}{
 		"enabled":                  options.Enabled,
 		"secret":                   options.Secret,
diff --git a/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor.go b/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor.go
index f9c357dcf..7969149ed 100644
--- a/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor.go
+++ b/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor.go
@@ -39,10 +39,12 @@ func resourceCloudflareLoadBalancerPoolMonitorCreate(ctx context.Context, d *sch
 	client := meta.(*cloudflare.API)
 
 	loadBalancerMonitor := cloudflare.LoadBalancerMonitor{
-		Timeout:  d.Get("timeout").(int),
-		Type:     d.Get("type").(string),
-		Interval: d.Get("interval").(int),
-		Retries:  d.Get("retries").(int),
+		Timeout:         d.Get("timeout").(int),
+		Type:            d.Get("type").(string),
+		Interval:        d.Get("interval").(int),
+		Retries:         d.Get("retries").(int),
+		ConsecutiveUp:   d.Get("consecutive_up").(int),
+		ConsecutiveDown: d.Get("consecutive_down").(int),
 	}
 
 	if description, ok := d.GetOk("description"); ok {
@@ -124,11 +126,13 @@ func resourceCloudflareLoadBalancerPoolMonitorUpdate(ctx context.Context, d *sch
 	client := meta.(*cloudflare.API)
 
 	loadBalancerMonitor := cloudflare.LoadBalancerMonitor{
-		ID:       d.Id(),
-		Timeout:  d.Get("timeout").(int),
-		Type:     d.Get("type").(string),
-		Interval: d.Get("interval").(int),
-		Retries:  d.Get("retries").(int),
+		ID:              d.Id(),
+		Timeout:         d.Get("timeout").(int),
+		Type:            d.Get("type").(string),
+		Interval:        d.Get("interval").(int),
+		Retries:         d.Get("retries").(int),
+		ConsecutiveUp:   d.Get("consecutive_up").(int),
+		ConsecutiveDown: d.Get("consecutive_down").(int),
 	}
 
 	if description, ok := d.GetOk("description"); ok {
@@ -246,6 +250,8 @@ func resourceCloudflareLoadBalancerPoolMonitorRead(ctx context.Context, d *schem
 
 	d.Set("description", loadBalancerMonitor.Description)
 	d.Set("interval", loadBalancerMonitor.Interval)
+	d.Set("consecutive_up", loadBalancerMonitor.ConsecutiveUp)
+	d.Set("consecutive_down", loadBalancerMonitor.ConsecutiveDown)
 	d.Set("method", loadBalancerMonitor.Method)
 	d.Set("port", int(loadBalancerMonitor.Port))
 	d.Set("retries", loadBalancerMonitor.Retries)
diff --git a/internal/sdkv2provider/resource_cloudflare_total_tls.go b/internal/sdkv2provider/resource_cloudflare_total_tls.go
index b7c04bd2a..8783de6b4 100644
--- a/internal/sdkv2provider/resource_cloudflare_total_tls.go
+++ b/internal/sdkv2provider/resource_cloudflare_total_tls.go
@@ -18,6 +18,9 @@ func resourceCloudflareTotalTLS() *schema.Resource {
 		ReadContext:   resourceCloudflareTotalSSLRead,
 		UpdateContext: resourceCloudflareTotalSSLUpdate,
 		DeleteContext: resourceCloudflareTotalSSLDelete,
+		Importer: &schema.ResourceImporter{
+			StateContext: resourceCloudflareTotalSSLImport,
+		},
 		Description: heredoc.Doc(`
 			Provides a resource which manages Total TLS for a zone.
 		`),
@@ -41,6 +44,15 @@ func resourceCloudflareTotalSSLUpdate(ctx context.Context, d *schema.ResourceDat
 	return resourceCloudflareTotalSSLRead(ctx, d, meta)
 }
 
+func resourceCloudflareTotalSSLImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
+	d.SetId(d.Id())
+	d.Set(consts.ZoneIDSchemaKey, d.Id())
+
+	resourceCloudflareTotalSSLRead(ctx, d, meta)
+
+	return []*schema.ResourceData{d}, nil
+}
+
 func resourceCloudflareTotalSSLRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
 	client := meta.(*cloudflare.API)
 	zoneID := d.Get(consts.ZoneIDSchemaKey).(string)
diff --git a/internal/sdkv2provider/schema_cloudflare_access_application.go b/internal/sdkv2provider/schema_cloudflare_access_application.go
index 6e48a449c..d3be3327a 100644
--- a/internal/sdkv2provider/schema_cloudflare_access_application.go
+++ b/internal/sdkv2provider/schema_cloudflare_access_application.go
@@ -239,7 +239,12 @@ func resourceCloudflareAccessApplicationSchema() map[string]*schema.Schema {
 		"custom_deny_url": {
 			Type:        schema.TypeString,
 			Optional:    true,
-			Description: "Option that redirects to a custom URL when a user is denied access to the application.",
+			Description: "Option that redirects to a custom URL when a user is denied access to the application via identity based rules.",
+		},
+		"custom_non_identity_deny_url": {
+			Type:        schema.TypeString,
+			Optional:    true,
+			Description: "Option that redirects to a custom URL when a user is denied access to the application via non identity rules.",
 		},
 		"http_only_cookie_attribute": {
 			Type:        schema.TypeBool,
diff --git a/internal/sdkv2provider/schema_cloudflare_access_identity_provider.go b/internal/sdkv2provider/schema_cloudflare_access_identity_provider.go
index ccc0df7e9..429bec1c1 100644
--- a/internal/sdkv2provider/schema_cloudflare_access_identity_provider.go
+++ b/internal/sdkv2provider/schema_cloudflare_access_identity_provider.go
@@ -38,6 +38,7 @@ func resourceCloudflareAccessIdentityProviderSchema() map[string]*schema.Schema
 		"config": {
 			Type:        schema.TypeList,
 			Optional:    true,
+			Computed:    true,
 			Description: "Provider configuration from the [developer documentation](https://developers.cloudflare.com/access/configuring-identity-providers/).",
 			Elem: &schema.Resource{
 				Schema: map[string]*schema.Schema{
@@ -136,7 +137,6 @@ func resourceCloudflareAccessIdentityProviderSchema() map[string]*schema.Schema
 					},
 					"redirect_url": {
 						Type:     schema.TypeString,
-						Optional: true,
 						Computed: true,
 					},
 					"sign_request": {
@@ -169,6 +169,7 @@ func resourceCloudflareAccessIdentityProviderSchema() map[string]*schema.Schema
 		"scim_config": {
 			Type:        schema.TypeList,
 			Optional:    true,
+			Computed:    true,
 			Description: "Configuration for SCIM settings for a given IDP",
 			Elem: &schema.Resource{
 				Schema: map[string]*schema.Schema{
diff --git a/internal/sdkv2provider/schema_cloudflare_load_balancer_monitor.go b/internal/sdkv2provider/schema_cloudflare_load_balancer_monitor.go
index 6184af5f6..dcd662383 100644
--- a/internal/sdkv2provider/schema_cloudflare_load_balancer_monitor.go
+++ b/internal/sdkv2provider/schema_cloudflare_load_balancer_monitor.go
@@ -86,6 +86,20 @@ func resourceCloudflareLoadBalancerMonitorSchema() map[string]*schema.Schema {
 			Description: "Do not validate the certificate when monitor use HTTPS.  Only valid if `type` is \"http\" or \"https\"",
 		},
 
+		"consecutive_down": {
+			Type:        schema.TypeInt,
+			Optional:    true,
+			Default:     0,
+			Description: "To be marked unhealthy the monitored origin must fail this healthcheck N consecutive times.",
+		},
+
+		"consecutive_up": {
+			Type:        schema.TypeInt,
+			Optional:    true,
+			Default:     0,
+			Description: "To be marked healthy the monitored origin must pass this healthcheck N consecutive times.",
+		},
+
 		"expected_body": {
 			Type:        schema.TypeString,
 			Optional:    true,



Test patch:
diff --git a/internal/sdkv2provider/resource_cloudflare_access_application_test.go b/internal/sdkv2provider/resource_cloudflare_access_application_test.go
index e2c438c63..27c6b5ef8 100644
--- a/internal/sdkv2provider/resource_cloudflare_access_application_test.go
+++ b/internal/sdkv2provider/resource_cloudflare_access_application_test.go
@@ -274,6 +274,7 @@ func TestAccCloudflareAccessApplication_WithCustomDenyFields(t *testing.T) {
 					resource.TestCheckResourceAttr(name, "session_duration", "24h"),
 					resource.TestCheckResourceAttr(name, "custom_deny_message", "denied!"),
 					resource.TestCheckResourceAttr(name, "custom_deny_url", "https://www.cloudflare.com"),
+					resource.TestCheckResourceAttr(name, "custom_non_identity_deny_url", "https://www.blocked.com"),
 				),
 			},
 		},
@@ -624,6 +625,7 @@ resource "cloudflare_access_application" "%[1]s" {
   session_duration          = "24h"
   custom_deny_message       = "denied!"
   custom_deny_url           = "https://www.cloudflare.com"
+	custom_non_identity_deny_url = "https://www.blocked.com"
 }
 `, rnd, zoneID, domain)
 }
diff --git a/internal/sdkv2provider/resource_cloudflare_access_identity_provider_test.go b/internal/sdkv2provider/resource_cloudflare_access_identity_provider_test.go
index db88b30b8..d2280c1df 100644
--- a/internal/sdkv2provider/resource_cloudflare_access_identity_provider_test.go
+++ b/internal/sdkv2provider/resource_cloudflare_access_identity_provider_test.go
@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"log"
 	"os"
+	"strings"
 	"testing"
 
 	"github.com/cloudflare/cloudflare-go"
@@ -73,6 +74,12 @@ func TestAccCloudflareAccessIdentityProvider_OneTimePin(t *testing.T) {
 					resource.TestCheckResourceAttr(resourceName, consts.AccountIDSchemaKey, accountID),
 					resource.TestCheckResourceAttr(resourceName, "name", rnd),
 					resource.TestCheckResourceAttr(resourceName, "type", "onetimepin"),
+					resource.TestCheckResourceAttrWith(resourceName, "config.0.redirect_url", func(value string) error {
+						if !strings.HasSuffix(value, ".cloudflareaccess.com/cdn-cgi/access/callback") {
+							return fmt.Errorf("expected redirect_url to be a Cloudflare Access URL, got %s", value)
+						}
+						return nil
+					}),
 				),
 			},
 		},
@@ -90,6 +97,12 @@ func TestAccCloudflareAccessIdentityProvider_OneTimePin(t *testing.T) {
 					resource.TestCheckResourceAttr(resourceName, consts.ZoneIDSchemaKey, zoneID),
 					resource.TestCheckResourceAttr(resourceName, "name", rnd),
 					resource.TestCheckResourceAttr(resourceName, "type", "onetimepin"),
+					resource.TestCheckResourceAttrWith(resourceName, "config.0.redirect_url", func(value string) error {
+						if !strings.HasSuffix(value, ".cloudflareaccess.com/cdn-cgi/access/callback") {
+							return fmt.Errorf("expected redirect_url to be a Cloudflare Access URL, got %s", value)
+						}
+						return nil
+					}),
 				),
 			},
 		},
@@ -222,6 +235,42 @@ func TestAccCloudflareAccessIdentityProvider_AzureAD(t *testing.T) {
 	})
 }
 
+func TestAccCloudflareAccessIdentityProvider_OAuth_Import(t *testing.T) {
+	t.Parallel()
+	accountID := os.Getenv("CLOUDFLARE_ACCOUNT_ID")
+	rnd := generateRandomResourceName()
+	resourceName := "cloudflare_access_identity_provider." + rnd
+
+	checkFn := resource.ComposeTestCheckFunc(
+		resource.TestCheckResourceAttr(resourceName, consts.AccountIDSchemaKey, accountID),
+		resource.TestCheckResourceAttr(resourceName, "name", rnd),
+		resource.TestCheckResourceAttr(resourceName, "type", "github"),
+		resource.TestCheckResourceAttr(resourceName, "config.0.client_id", "test"),
+		resource.TestCheckResourceAttrSet(resourceName, "config.0.client_secret"),
+	)
+
+	resource.Test(t, resource.TestCase{
+		PreCheck: func() {
+			testAccPreCheck(t)
+			testAccPreCheckAccount(t)
+		},
+		ProviderFactories: providerFactories,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccCheckCloudflareAccessIdentityProviderOAuth(accountID, rnd),
+				Check:  checkFn,
+			},
+			{
+				ImportState:         true,
+				ImportStateVerify:   true,
+				ResourceName:        resourceName,
+				ImportStateIdPrefix: fmt.Sprintf("%s/", accountID),
+				Check:               checkFn,
+			},
+		},
+	})
+}
+
 func testAccCheckCloudflareAccessIdentityProviderOneTimePin(name string, identifier *cloudflare.ResourceContainer) string {
 	return fmt.Sprintf(`
 resource "cloudflare_access_identity_provider" "%[1]s" {
@@ -283,7 +332,6 @@ resource "cloudflare_access_identity_provider" "%[2]s" {
 		client_id      = "test"
 		client_secret  = "test"
 		directory_id   = "directory"
-		redirect_url   = "https://terraform-cfapi.cloudflareaccess.com/cdn-cgi/access/callback"
 		support_groups = true
 		conditional_access_enabled = true
 	}
diff --git a/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor_test.go b/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor_test.go
index 6ed52c526..6f41b2d00 100644
--- a/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor_test.go
+++ b/internal/sdkv2provider/resource_cloudflare_load_balancer_monitor_test.go
@@ -105,6 +105,8 @@ func TestAccCloudflareLoadBalancerMonitor_FullySpecified(t *testing.T) {
 					resource.TestCheckResourceAttr(name, "path", "/custom"),
 					resource.TestCheckResourceAttr(name, "header.#", "1"),
 					resource.TestCheckResourceAttr(name, "retries", "5"),
+					resource.TestCheckResourceAttr(name, "consecutive_up", "2"),
+					resource.TestCheckResourceAttr(name, "consecutive_down", "2"),
 					resource.TestCheckResourceAttr(name, "port", "8080"),
 					resource.TestCheckResourceAttr(name, "expected_body", "dead"),
 					resource.TestCheckResourceAttr(name, "probe_zone", zoneName),
@@ -424,6 +426,8 @@ resource "cloudflare_load_balancer_monitor" "%[3]s" {
   path = "/custom"
   interval = 60
   retries = 5
+  consecutive_up = 2
+  consecutive_down = 2
   port = 8080
   description = "this is a very weird load balancer"
   probe_zone = "%[1]s"
diff --git a/internal/sdkv2provider/resource_cloudflare_total_tls_test.go b/internal/sdkv2provider/resource_cloudflare_total_tls_test.go
index ec1734ad1..d1c0fc405 100644
--- a/internal/sdkv2provider/resource_cloudflare_total_tls_test.go
+++ b/internal/sdkv2provider/resource_cloudflare_total_tls_test.go
@@ -36,6 +36,11 @@ func TestAccCloudflareTotalTLS(t *testing.T) {
 					resource.TestCheckResourceAttr(name, "certificate_authority", "google"),
 				),
 			},
+			{
+				ImportState:       true,
+				ImportStateVerify: true,
+				ResourceName:      name,
+			},
 		},
 	})
 }