Skip to content
Draft
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/1176.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:new-resource
pingone_rate_limit_configuration
```
51 changes: 51 additions & 0 deletions docs/resources/rate_limit_configuration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
page_title: "pingone_rate_limit_configuration Resource - terraform-provider-pingone"
subcategory: "Platform"
description: |-
Resource to create and manage rate limit configurations in PingOne. Rate limit configurations allow you to exclude specific IP addresses or CIDR ranges from rate limiting.
---

# pingone_rate_limit_configuration (Resource)

Resource to create and manage rate limit configurations in PingOne. Rate limit configurations allow you to exclude specific IP addresses or CIDR ranges from rate limiting.

## Example Usage

```terraform
resource "pingone_environment" "my_environment" {
# ...
}

resource "pingone_rate_limit_configuration" "my_rate_limit_configuration" {
environment_id = pingone_environment.my_environment.id

type = "WHITELIST"
value = "192.0.2.0/24"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `environment_id` (String) The ID of the environment to create the rate limit configuration in. Must be a valid PingOne resource ID. This field is immutable and will trigger a replace plan if changed.
- `value` (String) The IP address (IPv4 or IPv6), or a CIDR range, for the IP address or addresses to be excluded from rate limiting.

### Optional

- `type` (String) The type of rate limit configuration. Currently, the only type supported is `WHITELIST`, indicating that the IP address in `value` is to be excluded from rate limiting.

### Read-Only

- `created_at` (String) A string that specifies the time the resource was created.
- `id` (String) The ID of this resource.
- `updated_at` (String) A string that specifies the time the resource was last updated.

## Import

Import is supported using the following syntax, where attributes in `<>` brackets are replaced with the relevant ID. For example, `<environment_id>` should be replaced with the ID of the environment to import from.

```shell
terraform import pingone_rate_limit_configuration.example <environment_id>/<rate_limit_configuration_id>
```
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
terraform import pingone_rate_limit_configuration.example <environment_id>/<rate_limit_configuration_id>
10 changes: 10 additions & 0 deletions examples/resources/pingone_rate_limit_configuration/resource.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
resource "pingone_environment" "my_environment" {
# ...
}

resource "pingone_rate_limit_configuration" "my_rate_limit_configuration" {
environment_id = pingone_environment.my_environment.id

type = "WHITELIST"
value = "192.0.2.0/24"
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ require (
github.com/patrickcping/pingone-go-sdk-v2 v0.14.3
github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.2
github.com/patrickcping/pingone-go-sdk-v2/credentials v0.12.0
github.com/patrickcping/pingone-go-sdk-v2/management v0.62.0
github.com/patrickcping/pingone-go-sdk-v2/management v0.62.1-0.20251203115510-4232d8f7d174
github.com/patrickcping/pingone-go-sdk-v2/mfa v0.23.2
github.com/patrickcping/pingone-go-sdk-v2/risk v0.21.0
github.com/patrickcping/pingone-go-sdk-v2/verify v0.10.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1480,8 +1480,8 @@ github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.2 h1:9tsJMj3aHOaF4Bdxvg
github.com/patrickcping/pingone-go-sdk-v2/authorize v0.8.2/go.mod h1:42Te708LzeYC5z8axZopRPvQseDb1cvmWn8VNxO+YUc=
github.com/patrickcping/pingone-go-sdk-v2/credentials v0.12.0 h1:NH1rJ4RuciyKEjV8WQ6chOSdwNbtTPuCUOedHX7GKas=
github.com/patrickcping/pingone-go-sdk-v2/credentials v0.12.0/go.mod h1:oUdH/pGBp9JI/k0ptDgdprs/peruIwLurEHinuHDK90=
github.com/patrickcping/pingone-go-sdk-v2/management v0.62.0 h1:wO018lINer2iNWjM0RwqMH0/fiNQ4xOnUV+MtOmIYmk=
github.com/patrickcping/pingone-go-sdk-v2/management v0.62.0/go.mod h1:AuR8b02ntdqjAzgEYFFEeaOLig+LcsdQXmnpbG/1S2A=
github.com/patrickcping/pingone-go-sdk-v2/management v0.62.1-0.20251203115510-4232d8f7d174 h1:/Cw4CgWgN/4NR/KCoXpY4Q8ExPPG25mZC8K6x4tJV+o=
github.com/patrickcping/pingone-go-sdk-v2/management v0.62.1-0.20251203115510-4232d8f7d174/go.mod h1:AuR8b02ntdqjAzgEYFFEeaOLig+LcsdQXmnpbG/1S2A=
github.com/patrickcping/pingone-go-sdk-v2/mfa v0.23.2 h1:V2iW5DT7JUZd7HBRcF8cOMjRCJ+UG9MCckWVZYVSA/0=
github.com/patrickcping/pingone-go-sdk-v2/mfa v0.23.2/go.mod h1:2c47ma7Nu7X+hQTuBcB70FosnlUxjhsWPmlm/ErEJ80=
github.com/patrickcping/pingone-go-sdk-v2/risk v0.21.0 h1:oW3EPdempOpVQXlCfKBqhQKusbeIZZMO3exImxXOFp4=
Expand Down
88 changes: 88 additions & 0 deletions internal/acctest/service/base/rate_limit_configuration.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// Copyright © 2025 Ping Identity Corporation

package base

import (
"context"
"fmt"
"testing"

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/patrickcping/pingone-go-sdk-v2/management"
"github.com/pingidentity/terraform-provider-pingone/internal/acctest"
"github.com/pingidentity/terraform-provider-pingone/internal/acctest/legacysdk"
)

func RateLimitConfiguration_CheckDestroy(s *terraform.State) error {
var ctx = context.Background()

p1Client, err := legacysdk.TestClient(ctx)

if err != nil {
return err
}

apiClient := p1Client.API.ManagementAPIClient

for _, rs := range s.RootModule().Resources {
if rs.Type != "pingone_rate_limit_configuration" {
continue
}

shouldContinue, err := legacysdk.CheckParentEnvironmentDestroy(ctx, apiClient, rs.Primary.Attributes["environment_id"])
if err != nil {
return err
}

if shouldContinue {
continue
}

_, r, err := apiClient.RateLimitingApi.ReadOneRateLimitConfiguration(ctx, rs.Primary.Attributes["environment_id"], rs.Primary.ID).Execute()

shouldContinue, err = acctest.CheckForResourceDestroy(r, err)
if err != nil {
return err
}

if shouldContinue {
continue
}

return fmt.Errorf("PingOne Rate Limit Configuration %s still exists", rs.Primary.ID)
}

return nil
}

func RateLimitConfiguration_GetIDs(resourceName string, environmentID, resourceID *string) resource.TestCheckFunc {
return func(s *terraform.State) error {

rs, ok := s.RootModule().Resources[resourceName]
if !ok {
return fmt.Errorf("Resource Not found: %s", resourceName)
}

if resourceID != nil {
*resourceID = rs.Primary.ID
}

if environmentID != nil {
*environmentID = rs.Primary.Attributes["environment_id"]
}

return nil
}
}

func RateLimitConfiguration_RemovalDrift_PreConfig(ctx context.Context, apiClient *management.APIClient, t *testing.T, environmentID, rateLimitConfigurationID string) {
if environmentID == "" || rateLimitConfigurationID == "" {
t.Fatalf("One of environment ID or rate limit configuration ID cannot be determined. Environment ID: %s, Rate Limit Configuration ID: %s", environmentID, rateLimitConfigurationID)
}

_, err := apiClient.RateLimitingApi.DeleteRateLimitConfiguration(ctx, environmentID, rateLimitConfigurationID).Execute()
if err != nil {
t.Fatalf("Failed to delete rate limit configuration: %v", err)
}
}
Loading