diff --git a/Makefile b/Makefile index faeb909..30eed1c 100644 --- a/Makefile +++ b/Makefile @@ -10,11 +10,22 @@ export TERRAFORM_VERSION ?= 1.5.7 # licensed under BSL, which is not permitted. TERRAFORM_VERSION_VALID := $(shell [ "$(TERRAFORM_VERSION)" = "`printf "$(TERRAFORM_VERSION)\n1.6" | sort -V | head -n1`" ] && echo 1 || echo 0) +# Load local overrides (gitignored, like go.work). If TF_PROVIDER_PATH is set, +# TERRAFORM_PROVIDER_GIT_REF and TERRAFORM_PROVIDER_REPO are derived from that +# local checkout automatically — no need to set them manually. +-include local.env + export TERRAFORM_PROVIDER_SOURCE ?= launchdarkly/launchdarkly -export TERRAFORM_PROVIDER_REPO ?= https://github.com/launchdarkly/terraform-provider-launchdarkly -export TERRAFORM_PROVIDER_VERSION ?= 2.25.3 +export TERRAFORM_PROVIDER_VERSION ?= 2.29.0 export TERRAFORM_DOCS_PATH ?= docs/resources +ifdef TF_PROVIDER_PATH +export TERRAFORM_PROVIDER_REPO := $(shell git -C "$(TF_PROVIDER_PATH)" remote get-url origin 2>/dev/null | sed 's/\.git$$//' ) +export TERRAFORM_PROVIDER_GIT_REF := $(shell git -C "$(TF_PROVIDER_PATH)" branch --show-current 2>/dev/null || echo main) +else +export TERRAFORM_PROVIDER_REPO ?= https://github.com/launchdarkly/terraform-provider-launchdarkly +export TERRAFORM_PROVIDER_GIT_REF ?= v$(TERRAFORM_PROVIDER_VERSION) +endif PLATFORMS ?= linux_amd64 linux_arm64 @@ -46,8 +57,20 @@ GOLANGCILINT_VERSION ?= 2.8.0 GO_STATIC_PACKAGES = $(GO_PROJECT)/cmd/provider $(GO_PROJECT)/cmd/generator GO_LDFLAGS += -X $(GO_PROJECT)/internal/version.Version=$(VERSION) GO_SUBDIRS += cmd internal apis + -include build/makelib/golang.mk +# golang.mk runs `go clean -modcache`, which deletes golang.org/toolchain from the module cache. +# Override duplicates the target name (GNU make warns once); omit -modcache so `make clean` does not +# delete downloaded toolchains; run `make clean-module-cache` for a full module wipe. +go.clean: + @$(GO) clean -cache -testcache + @rm -fr $(GO_BIN_DIR) $(GO_TEST_DIR) + +.PHONY: clean-module-cache +clean-module-cache: + @$(GO) clean -modcache + # ==================================================================================== # Setup Kubernetes tools @@ -131,7 +154,7 @@ $(TERRAFORM_PROVIDER_SCHEMA): $(TERRAFORM) pull-docs: @if [ ! -d "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)" ]; then \ mkdir -p "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)" && \ - git clone -c advice.detachedHead=false --depth 1 --filter=blob:none --branch "v$(TERRAFORM_PROVIDER_VERSION)" --sparse "$(TERRAFORM_PROVIDER_REPO)" "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)"; \ + git clone -c advice.detachedHead=false --depth 1 --filter=blob:none --branch "$(TERRAFORM_PROVIDER_GIT_REF)" --sparse "$(TERRAFORM_PROVIDER_REPO)" "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)"; \ fi @git -C "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)" sparse-checkout set "$(TERRAFORM_DOCS_PATH)" @@ -197,9 +220,13 @@ uptest: $(UPTEST) $(KUBECTL) $(KUTTL) @$(OK) running automated tests local-deploy: build controlplane.up local.xpkg.deploy.provider.$(PROJECT_NAME) + @$(INFO) restarting provider Deployments so the cluster runs the newly loaded image + @for d in $$($(KUBECTL) -n $(CROSSPLANE_NAMESPACE) get deploy -o name 2>/dev/null | grep "$(PROJECT_NAME)" || true); do \ + $(KUBECTL) -n $(CROSSPLANE_NAMESPACE) rollout restart $$d; \ + done @$(INFO) running locally built provider @$(KUBECTL) wait provider.pkg $(PROJECT_NAME) --for condition=Healthy --timeout 5m - @$(KUBECTL) -n upbound-system wait --for=condition=Available deployment --all --timeout=5m + @$(KUBECTL) -n $(CROSSPLANE_NAMESPACE) wait --for=condition=Available deployment --all --timeout=5m @$(OK) running locally built provider e2e: local-deploy uptest @@ -216,10 +243,18 @@ e2e: local-deploy uptest # make local-e2e-setup - Create secret and ProviderConfig in cluster # make local-e2e-create - Apply all test resources to LaunchDarkly # make local-e2e-verify - Wait for resources to be Ready -# make local-e2e-cleanup - Delete all test resources from LaunchDarkly +# make local-e2e-cleanup - Delete all test resources, then destroy the Kind cluster +# After cleanup, make local-e2e provisions a fresh Kind cluster (controlplane.up in local-deploy). LOCAL_E2E_CREDS_FILE ?= cluster/test/credentials.json +# Passed to every kubectl delete in local-e2e-cleanup-do. +LOCAL_E2E_DELETE_OPTS ?= --ignore-not-found --wait=true LOCAL_E2E_EXAMPLES ?= examples/project_environment_and_flag +# project_environment.yaml: doc 1 = Project (nested prod/staging/test); docs 2+ = standalone Environment CRs only (e.g. development — do not duplicate nested keys). +LOCAL_E2E_PROJECT_MR_NAME ?= crossplane-project +LOCAL_E2E_ENVIRONMENT_MR_NAMES ?= development +# local-e2e-create: apply order is 1) this file 2) all examples/feature_flag/* 3) all other examples//*.{yaml,yml} +LOCAL_E2E_FIRST_APPLY ?= $(LOCAL_E2E_EXAMPLES)/project_environment.yaml # Setup credentials from local file local-e2e-setup: @@ -232,45 +267,47 @@ local-e2e-setup: @$(OK) Credentials configured # Create ALL test resources in LaunchDarkly -# Skips: destination/kinesis.yaml (AWS), auditlogsubscription/datadog.yaml (Datadog) +# Skips: destination/kinesis.yaml (AWS), auditlogsubscription/datadog.yaml (Datadog), providerconfig/* (handled by local-e2e-setup / install), LOCAL_E2E_FIRST_APPLY when scanning other dirs local-e2e-create: @$(INFO) Creating ALL test resources in LaunchDarkly @echo "" - @echo "=== Phase 1: Independent resources (no dependencies) ===" - @echo "Creating custom roles..." - @$(KUBECTL) apply -f examples/custom_role/custom_role.yaml - @echo "Creating webhook..." - @$(KUBECTL) apply -f examples/webhook/webhook.yaml - @echo "Creating access token..." - @$(KUBECTL) apply -f examples/access_token/access_token.yaml - @echo "Creating relay proxy configuration..." - @$(KUBECTL) apply -f examples/relay_proxy_configuration/relay_proxy_configuration.yaml - @sleep 2 - @echo "" - @echo "=== Phase 2: Project and environments ===" - @$(KUBECTL) apply -f $(LOCAL_E2E_EXAMPLES)/project_environment.yaml - @sleep 3 - @echo "" - @echo "=== Phase 3: Team members (before team) ===" - @$(KUBECTL) apply -f examples/team_with_custom_roles/members.yml - @sleep 2 - @echo "" - @echo "=== Phase 4: Team with custom roles ===" - @$(KUBECTL) apply -f examples/team_with_custom_roles/team.yaml - @sleep 2 + @echo "=== Phase 0: Project and environments ($(LOCAL_E2E_FIRST_APPLY)) ===" + @$(KUBECTL) apply -f $(LOCAL_E2E_FIRST_APPLY) + @sleep 1 + @$(INFO) "Waiting for Project $(LOCAL_E2E_PROJECT_MR_NAME) to be Ready" + @$(KUBECTL) wait --for=condition=Ready project.project.launchdarkly.com/$(LOCAL_E2E_PROJECT_MR_NAME) --timeout=5m + @for env in $(LOCAL_E2E_ENVIRONMENT_MR_NAMES); do \ + $(INFO) "Waiting for Environment $$env to be Ready"; \ + $(KUBECTL) wait --for=condition=Ready environment.project.launchdarkly.com/$$env --timeout=5m || exit $$?; \ + done @echo "" - @echo "=== Phase 5: Feature flags (all types) ===" - @$(KUBECTL) apply -f $(LOCAL_E2E_EXAMPLES)/flag.yaml - @$(KUBECTL) apply -f examples/feature_flag/boolean.yaml - @$(KUBECTL) apply -f examples/feature_flag/json.yaml - @$(KUBECTL) apply -f examples/feature_flag/number.yaml - @$(KUBECTL) apply -f examples/feature_flag/string.yaml - @$(KUBECTL) apply -f examples/feature_flag_environment/targeting.yaml - @sleep 2 + @echo "=== Phase 1: examples/feature_flag/ ===" + @set -e; \ + if [ -d examples/feature_flag ]; then \ + for f in $$(find examples/feature_flag -maxdepth 1 -type f \( -name '*.yaml' -o -name '*.yml' \) | LC_ALL=C sort); do \ + echo "Applying $$f"; \ + $(KUBECTL) apply -f $$f; \ + sleep 1; \ + done; \ + fi @echo "" - @echo "=== Phase 6: Segments ===" - @$(KUBECTL) apply -f $(LOCAL_E2E_EXAMPLES)/segment.yaml - @$(KUBECTL) apply -f examples/segment/segment.yaml + @echo "=== Phase 2: Remaining examples/*/*.yaml|.yml (sorted by directory, then file) ===" + @set -e; \ + for d in $$(find examples -mindepth 1 -maxdepth 1 -type d | LC_ALL=C sort); do \ + case $$d in \ + examples/feature_flag) continue ;; \ + esac; \ + for f in $$(find $$d -maxdepth 1 -type f \( -name '*.yaml' -o -name '*.yml' \) | LC_ALL=C sort); do \ + case $$f in \ + $(LOCAL_E2E_FIRST_APPLY)) continue ;; \ + */destination/kinesis.yaml|*/auditlogsubscription/datadog.yaml) continue ;; \ + */providerconfig/*) continue ;; \ + esac; \ + echo "Applying $$f"; \ + $(KUBECTL) apply -f $$f; \ + sleep 1; \ + done; \ + done @echo "" @$(OK) All test resources created @@ -297,44 +334,51 @@ local-e2e-verify: @$(MAKE) local-e2e-check-failures @$(OK) All resources Ready -# Cleanup ALL test resources (reverse dependency order) +# Cleanup ALL test resources (reverse dependency order), then delete the Kind cluster. local-e2e-cleanup: + @$(MAKE) local-e2e-cleanup-do + @$(INFO) Destroying Kind cluster $(KIND_CLUSTER_NAME) + @$(MAKE) controlplane.down || true + +local-e2e-cleanup-do: @$(INFO) Cleaning up ALL test resources from LaunchDarkly @echo "" @echo "=== Phase 1: Segments ===" - @$(KUBECTL) delete -f examples/segment/segment.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f $(LOCAL_E2E_EXAMPLES)/segment.yaml --ignore-not-found --wait=true || true + @$(KUBECTL) delete -f examples/segment/segment.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f $(LOCAL_E2E_EXAMPLES)/segment.yaml $(LOCAL_E2E_DELETE_OPTS) || true @echo "" @echo "=== Phase 2: Feature flag environments ===" - @$(KUBECTL) delete featureflagenvironment --all --ignore-not-found --wait=true || true + @$(KUBECTL) delete featureflagenvironment --all $(LOCAL_E2E_DELETE_OPTS) || true @echo "" @echo "=== Phase 3: Feature flags ===" - @$(KUBECTL) delete -f examples/feature_flag_environment/targeting.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f examples/feature_flag/string.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f examples/feature_flag/number.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f examples/feature_flag/json.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f examples/feature_flag/boolean.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f $(LOCAL_E2E_EXAMPLES)/flag.yaml --ignore-not-found --wait=true || true + @$(KUBECTL) delete -f examples/feature_flag_environment/targeting.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f examples/feature_flag/string.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f examples/feature_flag/number.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f examples/feature_flag/json.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f examples/feature_flag/boolean.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f $(LOCAL_E2E_EXAMPLES)/flag.yaml $(LOCAL_E2E_DELETE_OPTS) || true @echo "" @echo "=== Phase 4: Team ===" - @$(KUBECTL) delete -f examples/team_with_custom_roles/team.yaml --ignore-not-found --wait=true || true + @$(KUBECTL) delete -f examples/team_with_custom_roles/team.yaml $(LOCAL_E2E_DELETE_OPTS) || true @echo "" @echo "=== Phase 5: Team members ===" - @$(KUBECTL) delete -f examples/team_with_custom_roles/members.yml --ignore-not-found --wait=true || true + @$(KUBECTL) delete -f examples/team_with_custom_roles/members.yml $(LOCAL_E2E_DELETE_OPTS) || true @echo "" @echo "=== Phase 6: Project and environments ===" - @$(KUBECTL) delete -f $(LOCAL_E2E_EXAMPLES)/project_environment.yaml --ignore-not-found --wait=true || true + @$(KUBECTL) delete -f $(LOCAL_E2E_EXAMPLES)/project_environment.yaml $(LOCAL_E2E_DELETE_OPTS) || true @echo "" @echo "=== Phase 7: Independent resources ===" - @$(KUBECTL) delete -f examples/relay_proxy_configuration/relay_proxy_configuration.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f examples/access_token/access_token.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f examples/webhook/webhook.yaml --ignore-not-found --wait=true || true - @$(KUBECTL) delete -f examples/custom_role/custom_role.yaml --ignore-not-found --wait=true || true + @$(KUBECTL) delete -f examples/relay_proxy_configuration/relay_proxy_configuration.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f examples/access_token/access_token.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f examples/webhook/webhook.yaml $(LOCAL_E2E_DELETE_OPTS) || true + @$(KUBECTL) delete -f examples/custom_role/custom_role.yaml $(LOCAL_E2E_DELETE_OPTS) || true @echo "" @$(OK) All test resources cleaned up # Check for failed resources and provide detailed error summary -# This target scans all Crossplane managed resources for failures and reports them clearly +# Scans managed resources by Synced/Ready; for each failure prints Warning Events scoped to +# that object (involvedObject.uid), first in CROSSPLANE_NAMESPACE then cluster-wide. Omits +# benign "object has been modified" concurrency lines. local-e2e-check-failures: @echo "" @echo "=== E2E Test Failure Summary ===" @@ -373,6 +417,26 @@ local-e2e-check-failures: API_COUNT=$$((API_COUNT + 1)); \ echo " Message: $$MESSAGE"; \ fi; \ + OBJUID=$$($(KUBECTL) get $$resource -o jsonpath='{.metadata.uid}' 2>/dev/null); \ + echo " Warning events for this object (provider ns, else cluster-wide):"; \ + if [ -z "$$OBJUID" ]; then \ + echo " (could not read metadata.uid)"; \ + else \ + EVOUT=$$($(KUBECTL) get events -n $(CROSSPLANE_NAMESPACE) --field-selector involvedObject.uid=$$OBJUID,type=Warning --sort-by=.lastTimestamp -o jsonpath='{range .items[*]}{.lastTimestamp}{" | "}{.reason}{" | "}{.message}{"\n"}{end}' 2>/dev/null); \ + if [ -z "$$EVOUT" ]; then \ + EVOUT=$$($(KUBECTL) get events -A --field-selector involvedObject.uid=$$OBJUID,type=Warning --sort-by=.lastTimestamp -o jsonpath='{range .items[*]}{.lastTimestamp}{" | "}{.reason}{" | "}{.message}{"\n"}{end}' 2>/dev/null); \ + fi; \ + if [ -z "$$EVOUT" ]; then \ + echo " (none)"; \ + else \ + EVFILTERED=$$(echo "$$EVOUT" | grep -vE 'object has been modified|please apply your changes to the latest version' || true); \ + if [ -n "$$EVFILTERED" ]; then \ + echo "$$EVFILTERED" | tail -n 15; \ + else \ + echo " (only benign concurrency warnings — omitted)"; \ + fi; \ + fi; \ + fi; \ echo ""; \ elif [ -z "$$SYNCED" ] && [ -z "$$READY" ]; then \ FAILED=$$((FAILED + 1)); \ @@ -384,21 +448,31 @@ local-e2e-check-failures: echo " Status: No conditions - controller may not have processed this resource"; \ echo " Cause: Resource may be failing silently or controller is not running"; \ printf "\033[0m"; \ + OBJUID=$$($(KUBECTL) get $$resource -o jsonpath='{.metadata.uid}' 2>/dev/null); \ + echo " Warning events for this object (provider ns, else cluster-wide):"; \ + if [ -z "$$OBJUID" ]; then \ + echo " (could not read metadata.uid)"; \ + else \ + EVOUT=$$($(KUBECTL) get events -n $(CROSSPLANE_NAMESPACE) --field-selector involvedObject.uid=$$OBJUID,type=Warning --sort-by=.lastTimestamp -o jsonpath='{range .items[*]}{.lastTimestamp}{" | "}{.reason}{" | "}{.message}{"\n"}{end}' 2>/dev/null); \ + if [ -z "$$EVOUT" ]; then \ + EVOUT=$$($(KUBECTL) get events -A --field-selector involvedObject.uid=$$OBJUID,type=Warning --sort-by=.lastTimestamp -o jsonpath='{range .items[*]}{.lastTimestamp}{" | "}{.reason}{" | "}{.message}{"\n"}{end}' 2>/dev/null); \ + fi; \ + if [ -z "$$EVOUT" ]; then \ + echo " (none)"; \ + else \ + EVFILTERED=$$(echo "$$EVOUT" | grep -vE 'object has been modified|please apply your changes to the latest version' || true); \ + if [ -n "$$EVFILTERED" ]; then \ + echo "$$EVFILTERED" | tail -n 15; \ + else \ + echo " (only benign concurrency warnings — omitted)"; \ + fi; \ + fi; \ + fi; \ echo ""; \ fi; \ done; \ done; \ echo ""; \ - echo "=== Checking Kubernetes Warning Events ==="; \ - WARNINGS=$$($(KUBECTL) get events --field-selector type=Warning -o custom-columns='NAME:.involvedObject.name,KIND:.involvedObject.kind,MESSAGE:.message' 2>/dev/null | grep -iE "customrole|accesstoken|webhook|relayproxy|project|environment|teammember|team|featureflag|segment" | head -10); \ - if [ -n "$$WARNINGS" ]; then \ - printf "\033[33m"; \ - echo "$$WARNINGS"; \ - printf "\033[0m"; \ - else \ - echo "No warning events found for managed resources."; \ - fi; \ - echo ""; \ if [ $$FAILED -gt 0 ]; then \ printf "\033[31m"; \ echo "=== RESULT: $$FAILED resource(s) failed ==="; \ @@ -424,15 +498,16 @@ local-e2e-check-failures: if [ $$PANIC_COUNT -gt 0 ] || [ $$NO_STATUS_COUNT -gt 0 ]; then \ printf "\033[33m"; \ echo ""; \ - echo "⚠️ Root cause: Upstream Terraform provider compatibility issue."; \ - echo " This is a known issue with Upjet no-fork mode."; \ - echo " See: https://github.com/launchdarkly/terraform-provider-launchdarkly"; \ + echo "⚠️ Upstream Terraform provider panic detected."; \ + echo " The historical Upjet no-fork compatibility issue (#387)"; \ + echo " was resolved in terraform-provider-launchdarkly v2.29.0."; \ + echo " File new panics at:"; \ + echo " https://github.com/launchdarkly/terraform-provider-launchdarkly/issues"; \ echo ""; \ echo " The other failures are cascading - when parent resources fail,"; \ echo " dependent resources also fail due to unresolved references."; \ printf "\033[0m"; \ fi; \ - exit 1; \ else \ printf "\033[32m"; \ echo "=== RESULT: All resources healthy ==="; \ @@ -442,9 +517,9 @@ local-e2e-check-failures: # Full local e2e workflow: deploy provider, setup creds, create resources, verify local-e2e: local-deploy local-e2e-setup local-e2e-create local-e2e-verify @$(INFO) Local E2E test complete - resources created in LaunchDarkly - @echo "Run 'make local-e2e-cleanup' to delete test resources" + @echo "Tear down Kind + test resources: make local-e2e-cleanup" -.PHONY: local-e2e-setup local-e2e-create local-e2e-verify local-e2e-check-failures local-e2e-cleanup local-e2e-cleanup-force local-e2e +.PHONY: local-e2e-setup local-e2e-create local-e2e-verify local-e2e-check-failures local-e2e-cleanup local-e2e-cleanup-do local-e2e crddiff: $(UPTEST) @$(INFO) Checking breaking CRD schema changes diff --git a/README.md b/README.md index 6e2a7fb..4bcae0d 100644 --- a/README.md +++ b/README.md @@ -45,15 +45,44 @@ You can see the API reference [here](https://doc.crds.dev/github.com/launchdarkl This provider uses Upjet's **no-fork mode**, which means it directly imports and calls the LaunchDarkly Terraform provider's Go SDK rather than spawning Terraform CLI as a subprocess. **Note on Go Module Dependency:** - -Currently, the LaunchDarkly Terraform provider (`github.com/launchdarkly/terraform-provider-launchdarkly`) does not follow Go module versioning conventions for v2+ releases (missing `/v2` suffix in the module path). As a result, we must use a **pseudo-version** (commit hash) instead of a semantic version tag. - - -When updating the Terraform provider dependency, you'll need to: - -1. Find the commit hash for the desired release tag -2. Generate the pseudo-version using: `go mod download github.com/launchdarkly/terraform-provider-launchdarkly@` -3. Update `go.mod` with the resulting pseudo-version +The upstream LaunchDarkly Terraform provider +(`github.com/launchdarkly/terraform-provider-launchdarkly`) is tagged with +`v2.x.x` releases, but its module path does not include the `/v2` suffix that +Go modules requires for v2+ releases ([Semantic Import +Versioning](https://go.dev/ref/mod#major-version-suffixes)). The Go toolchain +therefore refuses to resolve `v2.x.x` tags directly, so this repo pins the +dependency via a Go **pseudo-version** (`vX.Y.Z-0.-`) +derived from the release commit. The human-readable release name lives in +three other places — see +[Upgrading the upstream Terraform provider](#upgrading-the-upstream-terraform-provider). +## Upgrading the upstream Terraform provider +> **TL;DR:** Bump *one* Go constant (`internal/version/version.go`), the +> Makefile semver, and the `go.mod` pseudo-version. Then `make generate`. +The provider version is referenced in four distinct places, in three +different formats, because each one is consumed by a different external +system: + +| Location | Format | Consumer | +| --- | --- | --- | +| `internal/version/version.go` (`TerraformProviderVersion`) | Bare semver (`"2.29.0"`) | Compiled into the binary; passed to the upstream SDK at runtime | +| `go.mod` line above `terraform-provider-launchdarkly` | Bare semver in a comment | Humans / reviewers | +| `go.mod` `terraform-provider-launchdarkly` line | Go pseudo-version (`v1.7.2-0.-`) | Go module resolver | +| `Makefile` `TERRAFORM_PROVIDER_VERSION` | Terraform Registry semver (no `v` prefix) | Terraform CLI during `make generate` | +`internal/version/version.go` is the single Go-side source of truth — both +`internal/clients/launchdarkly.go` and `config/provider.go` import it, so +runtime callers all read the same constant. + +### Step-by-step +1. **Identify the target release** on + . + Note the tag (e.g. `v2.29.0`) and the short commit SHA shown on the + release page (e.g. `e990d60`). +2. **Compute the canonical Go pseudo-version** for that commit. Run these + from outside the repo (or from any directory whose `go.mod` does not + contain a `replace` directive that intercepts the lookup): + ```bash + go mod download -x github.com/launchdarkly/terraform-provider-launchdarkly@ + go list -m github.com/launchdarkly/terraform-provider-launchdarkly ## Developing @@ -117,6 +146,32 @@ Run the `examples/*` folder against your LaunchDarkly account: 4. To clean up run `make local-e2e-cleanup` + +### Testing Against an Upstream Terraform Provider Branch +To test against a feature branch or unmerged PR on the terraform provider before it ships, without modifying any committed files: +1. Clone the terraform provider and check out the branch you want to test: + ```bash + git clone https://github.com/launchdarkly/terraform-provider-launchdarkly ../terraform-provider-launchdarkly + cd ../terraform-provider-launchdarkly && git checkout issue-387 + ``` +2. Create `local.env` in the repo root (gitignored) with the path to your checkout: + ``` + TF_PROVIDER_PATH = ../terraform-provider-launchdarkly + ``` +3. Run `make local-e2e` as normal. It will: + - Auto-create `go.work` pointing to your local checkout so the build uses that code + - Derive `TERRAFORM_PROVIDER_GIT_REF` from whichever branch is checked out + - Print a banner at the start showing the active path, branch, and commit + To switch branches, just `git checkout ` in the terraform provider directory — no config changes needed. +4. To go back to the pinned upstream version, delete `local.env` and run `make dev-provider-reset`: + ```bash + rm local.env + make dev-provider-reset + ``` +The banner printed at the start of `make local-e2e` always shows which source is active: +- **Yellow** — local workspace (`local.env` present, using your checkout) +- **Green** — pinned upstream version from `go.mod` + ## Report a Bug For filing bugs, suggesting improvements, or requesting new features, please diff --git a/apis/account/v1alpha1/zz_auditlogsubscription_types.go b/apis/account/v1alpha1/zz_auditlogsubscription_types.go index dde0dc0..5fe8e85 100755 --- a/apis/account/v1alpha1/zz_auditlogsubscription_types.go +++ b/apis/account/v1alpha1/zz_auditlogsubscription_types.go @@ -19,8 +19,8 @@ type AuditLogSubscriptionInitParameters struct { // The set of configuration fields corresponding to the value defined for `integration_key`. Refer to the `formVariables` field in the corresponding `integrations//manifest.json` file in [this repo](https://github.com/launchdarkly/integration-framework/tree/master/integrations) for a full list of fields for the integration you wish to configure. Config map[string]string `json:"config,omitempty" tf:"config,omitempty"` - // relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. - // The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. + // v2, elastic, grafana, honeycomb, jira, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. + // The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. IntegrationKey *string `json:"integrationKey,omitempty" tf:"integration_key,omitempty"` // friendly name for your audit log subscription viewable from within the LaunchDarkly Integrations page. @@ -50,8 +50,8 @@ type AuditLogSubscriptionObservation struct { // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` - // relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. - // The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. + // v2, elastic, grafana, honeycomb, jira, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. + // The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. IntegrationKey *string `json:"integrationKey,omitempty" tf:"integration_key,omitempty"` // friendly name for your audit log subscription viewable from within the LaunchDarkly Integrations page. @@ -79,8 +79,8 @@ type AuditLogSubscriptionParameters struct { // +kubebuilder:validation:Optional Config map[string]string `json:"config,omitempty" tf:"config,omitempty"` - // relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. - // The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. + // v2, elastic, grafana, honeycomb, jira, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. + // The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. // +kubebuilder:validation:Optional IntegrationKey *string `json:"integrationKey,omitempty" tf:"integration_key,omitempty"` diff --git a/apis/flag/v1alpha1/zz_featureflag_types.go b/apis/flag/v1alpha1/zz_featureflag_types.go index 191feb4..e4e2016 100755 --- a/apis/flag/v1alpha1/zz_featureflag_types.go +++ b/apis/flag/v1alpha1/zz_featureflag_types.go @@ -148,6 +148,9 @@ type FeatureFlagInitParameters struct { // A block containing the indices of the variations to be used as the default on and off variations in all new environments. Flag configurations in existing environments will not be changed nor updated if the configuration block is removed. Defaults []DefaultsInitParameters `json:"defaults,omitempty" tf:"defaults,omitempty"` + // Specifies whether the flag is deprecated or not. Note that you cannot create a new flag that is deprecated, but can update a flag to be deprecated. + Deprecated *bool `json:"deprecated,omitempty" tf:"deprecated,omitempty"` + // (String) The feature flag's description. // The feature flag's description. Description *string `json:"description,omitempty" tf:"description,omitempty"` @@ -197,6 +200,11 @@ type FeatureFlagInitParameters struct { // (Block List) An array of possible variations for the flag (see below for nested schema) // An array of possible variations for the flag Variations []VariationsInitParameters `json:"variations,omitempty" tf:"variations,omitempty"` + + // (Set of String) A set of view keys to link this flag to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same flag. Choose one approach per resource. + // A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Choose one approach per resource. + // +listType=set + ViewKeys []*string `json:"viewKeys,omitempty" tf:"view_keys,omitempty"` } type FeatureFlagObservation struct { @@ -216,6 +224,9 @@ type FeatureFlagObservation struct { // A block containing the indices of the variations to be used as the default on and off variations in all new environments. Flag configurations in existing environments will not be changed nor updated if the configuration block is removed. Defaults []DefaultsObservation `json:"defaults,omitempty" tf:"defaults,omitempty"` + // Specifies whether the flag is deprecated or not. Note that you cannot create a new flag that is deprecated, but can update a flag to be deprecated. + Deprecated *bool `json:"deprecated,omitempty" tf:"deprecated,omitempty"` + // (String) The feature flag's description. // The feature flag's description. Description *string `json:"description,omitempty" tf:"description,omitempty"` @@ -259,6 +270,11 @@ type FeatureFlagObservation struct { // (Block List) An array of possible variations for the flag (see below for nested schema) // An array of possible variations for the flag Variations []VariationsObservation `json:"variations,omitempty" tf:"variations,omitempty"` + + // (Set of String) A set of view keys to link this flag to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same flag. Choose one approach per resource. + // A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Choose one approach per resource. + // +listType=set + ViewKeys []*string `json:"viewKeys,omitempty" tf:"view_keys,omitempty"` } type FeatureFlagParameters struct { @@ -282,6 +298,10 @@ type FeatureFlagParameters struct { // +kubebuilder:validation:Optional Defaults []DefaultsParameters `json:"defaults,omitempty" tf:"defaults,omitempty"` + // Specifies whether the flag is deprecated or not. Note that you cannot create a new flag that is deprecated, but can update a flag to be deprecated. + // +kubebuilder:validation:Optional + Deprecated *bool `json:"deprecated,omitempty" tf:"deprecated,omitempty"` + // (String) The feature flag's description. // The feature flag's description. // +kubebuilder:validation:Optional @@ -341,6 +361,12 @@ type FeatureFlagParameters struct { // An array of possible variations for the flag // +kubebuilder:validation:Optional Variations []VariationsParameters `json:"variations,omitempty" tf:"variations,omitempty"` + + // (Set of String) A set of view keys to link this flag to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same flag. Choose one approach per resource. + // A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Choose one approach per resource. + // +kubebuilder:validation:Optional + // +listType=set + ViewKeys []*string `json:"viewKeys,omitempty" tf:"view_keys,omitempty"` } type VariationsInitParameters struct { diff --git a/apis/flag/v1alpha1/zz_generated.deepcopy.go b/apis/flag/v1alpha1/zz_generated.deepcopy.go index b6c17ce..732934c 100644 --- a/apis/flag/v1alpha1/zz_generated.deepcopy.go +++ b/apis/flag/v1alpha1/zz_generated.deepcopy.go @@ -1075,6 +1075,11 @@ func (in *FeatureFlagInitParameters) DeepCopyInto(out *FeatureFlagInitParameters (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Deprecated != nil { + in, out := &in.Deprecated, &out.Deprecated + *out = new(bool) + **out = **in + } if in.Description != nil { in, out := &in.Description, &out.Description *out = new(string) @@ -1143,6 +1148,17 @@ func (in *FeatureFlagInitParameters) DeepCopyInto(out *FeatureFlagInitParameters (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.ViewKeys != nil { + in, out := &in.ViewKeys, &out.ViewKeys + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureFlagInitParameters. @@ -1216,6 +1232,11 @@ func (in *FeatureFlagObservation) DeepCopyInto(out *FeatureFlagObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Deprecated != nil { + in, out := &in.Deprecated, &out.Deprecated + *out = new(bool) + **out = **in + } if in.Description != nil { in, out := &in.Description, &out.Description *out = new(string) @@ -1279,6 +1300,17 @@ func (in *FeatureFlagObservation) DeepCopyInto(out *FeatureFlagObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.ViewKeys != nil { + in, out := &in.ViewKeys, &out.ViewKeys + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureFlagObservation. @@ -1320,6 +1352,11 @@ func (in *FeatureFlagParameters) DeepCopyInto(out *FeatureFlagParameters) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Deprecated != nil { + in, out := &in.Deprecated, &out.Deprecated + *out = new(bool) + **out = **in + } if in.Description != nil { in, out := &in.Description, &out.Description *out = new(string) @@ -1388,6 +1425,17 @@ func (in *FeatureFlagParameters) DeepCopyInto(out *FeatureFlagParameters) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.ViewKeys != nil { + in, out := &in.ViewKeys, &out.ViewKeys + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureFlagParameters. diff --git a/apis/project/v1alpha1/zz_environmentsegment_types.go b/apis/project/v1alpha1/zz_environmentsegment_types.go index 66bd70d..e7d268c 100755 --- a/apis/project/v1alpha1/zz_environmentsegment_types.go +++ b/apis/project/v1alpha1/zz_environmentsegment_types.go @@ -173,6 +173,11 @@ type EnvironmentSegmentInitParameters struct { // (String) For Big Segments, the targeted context kind. If this attribute is not specified it will default to user. A change in this field will force the destruction of the existing resource and the creation of a new one. // For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one. UnboundedContextKind *string `json:"unboundedContextKind,omitempty" tf:"unbounded_context_kind,omitempty"` + + // (Set of String) A set of view keys to link this segment to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same segment. Choose one approach per resource. + // A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Choose one approach per resource. + // +listType=set + ViewKeys []*string `json:"viewKeys,omitempty" tf:"view_keys,omitempty"` } type EnvironmentSegmentObservation struct { @@ -236,6 +241,11 @@ type EnvironmentSegmentObservation struct { // (String) For Big Segments, the targeted context kind. If this attribute is not specified it will default to user. A change in this field will force the destruction of the existing resource and the creation of a new one. // For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one. UnboundedContextKind *string `json:"unboundedContextKind,omitempty" tf:"unbounded_context_kind,omitempty"` + + // (Set of String) A set of view keys to link this segment to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same segment. Choose one approach per resource. + // A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Choose one approach per resource. + // +listType=set + ViewKeys []*string `json:"viewKeys,omitempty" tf:"view_keys,omitempty"` } type EnvironmentSegmentParameters struct { @@ -324,6 +334,12 @@ type EnvironmentSegmentParameters struct { // For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one. // +kubebuilder:validation:Optional UnboundedContextKind *string `json:"unboundedContextKind,omitempty" tf:"unbounded_context_kind,omitempty"` + + // (Set of String) A set of view keys to link this segment to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same segment. Choose one approach per resource. + // A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Choose one approach per resource. + // +kubebuilder:validation:Optional + // +listType=set + ViewKeys []*string `json:"viewKeys,omitempty" tf:"view_keys,omitempty"` } type ExcludedContextsInitParameters struct { diff --git a/apis/project/v1alpha1/zz_generated.deepcopy.go b/apis/project/v1alpha1/zz_generated.deepcopy.go index 88d708c..0cc37bc 100644 --- a/apis/project/v1alpha1/zz_generated.deepcopy.go +++ b/apis/project/v1alpha1/zz_generated.deepcopy.go @@ -1242,6 +1242,17 @@ func (in *EnvironmentSegmentInitParameters) DeepCopyInto(out *EnvironmentSegment *out = new(string) **out = **in } + if in.ViewKeys != nil { + in, out := &in.ViewKeys, &out.ViewKeys + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvironmentSegmentInitParameters. @@ -1388,6 +1399,17 @@ func (in *EnvironmentSegmentObservation) DeepCopyInto(out *EnvironmentSegmentObs *out = new(string) **out = **in } + if in.ViewKeys != nil { + in, out := &in.ViewKeys, &out.ViewKeys + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvironmentSegmentObservation. @@ -1512,6 +1534,17 @@ func (in *EnvironmentSegmentParameters) DeepCopyInto(out *EnvironmentSegmentPara *out = new(string) **out = **in } + if in.ViewKeys != nil { + in, out := &in.ViewKeys, &out.ViewKeys + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvironmentSegmentParameters. @@ -2773,6 +2806,16 @@ func (in *ProjectInitParameters) DeepCopyInto(out *ProjectInitParameters) { *out = new(string) **out = **in } + if in.RequireViewAssociationForNewFlags != nil { + in, out := &in.RequireViewAssociationForNewFlags, &out.RequireViewAssociationForNewFlags + *out = new(bool) + **out = **in + } + if in.RequireViewAssociationForNewSegments != nil { + in, out := &in.RequireViewAssociationForNewSegments, &out.RequireViewAssociationForNewSegments + *out = new(bool) + **out = **in + } if in.Tags != nil { in, out := &in.Tags, &out.Tags *out = make([]*string, len(*in)) @@ -2860,6 +2903,16 @@ func (in *ProjectObservation) DeepCopyInto(out *ProjectObservation) { *out = new(string) **out = **in } + if in.RequireViewAssociationForNewFlags != nil { + in, out := &in.RequireViewAssociationForNewFlags, &out.RequireViewAssociationForNewFlags + *out = new(bool) + **out = **in + } + if in.RequireViewAssociationForNewSegments != nil { + in, out := &in.RequireViewAssociationForNewSegments, &out.RequireViewAssociationForNewSegments + *out = new(bool) + **out = **in + } if in.Tags != nil { in, out := &in.Tags, &out.Tags *out = make([]*string, len(*in)) @@ -2910,6 +2963,16 @@ func (in *ProjectParameters) DeepCopyInto(out *ProjectParameters) { *out = new(string) **out = **in } + if in.RequireViewAssociationForNewFlags != nil { + in, out := &in.RequireViewAssociationForNewFlags, &out.RequireViewAssociationForNewFlags + *out = new(bool) + **out = **in + } + if in.RequireViewAssociationForNewSegments != nil { + in, out := &in.RequireViewAssociationForNewSegments, &out.RequireViewAssociationForNewSegments + *out = new(bool) + **out = **in + } if in.Tags != nil { in, out := &in.Tags, &out.Tags *out = make([]*string, len(*in)) diff --git a/apis/project/v1alpha1/zz_project_types.go b/apis/project/v1alpha1/zz_project_types.go index 86c5b22..67efa3e 100755 --- a/apis/project/v1alpha1/zz_project_types.go +++ b/apis/project/v1alpha1/zz_project_types.go @@ -336,6 +336,14 @@ type ProjectInitParameters struct { // The project's name. Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Boolean) Whether new flags created in this project must be associated with at least one view. + // Whether new flags created in this project must be associated with at least one view. + RequireViewAssociationForNewFlags *bool `json:"requireViewAssociationForNewFlags,omitempty" tf:"require_view_association_for_new_flags,omitempty"` + + // (Boolean) Whether new segments created in this project must be associated with at least one view. + // Whether new segments created in this project must be associated with at least one view. + RequireViewAssociationForNewSegments *bool `json:"requireViewAssociationForNewSegments,omitempty" tf:"require_view_association_for_new_segments,omitempty"` + // (Set of String) Tags associated with your resource. // Tags associated with your resource. // +listType=set @@ -365,6 +373,14 @@ type ProjectObservation struct { // The project's name. Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Boolean) Whether new flags created in this project must be associated with at least one view. + // Whether new flags created in this project must be associated with at least one view. + RequireViewAssociationForNewFlags *bool `json:"requireViewAssociationForNewFlags,omitempty" tf:"require_view_association_for_new_flags,omitempty"` + + // (Boolean) Whether new segments created in this project must be associated with at least one view. + // Whether new segments created in this project must be associated with at least one view. + RequireViewAssociationForNewSegments *bool `json:"requireViewAssociationForNewSegments,omitempty" tf:"require_view_association_for_new_segments,omitempty"` + // (Set of String) Tags associated with your resource. // Tags associated with your resource. // +listType=set @@ -395,6 +411,16 @@ type ProjectParameters struct { // +kubebuilder:validation:Optional Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Boolean) Whether new flags created in this project must be associated with at least one view. + // Whether new flags created in this project must be associated with at least one view. + // +kubebuilder:validation:Optional + RequireViewAssociationForNewFlags *bool `json:"requireViewAssociationForNewFlags,omitempty" tf:"require_view_association_for_new_flags,omitempty"` + + // (Boolean) Whether new segments created in this project must be associated with at least one view. + // Whether new segments created in this project must be associated with at least one view. + // +kubebuilder:validation:Optional + RequireViewAssociationForNewSegments *bool `json:"requireViewAssociationForNewSegments,omitempty" tf:"require_view_association_for_new_segments,omitempty"` + // (Set of String) Tags associated with your resource. // Tags associated with your resource. // +kubebuilder:validation:Optional diff --git a/config/provider-metadata.yaml b/config/provider-metadata.yaml index 9dee3d8..f8957c1 100644 --- a/config/provider-metadata.yaml +++ b/config/provider-metadata.yaml @@ -96,7 +96,7 @@ resources: config: '(Map of String) The set of configuration fields corresponding to the value defined for integration_key. Refer to the formVariables field in the corresponding integrations//manifest.json file in this repo for a full list of fields for the integration you wish to configure. IMPORTANT: Please note that Terraform will only accept these in snake case, regardless of the case shown in the manifest.' effect: (String) Either allow or deny. This argument defines whether the statement allows or denies access to the named resources and actions. id: (String) The ID of this resource. - integration_key: (String) The integration key. Supported integration keys are chronosphere, cloudtrail, datadog, dynatrace, elastic, grafana, honeycomb, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. + integration_key: (String) The integration key. Supported integration keys are chronosphere, cloudtrail, datadog, dynatrace, dynatrace-v2, elastic, grafana, honeycomb, jira, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. name: (String) A human-friendly name for your audit log subscription viewable from within the LaunchDarkly Integrations page. not_actions: (List of String) The list of action specifiers defining the actions to which the statement does not apply. not_resources: (List of String) The list of resource specifiers defining the resources to which the statement does not apply. @@ -420,6 +420,39 @@ resources: } ] } + - name: checkout_flow + manifest: |- + { + "description": "New checkout experience with improved UX", + "key": "checkout-flow-redesign", + "name": "Checkout Flow Redesign", + "project_key": "example-project", + "tags": [ + "checkout", + "payments", + "frontend" + ], + "variation_type": "boolean", + "view_keys": [ + "payments-team", + "frontend-team" + ] + } + - name: mobile_app_feature + manifest: |- + { + "key": "mobile-push-notifications", + "name": "Mobile Push Notifications", + "project_key": "example-project", + "tags": [ + "mobile", + "notifications" + ], + "variation_type": "boolean", + "view_keys": [ + "mobile-team" + ] + } argumentDocs: archived: (Boolean) Specifies whether the flag is archived or not. Note that you cannot create a new flag that is archived, but can update a flag to be archived. client_side_availability: (Block List) (see below for nested schema) @@ -444,6 +477,7 @@ resources: variations: (Block List) An array of possible variations for the flag (see below for nested schema) variations.description: (String) The variation's description. variations.name: (String) The name of the variation. + view_keys: '(Set of String) A set of view keys to link this flag to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this flag will be linked to the specified views. The field is also computed, meaning Terraform will read back the current view associations from LaunchDarkly to detect drift. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same flag. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the configured view_keys. Choose one approach per resource.' importStatements: - |- # Import a feature flag using the feature flag's ID in the format `project_key/flag_key`. @@ -717,6 +751,44 @@ resources: - |- # LaunchDarkly feature flag environments can be imported using the resource's ID in the form `project_key/env_key/flag_key` terraform import launchdarkly_feature_flag_environment.example example-project/example-env/example-flag-key + launchdarkly_flag_templates: + subCategory: "" + description: 'Provides a LaunchDarkly flag templates resource. This resource allows you to manage the "Custom" flag template settings applied to new feature flags created within a LaunchDarkly project. LaunchDarkly projects include several built-in flag templates (Release, Kill switch, Experiment, Custom, Migration). This resource manages the Custom template only. -> Note: Flag templates are a singleton per project. Destroying this resource only removes it from Terraform state. The flag templates will continue to exist in LaunchDarkly.' + name: launchdarkly_flag_templates + title: launchdarkly_flag_templates Resource - launchdarkly + examples: + - name: example + manifest: |- + { + "boolean_defaults": [ + { + "false_description": "", + "false_display_name": "False", + "off_variation": 1, + "on_variation": 0, + "true_description": "", + "true_display_name": "True" + } + ], + "project_key": "my-project", + "tags": [ + "terraform" + ], + "temporary": false + } + argumentDocs: + boolean_defaults: '(Block List, Min: 1, Max: 1) A block describing the default boolean flag variation settings. (see below for nested schema)' + false_description: (String) The description for the false variation. + false_display_name: (String) The display name for the false variation. + id: (String) The ID of this resource. + off_variation: (Number) The variation index of the boolean flag variation to serve when the flag's targeting is off. + on_variation: (Number) The variation index of the boolean flag variation to serve when the flag's targeting is on. + project_key: (String) The project key. A change in this field will force the destruction of the existing resource and the creation of a new one. + tags: (Set of String) Tags associated with your resource. + temporary: (Boolean) Whether new flags should be temporary by default. + true_description: (String) The description for the true variation. + true_display_name: (String) The display name for the true variation. + importStatements: [] launchdarkly_flag_trigger: subCategory: "" description: 'Provides a LaunchDarkly flag trigger resource. -> Note: Flag triggers are available to customers on an Enterprise LaunchDarkly plan. To learn more, read about our pricing https://launchdarkly.com/pricing/. To upgrade your plan, contact LaunchDarkly Sales https://launchdarkly.com/contact-sales/. This resource allows you to create and manage flag triggers within your LaunchDarkly organization. -> Note: This resource will store sensitive unique trigger URL value in plaintext in your Terraform state. Be sure your state is configured securely before using this resource. See https://www.terraform.io/docs/state/sensitive-data.html for more details.' @@ -846,6 +918,8 @@ resources: ], "key": "example-project", "name": "Example project", + "require_view_association_for_new_flags": false, + "require_view_association_for_new_segments": false, "tags": [ "terraform" ] @@ -889,6 +963,8 @@ resources: mobile_key: (String, Sensitive) The environment's mobile key. name: (String) The name of the environment. require_comments: (Boolean) Set to true if this environment requires comments for flag and segment changes. This field will default to false when not set. + require_view_association_for_new_flags: (Boolean) Whether new flags created in this project must be associated with at least one view. + require_view_association_for_new_segments: (Boolean) Whether new segments created in this project must be associated with at least one view. required: (Boolean) Set to true for changes to flags in this environment to require approval. You may only set required to true if required_approval_tags is not set and vice versa. Defaults to false. required_approval_tags: (List of String) An array of tags used to specify which flags with those tags require approval. You may only set required_approval_tags if required is set to false and vice versa. secure_mode: (Boolean) Set to true to ensure a user of the client-side SDK cannot impersonate another user. This field will default to false when not set. @@ -1135,6 +1211,56 @@ resources: } ] } + - name: premium_users + manifest: |- + { + "description": "Users with premium subscriptions", + "env_key": "production", + "key": "premium-users", + "name": "Premium Users", + "project_key": "example-project", + "rules": [ + { + "clauses": [ + { + "attribute": "plan", + "op": "in", + "values": [ + "premium", + "enterprise" + ] + } + ] + } + ], + "tags": [ + "premium", + "subscription" + ], + "view_keys": [ + "sales-team", + "customer-success" + ] + } + - name: beta_testers + manifest: |- + { + "env_key": "staging", + "included": [ + "user123", + "user456" + ], + "key": "beta-testers", + "name": "Beta Testers", + "project_key": "example-project", + "tags": [ + "beta", + "testing" + ], + "view_keys": [ + "product-team" + ] + } argumentDocs: attribute: (String) The user attribute to operate on bucket_by: (String) The attribute by which to group contexts together. @@ -1160,6 +1286,7 @@ resources: unbounded_context_kind: (String) For Big Segments, the targeted context kind. If this attribute is not specified it will default to user. A change in this field will force the destruction of the existing resource and the creation of a new one. value_type: (String) The type for each of the clause's values. Available types are boolean, string, and number. If omitted, value_type defaults to string. values: (List of String) List of target object keys included in or excluded from the segment. + view_keys: '(Set of String) A set of view keys to link this segment to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this segment will be linked to the specified views. The field is also computed, meaning Terraform will read back the current view associations from LaunchDarkly to detect drift. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same segment. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the configured view_keys. Choose one approach per resource.' weight: (Number) The integer weight of the rule (between 1 and 100000). importStatements: - |- @@ -1250,6 +1377,207 @@ resources: custom_role_keys: '- (Required) List of custom role keys the team will access. The referenced custom roles must already exist in LaunchDarkly. If they don''t, the provider may behave unexpectedly.' team_key: '- (Required) The team key.' importStatements: [] + launchdarkly_view: + subCategory: "" + description: Provides a LaunchDarkly view resource. This resource allows you to create and manage views within your LaunchDarkly project. + name: launchdarkly_view + title: launchdarkly_view Resource - launchdarkly + examples: + - name: example + manifest: |- + { + "description": "An example view for demonstration purposes", + "generate_sdk_keys": true, + "key": "example-view", + "maintainer_id": "507f1f77bcf86cd799439011", + "name": "Example View", + "project_key": "example-project", + "tags": [ + "terraform", + "example" + ] + } + - name: team_maintained + manifest: |- + { + "description": "A view maintained by a team", + "key": "team-view", + "maintainer_team_key": "platform-team", + "name": "Team Maintained View", + "project_key": "example-project", + "tags": [ + "team-managed" + ] + } + argumentDocs: + archived: (Boolean) Whether the view is archived. + description: (String) The view's description. + generate_sdk_keys: (Boolean) Whether to generate SDK keys for this view. + id: (String) The ID of this resource. + key: (String) The view's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one. + maintainer_id: (String) The member ID of the maintainer for this view. Exactly one of maintainer_id and maintainer_team_key must be set. + maintainer_team_key: (String) The team key of the maintainer team for this view. Exactly one of maintainer_id and maintainer_team_key must be set. + name: (String) The view's name. + project_key: (String) The project key. A change in this field will force the destruction of the existing resource and the creation of a new one. + tags: (Set of String) Tags associated with your resource. + importStatements: [] + launchdarkly_view_filter_links: + subCategory: "" + description: 'Provides a LaunchDarkly view filter links resource for linking resources to views using filter expressions. This resource allows you to link all flags and/or segments matching a filter expression to a specific view. The filter is resolved at apply time — the backend finds all resources matching the filter and links them to the view. -> Note: Filter-based links are point-in-time. By default, filters are resolved only when this resource is created or updated (for example, when flag_filter changes). Set reconcile_on_apply = true to force re-resolution on every terraform apply. When to use which resource view_links: You know the exact flag/segment keys to link. Terraform tracks the explicit list and detects drift if links are removed externally.view_filter_links (this resource): You want to link all resources matching a dynamic query (e.g. all flags tagged "frontend"). No drift detection on resolved keys. By default, only resource argument changes trigger updates; set reconcile_on_apply to refresh links every apply.view_keys on individual resources: Each flag/segment declares its own view membership. Best for modular Terraform structures. -> Warning: Do not use view_filter_links and view_links targeting the same view and resource type, as conflicts may cause unexpected behavior.' + name: launchdarkly_view_filter_links + title: launchdarkly_view_filter_links Resource - launchdarkly + examples: + - name: frontend_flags + manifest: |- + { + "flag_filter": "tags:frontend", + "project_key": "my-project", + "view_key": "frontend-team" + } + - name: platform_resources + manifest: |- + { + "flag_filter": "tags:platform", + "project_key": "my-project", + "segment_filter": "tags anyOf [\"platform\"]", + "segment_filter_environment_id": "${launchdarkly_project.my_project.environments[0].client_side_id}", + "view_key": "platform-team" + } + references: + segment_filter_environment_id: launchdarkly_project.my_project.environments[0].client_side_id + - name: beta_segments + manifest: |- + { + "project_key": "my-project", + "segment_filter": "tags anyOf [\"beta\"]", + "segment_filter_environment_id": "${launchdarkly_project.my_project.environments[0].client_side_id}", + "view_key": "beta-program" + } + references: + segment_filter_environment_id: launchdarkly_project.my_project.environments[0].client_side_id + argumentDocs: + flag_filter: (String) A filter expression to match feature flags for linking to the view. Uses the same filter syntax as the flag list API endpoint (e.g. tags:frontend, status:active). + id: (String) The ID of this resource. + project_key: (String) The project key. A change in this field will force the destruction of the existing resource and the creation of a new one. + reconcile_on_apply: to refresh links every apply. + resolved_at: (String) Timestamp of the last successful filter resolution. This value updates when the resource is created or updated, and on every apply when reconcile_on_apply is true. + segment_filter: (String) A filter expression to match segments for linking to the view. Uses the segment query filter syntax (e.g. tags anyOf ["backend"], query = "my-segment", unbounded = true). Requires segment_filter_environment_id to be set. + segment_filter_environment_id: (String) The environment ID to use when resolving segment filters. Required when segment_filter is set. This is the environment's opaque ID (e.g. from launchdarkly_project.environments[*].client_side_id). + view_filter_links: (this resource) + view_key: (String) The view key to link resources to. A change in this field will force the destruction of the existing resource and the creation of a new one. + view_keys: on individual resources + importStatements: [] + launchdarkly_view_links: + subCategory: "" + description: 'Provides a LaunchDarkly view links resource for managing bulk resource linkage to views. This resource allows you to efficiently link multiple flags and/or segments to a specific view. This is particularly useful for administrators organizing resources by team or deployment unit. -> Note: This resource manages ALL links for the specified resource types within a view. Adding or removing items from the configuration will link or unlink those resources accordingly. Alternative Approach: view_keys on Individual Resources For modular Terraform configurations where flags and segments are defined in separate files or modules, you can use the view_keys field directly on the resource instead of using this centralized view_links resource: Feature Flags: Use the view_keys attribute on launchdarkly_feature_flag resourcesSegments: Use the view_keys attribute on launchdarkly_segment resources When to use view_links (this resource): Managing many flags/segments for a single view (bulk operations)Centralized view management across your infrastructureAdministrative view organization When to use view_keys on individual resources: Modular Terraform structures with separate files per flag/segmentEach team/module manages their own resourcesWant view membership defined alongside the resource -> Warning: Do not use both view_links and view_keys to manage the same flag or segment''s view associations. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the managing resource''s configured associations. Choose one approach per resource. See the feature flag resource documentation and segment resource documentation for details on the view_keys attribute.' + name: launchdarkly_view_links + title: launchdarkly_view_links Resource - launchdarkly + examples: + - name: frontend_team + manifest: |- + { + "flags": [ + "feature-login", + "feature-dashboard", + "feature-payments", + "feature-checkout", + "feature-profile", + "feature-notifications", + "feature-search", + "feature-filters", + "feature-analytics", + "feature-dark-mode" + ], + "project_key": "my-project", + "segments": [ + { + "environment_id": "507f1f77bcf86cd799439011", + "segment_key": "frontend-beta-users" + }, + { + "environment_id": "507f1f77bcf86cd799439011", + "segment_key": "premium-customers" + } + ], + "view_key": "frontend-team" + } + - name: mobile_team + manifest: |- + { + "flags": [ + "feature-mobile-login", + "feature-push-notifications", + "feature-offline-mode", + "feature-biometric-auth", + "feature-mobile-payments", + "feature-app-rating" + ], + "project_key": "my-project", + "view_key": "mobile-team" + } + - name: shared_features + manifest: |- + { + "flags": [ + "feature-maintenance-mode", + "feature-emergency-banner", + "feature-api-throttling", + "feature-logging-level" + ], + "project_key": "my-project", + "view_key": "shared-features" + } + - name: backend_team + manifest: |- + { + "flags": [ + "feature-database-migration", + "feature-cache-optimization", + "feature-api-versioning" + ], + "project_key": "my-project", + "segments": [ + { + "environment_id": "507f1f77bcf86cd799439011", + "segment_key": "high-volume-api-users" + }, + { + "environment_id": "507f1f77bcf86cd799439022", + "segment_key": "database-migration-pilot" + } + ], + "view_key": "backend-team" + } + - name: segments_only + manifest: |- + { + "project_key": "my-project", + "segments": [ + { + "environment_id": "507f1f77bcf86cd799439011", + "segment_key": "vip-customers" + }, + { + "environment_id": "507f1f77bcf86cd799439011", + "segment_key": "enterprise-customers" + }, + { + "environment_id": "507f1f77bcf86cd799439011", + "segment_key": "trial-users" + } + ], + "view_key": "user-segments-view" + } + argumentDocs: + environment_id: (String) The environment ID of the segment. + flags: (Set of String) A set of feature flag keys to link to the view. + id: (String) The ID of this resource. + project_key: (String) The project key. A change in this field will force the destruction of the existing resource and the creation of a new one. + segment_key: (String) The key of the segment. + segments: (Block Set) A set of segments to link to the view. Each segment is identified by its environment ID and segment key. (see below for nested schema) + view_key: (String) The view key to link resources to. A change in this field will force the destruction of the existing resource and the creation of a new one. + view_keys: attribute on launchdarkly_feature_flag resources + importStatements: [] launchdarkly_webhook: subCategory: "" description: Provides a LaunchDarkly webhook resource. This resource allows you to create and manage webhooks within your LaunchDarkly organization. diff --git a/config/provider.go b/config/provider.go index 58b8864..b3009fd 100644 --- a/config/provider.go +++ b/config/provider.go @@ -23,6 +23,7 @@ import ( "github.com/launchdarkly/crossplane-provider-launchdarkly/config/teammember" "github.com/launchdarkly/crossplane-provider-launchdarkly/config/teamrolemapping" "github.com/launchdarkly/crossplane-provider-launchdarkly/config/webhook" + "github.com/launchdarkly/crossplane-provider-launchdarkly/internal/version" ujconfig "github.com/crossplane/upjet/v2/pkg/config" ldProvider "github.com/launchdarkly/terraform-provider-launchdarkly/launchdarkly" @@ -51,7 +52,7 @@ func GetProvider() *ujconfig.Provider { // Plugin Framework no-fork mode (team_role_mapping) ujconfig.WithTerraformPluginFrameworkIncludeList(FrameworkResourcesConfigured()), - ujconfig.WithTerraformPluginFrameworkProvider(ldProvider.NewPluginProvider("2.25.3")()), + ujconfig.WithTerraformPluginFrameworkProvider(ldProvider.NewPluginProvider(version.TerraformProviderVersion)()), ujconfig.WithFeaturesPackage("internal/features"), ujconfig.WithDefaultResourceOptions( diff --git a/config/schema.json b/config/schema.json index d590bac..1fb04e6 100644 --- a/config/schema.json +++ b/config/schema.json @@ -1 +1 @@ -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/launchdarkly/launchdarkly":{"provider":{"version":0,"block":{"attributes":{"access_token":{"type":"string","description":"The [personal access token](https://docs.launchdarkly.com/home/account-security/api-access-tokens#personal-tokens) or [service token](https://docs.launchdarkly.com/home/account-security/api-access-tokens#service-tokens) used to authenticate with LaunchDarkly. You can also set this with the `LAUNCHDARKLY_ACCESS_TOKEN` environment variable. You must provide either `access_token` or `oauth_token`.","description_kind":"plain","optional":true},"api_host":{"type":"string","description":"The LaunchDarkly host address. If this argument is not specified, the default host address is `https://app.launchdarkly.com`","description_kind":"plain","optional":true},"http_timeout":{"type":"number","description":"The HTTP timeout (in seconds) when making API calls to LaunchDarkly. Defaults to 20 seconds.","description_kind":"plain","optional":true},"oauth_token":{"type":"string","description":"An OAuth V2 token you use to authenticate with LaunchDarkly. You can also set this with the `LAUNCHDARKLY_OAUTH_TOKEN` environment variable. You must provide either `access_token` or `oauth_token`.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"launchdarkly_access_token":{"version":0,"block":{"attributes":{"custom_roles":{"type":["set","string"],"description":"A list of custom role IDs to use as access limits for the access token.","description_kind":"plain","optional":true},"default_api_version":{"type":"number","description":"The default API version for this token. Defaults to the latest API version. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true,"computed":true},"expire":{"type":"number","description":"An expiration time for the current token secret, expressed as a Unix epoch time. Replace the computed token secret with a new value. The expired secret will no longer be able to authorize usage of the LaunchDarkly API. This field argument is **deprecated**. Please update your config to remove `expire` to maintain compatibility with future versions","description_kind":"plain","deprecated":true,"optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"A human-friendly name for the access token.","description_kind":"plain","optional":true},"role":{"type":"string","description":"A built-in LaunchDarkly role. Can be `reader`, `writer`, or `admin`","description_kind":"plain","optional":true},"service_token":{"type":"bool","description":"Whether the token will be a [service token](https://docs.launchdarkly.com/home/account-security/api-access-tokens#service-tokens). A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"token":{"type":"string","description":"The access token used to authorize usage of the LaunchDarkly API.","description_kind":"plain","computed":true,"sensitive":true}},"block_types":{"inline_roles":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"Define inline custom roles. An array of statements represented as config blocks with three attributes: effect, resources, actions. May be used in place of a built-in or custom role. [Using polices](https://docs.launchdarkly.com/home/members/role-policies). May be specified more than once.","description_kind":"plain"}},"policy_statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"Define inline custom roles. An array of statements represented as config blocks with three attributes: effect, resources, actions. May be used in place of a built-in or custom role. May be specified more than once. This field argument is **deprecated**. Update your config to use `inline_role` to maintain compatibility with future versions.","description_kind":"plain","deprecated":true}}},"description":"Provides a LaunchDarkly access token resource.\n\nThis resource allows you to create and manage access tokens within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource will store the full plaintext secret for your access token in Terraform state. Be sure your state is configured securely before using this resource. See https://www.terraform.io/docs/state/sensitive-data.html for more details.\n\nThe resource must contain either a \"role\", \"custom_role\" or an \"inline_roles\" (previously \"policy_statements\") block. As of v1.7.0, \"policy_statements\" has been deprecated in favor of \"inline_roles\".","description_kind":"plain"}},"launchdarkly_audit_log_subscription":{"version":0,"block":{"attributes":{"config":{"type":["map","string"],"description":"The set of configuration fields corresponding to the value defined for `integration_key`. Refer to the `formVariables` field in the corresponding `integrations/\u003cintegration_key\u003e/manifest.json` file in [this repo](https://github.com/launchdarkly/integration-framework/tree/master/integrations) for a full list of fields for the integration you wish to configure. **IMPORTANT**: Please note that Terraform will only accept these in snake case, regardless of the case shown in the manifest.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_key":{"type":"string","description":"The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"A human-friendly name for your audit log subscription viewable from within the LaunchDarkly Integrations page.","description_kind":"plain","required":true},"on":{"type":"bool","description":"Whether or not you want your subscription enabled, i.e. to actively send events.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"A block representing the resources to which you wish to subscribe.","description_kind":"plain"},"min_items":1}},"description":"Provides a LaunchDarkly audit log subscription resource.\n\nThis resource allows you to create and manage LaunchDarkly audit log subscriptions.","description_kind":"plain"}},"launchdarkly_custom_role":{"version":0,"block":{"attributes":{"base_permissions":{"type":"string","description":"The base permission level - either `reader` or `no_access`. While newer API versions default to `no_access`, this field defaults to `reader` in keeping with previous API versions.","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the custom role.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"A unique key that will be used to reference the custom role in your code. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"A name for the custom role. This must be unique within your organization.","description_kind":"plain","required":true}},"block_types":{"policy":{"nesting_mode":"set","block":{"attributes":{"actions":{"type":["list","string"],"description_kind":"plain","required":true},"effect":{"type":"string","description_kind":"plain","required":true},"resources":{"type":["list","string"],"description_kind":"plain","required":true}},"description_kind":"plain","deprecated":true}},"policy_statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"An array of the policy statements that define the permissions for the custom role. This field accepts [role attributes](https://docs.launchdarkly.com/home/getting-started/vocabulary#role-attribute). To use role attributes, use the syntax `$${roleAttribute/\u003cYOUR_ROLE_ATTRIBUTE\u003e}` in lieu of your usual resource keys.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly custom role resource.\n\n-\u003e **Note:** Custom roles are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis resource allows you to create and manage custom roles within your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_destination":{"version":0,"block":{"attributes":{"config":{"type":["map","string"],"description":"The destination-specific configuration. To learn more, read [Destination-Specific Configs](#destination-specific-configs)","description_kind":"plain","required":true},"env_key":{"type":"string","description":"The environment key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kind":{"type":"string","description":"The data export destination type. Available choices are `kinesis`, `google-pubsub`, `mparticle`, `azure-event-hubs`, and `segment`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"A human-readable name for your data export destination.","description_kind":"plain","required":true},"on":{"type":"bool","description":"Whether the data export destination is on or not.","description_kind":"plain","optional":true},"project_key":{"type":"string","description":"The LaunchDarkly project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"description":"Provides a LaunchDarkly Data Export Destination resource.\n\n-\u003e **Note:** Data Export is available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nData Export Destinations are locations that receive exported data. This resource allows you to configure destinations for the export of raw analytics data, including feature flag requests, analytics events, custom events, and more.\n\nTo learn more about data export, read [Data Export Documentation](https://docs.launchdarkly.com/integrations/data-export).","description_kind":"plain"}},"launchdarkly_environment":{"version":0,"block":{"attributes":{"api_key":{"type":"string","description":"The environment's SDK key.","description_kind":"plain","computed":true,"sensitive":true},"client_side_id":{"type":"string","description":"The environment's client-side ID.","description_kind":"plain","computed":true,"sensitive":true},"color":{"type":"string","description":"The color swatch as an RGB hex value with no leading `#`. For example: `000000`","description_kind":"plain","required":true},"confirm_changes":{"type":"bool","description":"Set to `true` if this environment requires confirmation for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"critical":{"type":"bool","description":"Denotes whether the environment is critical.","description_kind":"plain","optional":true},"default_track_events":{"type":"bool","description":"Set to `true` to enable data export for every flag created in this environment after you configure this argument. This field will default to `false` when not set. To learn more, read [Data Export](https://docs.launchdarkly.com/home/data-export).","description_kind":"plain","optional":true},"default_ttl":{"type":"number","description":"The TTL for the environment. This must be between 0 and 60 minutes. The TTL setting only applies to environments using the PHP SDK. This field will default to `0` when not set. To learn more, read [TTL settings](https://docs.launchdarkly.com/home/organize/environments#ttl-settings).","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The project-unique key for the environment. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"mobile_key":{"type":"string","description":"The environment's mobile key.","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description":"The name of the environment.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The LaunchDarkly project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"require_comments":{"type":"bool","description":"Set to `true` if this environment requires comments for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"secure_mode":{"type":"bool","description":"Set to `true` to ensure a user of the client-side SDK cannot impersonate another user. This field will default to `false` when not set.","description_kind":"plain","optional":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"approval_settings":{"nesting_mode":"list","block":{"attributes":{"auto_apply_approved_changes":{"type":"bool","description":"Automatically apply changes that have been approved by all reviewers. This field is only applicable for approval service kinds other than `launchdarkly`.","description_kind":"plain","optional":true},"can_apply_declined_changes":{"type":"bool","description":"Set to `true` if changes can be applied as long as the `min_num_approvals` is met, regardless of whether any reviewers have declined a request. Defaults to `true`.","description_kind":"plain","optional":true},"can_review_own_request":{"type":"bool","description":"Set to `true` if requesters can approve or decline their own request. They may always comment. Defaults to `false`.","description_kind":"plain","optional":true},"min_num_approvals":{"type":"number","description":"The number of approvals required before an approval request can be applied. This number must be between 1 and 5. Defaults to 1.","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Set to `true` for changes to flags in this environment to require approval. You may only set `required` to true if `required_approval_tags` is not set and vice versa. Defaults to `false`.","description_kind":"plain","optional":true},"required_approval_tags":{"type":["list","string"],"description":"An array of tags used to specify which flags with those tags require approval. You may only set `required_approval_tags` if `required` is set to `false` and vice versa.","description_kind":"plain","optional":true},"service_config":{"type":["map","string"],"description":"The configuration for the service associated with this approval. This is specific to each approval service. For a `service_kind` of `servicenow`, the following fields apply:\n\n\t - `template` (String) The sys_id of the Standard Change Request Template in ServiceNow that LaunchDarkly will use when creating the change request.\n\t - `detail_column` (String) The name of the ServiceNow Change Request column LaunchDarkly uses to populate detailed approval request information. This is most commonly \"justification\".","description_kind":"plain","optional":true},"service_kind":{"type":"string","description":"The kind of service associated with this approval. This determines which platform is used for requesting approval. Valid values are `servicenow`, `launchdarkly`. If you use a value other than `launchdarkly`, you must have already configured the integration in the LaunchDarkly UI or your apply will fail.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Provides a LaunchDarkly environment resource.\n\nThis resource allows you to create and manage environments in your LaunchDarkly organization. This resource should _not_ be used if the encapsulated project is also managed via Terraform. In this case, you should _always_ use the nested environments config blocks on your `launchdarkly_project` resource to manage your environments.\n\n-\u003e **Note:** Mixing the use of nested `environments` blocks in the [`launchdarkly_project`] resource and `launchdarkly_environment` resources is not recommended.","description_kind":"plain"}},"launchdarkly_feature_flag":{"version":0,"block":{"attributes":{"archived":{"type":"bool","description":"Specifies whether the flag is archived or not. Note that you cannot create a new flag that is archived, but can update a flag to be archived.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The feature flag's description.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_in_snippet":{"type":"bool","description":"Specifies whether this flag should be made available to the client-side JavaScript SDK using the client-side Id. This value gets its default from your project configuration if not set. `include_in_snippet` is now deprecated. Please migrate to `client_side_availability.using_environment_id` to maintain future compatibility.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"key":{"type":"string","description":"The unique feature flag key that references the flag in your application code. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The feature flag maintainer's 24 character alphanumeric team member ID. `maintainer_team_key` cannot be set if `maintainer_id` is set. If neither is set, it will automatically be or stay set to the member ID associated with the API key used by your LaunchDarkly Terraform provider or the most recently-set maintainer.","description_kind":"plain","optional":true,"computed":true},"maintainer_team_key":{"type":"string","description":"The key of the associated team that maintains this feature flag. `maintainer_id` cannot be set if `maintainer_team_key` is set","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The human-readable name of the feature flag.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The feature flag's project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"temporary":{"type":"bool","description":"Specifies whether the flag is a temporary flag.","description_kind":"plain","optional":true},"variation_type":{"type":"string","description":"The feature flag's variation type: `boolean`, `string`, `number` or `json`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true}},"block_types":{"client_side_availability":{"nesting_mode":"list","block":{"attributes":{"using_environment_id":{"type":"bool","description":"Whether this flag is available to SDKs using the client-side ID.","description_kind":"plain","optional":true,"computed":true},"using_mobile_key":{"type":"bool","description":"Whether this flag is available to SDKs using a mobile key.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"custom_properties":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The unique custom property key.","description_kind":"plain","required":true},"name":{"type":"string","description":"The name of the custom property.","description_kind":"plain","required":true},"value":{"type":["list","string"],"description":"The list of custom property value strings.","description_kind":"plain","required":true}},"description":"List of nested blocks describing the feature flag's [custom properties](https://docs.launchdarkly.com/home/connecting/custom-properties)","description_kind":"plain"},"max_items":64},"defaults":{"nesting_mode":"list","block":{"attributes":{"off_variation":{"type":"number","description":"The index of the variation the flag will default to in all new environments when off.","description_kind":"plain","required":true},"on_variation":{"type":"number","description":"The index of the variation the flag will default to in all new environments when on.","description_kind":"plain","required":true}},"description":"A block containing the indices of the variations to be used as the default on and off variations in all new environments. Flag configurations in existing environments will not be changed nor updated if the configuration block is removed.","description_kind":"plain"},"max_items":1},"variations":{"nesting_mode":"list","block":{"attributes":{"description":{"type":"string","description":"The variation's description.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the variation.","description_kind":"plain","optional":true},"value":{"type":"string","description":"The variation value. The value's type must correspond to the `variation_type` argument. For example: `variation_type = \"boolean\"` accepts only `true` or `false`. The `number` variation type accepts both floats and ints, but please note that any trailing zeroes on floats will be trimmed (i.e. `1.1` and `1.100` will both be converted to `1.1`).\n\nIf you wish to define an empty string variation, you must still define the value field on the variations block like so:\n\n```terraform\nvariations {\n value = \"\"\n}\n```\n\n-\u003e **Note:** Terraform manages `variations` as an ordered array and identifies them by index. This means that if you change the order of your `variations` block, you may end up destroying and recreating those variations. Additionally, if you delete variations that have targets that have been attached outside of Terraform, those targets may be incorrectly reassigned to a different variation.","description_kind":"plain","required":true}},"description":"An array of possible variations for the flag","description_kind":"plain"}}},"description":"Provides a LaunchDarkly feature flag resource.\n\nThis resource allows you to create and manage feature flags within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource is for global-level feature flag configuration. Unexpected behavior may result if your environment-level configurations are not also managed from Terraform.","description_kind":"plain"}},"launchdarkly_feature_flag_environment":{"version":0,"block":{"attributes":{"env_key":{"type":"string","description":"The environment key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"flag_id":{"type":"string","description":"The feature flag's unique `id` in the format `project_key/flag_key`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"off_variation":{"type":"number","description":"The index of the variation to serve if targeting is disabled.","description_kind":"plain","required":true},"on":{"type":"bool","description":"Whether targeting is enabled. Defaults to `false` if not set.","description_kind":"plain","optional":true},"track_events":{"type":"bool","description":"Whether to send event data back to LaunchDarkly. Defaults to `false` if not set.","description_kind":"plain","optional":true}},"block_types":{"context_targets":{"nesting_mode":"set","block":{"attributes":{"context_kind":{"type":"string","description":"The context kind on which the flag should target in this environment. User (`user`) targets should be specified as `targets` attribute blocks.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"List of `user` strings to target.","description_kind":"plain","required":true},"variation":{"type":"number","description":"The index of the variation to serve if a user target value is matched.","description_kind":"plain","required":true}},"description":"The set of nested blocks describing the individual targets for non-user context kinds for each variation.","description_kind":"plain"}},"fallthrough":{"nesting_mode":"list","block":{"attributes":{"bucket_by":{"type":"string","description":"Group percentage rollout by a custom attribute. This argument is only valid if rollout_weights is also specified.","description_kind":"plain","optional":true},"context_kind":{"type":"string","description":"The context kind associated with the specified rollout. This argument is only valid if rollout_weights is also specified. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"rollout_weights":{"type":["list","number"],"description":"List of integer percentage rollout weights (in thousandths of a percent) to apply to each variation if the rule clauses evaluates to `true`. The sum of the `rollout_weights` must equal 100000 and the number of rollout weights specified in the array must match the number of flag variations. You must specify either `variation` or `rollout_weights`.","description_kind":"plain","optional":true},"variation":{"type":"number","description":"The default integer variation index to serve if no `prerequisites`, `target`, or `rules` apply. You must specify either `variation` or `rollout_weights`.","description_kind":"plain","optional":true}},"description":"Nested block describing the default variation to serve if no `prerequisites`, `target`, or `rules` apply.","description_kind":"plain"},"min_items":1,"max_items":1},"prerequisites":{"nesting_mode":"list","block":{"attributes":{"flag_key":{"type":"string","description":"The prerequisite feature flag's `key`.","description_kind":"plain","required":true},"variation":{"type":"number","description":"The index of the prerequisite feature flag's variation to target.","description_kind":"plain","required":true}},"description":"List of nested blocks describing prerequisite feature flags rules.","description_kind":"plain"}},"rules":{"nesting_mode":"list","block":{"attributes":{"bucket_by":{"type":"string","description":"Group percentage rollout by a custom attribute. This argument is only valid if `rollout_weights` is also specified.","description_kind":"plain","optional":true},"context_kind":{"type":"string","description":"The context kind associated with the specified rollout. This argument is only valid if `rollout_weights` is also specified. Defaults to `user` if omitted.","description_kind":"plain","optional":true},"description":{"type":"string","description":"A human-readable description of the targeting rule.","description_kind":"plain","optional":true},"rollout_weights":{"type":["list","number"],"description":"List of integer percentage rollout weights (in thousandths of a percent) to apply to each variation if the rule clauses evaluates to `true`. The sum of the `rollout_weights` must equal 100000 and the number of rollout weights specified in the array must match the number of flag variations. You must specify either `variation` or `rollout_weights`.","description_kind":"plain","optional":true},"variation":{"type":"number","description":"The integer variation index to serve if the rule clauses evaluate to `true`. You must specify either `variation` or `rollout_weights`","description_kind":"plain","optional":true}},"block_types":{"clauses":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The user attribute to operate on","description_kind":"plain","required":true},"context_kind":{"type":"string","description":"The context kind associated with this rule clause. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"negate":{"type":"bool","description":"Whether to negate the rule clause.","description_kind":"plain","optional":true},"op":{"type":"string","description":"The operator associated with the rule clause. Available options are `in`, `endsWith`, `startsWith`, `matches`, `contains`, `lessThan`, `lessThanOrEqual`, `greaterThanOrEqual`, `before`, `after`, `segmentMatch`, `semVerEqual`, `semVerLessThan`, and `semVerGreaterThan`. Read LaunchDarkly's [Operators](https://docs.launchdarkly.com/sdk/concepts/flag-evaluation-rules#operators) documentation for more information.","description_kind":"plain","required":true},"value_type":{"type":"string","description":"The type for each of the clause's values. Available types are `boolean`, `string`, and `number`. If omitted, `value_type` defaults to `string`.","description_kind":"plain","optional":true},"values":{"type":["list","string"],"description":"The list of values associated with the rule clause.","description_kind":"plain","required":true}},"description":"List of nested blocks specifying the logical clauses to evaluate","description_kind":"plain"}}},"description":"List of logical targeting rules.","description_kind":"plain"}},"targets":{"nesting_mode":"set","block":{"attributes":{"values":{"type":["list","string"],"description":"List of `user` strings to target.","description_kind":"plain","required":true},"variation":{"type":"number","description":"The index of the variation to serve if a user target value is matched.","description_kind":"plain","required":true}},"description":"Set of nested blocks describing the individual user targets for each variation.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly environment-specific feature flag resource.\n\nThis resource allows you to create and manage environment-specific feature flags attributes within your LaunchDarkly organization.\n\n-\u003e **Note:** If you intend to attach a feature flag to any experiments, we do _not_ recommend configuring environment-specific flag settings using Terraform. Subsequent applies may overwrite the changes made by experiments and break your experiment. An alternate workaround is to use the [lifecycle.ignore_changes](https://developer.hashicorp.com/terraform/language/meta-arguments/lifecycle#ignore_changes) Terraform meta-argument on the `fallthrough` field to prevent potential overwrites.","description_kind":"plain"}},"launchdarkly_flag_trigger":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","description":"Whether the trigger is currently active or not.","description_kind":"plain","required":true},"env_key":{"type":"string","description":"The unique key of the environment the flag trigger will work in. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"flag_key":{"type":"string","description":"The unique key of the associated flag. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_key":{"type":"string","description":"The unique identifier of the integration you intend to set your trigger up with. Currently supported are `generic-trigger`, `datadog`, `dynatrace`, `dynatrace-cloud-automation`, `honeycomb`, `new-relic-apm`, and `signalfx`. `generic-trigger` should be used for integrations not explicitly supported. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The ID of the member responsible for maintaining the flag trigger. If created via Terraform, this value will be the ID of the member associated with the API key used for your provider configuration.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The unique key of the project encompassing the associated flag. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"trigger_url":{"type":"string","description":"The unique URL used to invoke the trigger.","description_kind":"plain","computed":true,"sensitive":true}},"block_types":{"instructions":{"nesting_mode":"list","block":{"attributes":{"kind":{"type":"string","description":"The action to perform when triggering. Currently supported flag actions are `turnFlagOn` and `turnFlagOff`.","description_kind":"plain","required":true}},"description":"Instructions containing the action to perform when invoking the trigger. Currently supported flag actions are `turnFlagOn` and `turnFlagOff`. This must be passed as the key-value pair `{ kind = \"\u003cflag_action\u003e\" }`.","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Provides a LaunchDarkly flag trigger resource.\n\n-\u003e **Note:** Flag triggers are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis resource allows you to create and manage flag triggers within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource will store sensitive unique trigger URL value in plaintext in your Terraform state. Be sure your state is configured securely before using this resource. See https://www.terraform.io/docs/state/sensitive-data.html for more details.","description_kind":"plain"}},"launchdarkly_metric":{"version":0,"block":{"attributes":{"analysis_type":{"type":"string","description":"The method for analyzing metric events. Available choices are `mean` and `percentile`.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The description of the metric's purpose.","description_kind":"plain","optional":true},"event_key":{"type":"string","description":"The event key for your metric (if custom metric)","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_units_without_events":{"type":"bool","description":"Include units that did not send any events and set their value to 0.","description_kind":"plain","optional":true,"computed":true},"is_active":{"type":"bool","description":"Ignored. All metrics are considered active.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"is_numeric":{"type":"bool","description":"Whether a `custom` metric is a numeric metric or not.","description_kind":"plain","optional":true},"key":{"type":"string","description":"The unique key that references the metric. A change in this field will force the destruction of the existing resource and the creation of a new one. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"kind":{"type":"string","description":"The metric type. Available choices are `click`, `custom`, and `pageview`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The LaunchDarkly member ID of the member who will maintain the metric. If not set, the API will automatically apply the member associated with your Terraform API key or the most recently-set maintainer","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The human-friendly name for the metric.","description_kind":"plain","required":true},"percentile_value":{"type":"number","description":"The percentile for the analysis method. An integer denoting the target percentile between 0 and 100. Required when analysis_type is percentile.","description_kind":"plain","optional":true},"project_key":{"type":"string","description":"The metrics's project key. A change in this field will force the destruction of the existing resource and the creation of a new one. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"randomization_units":{"type":["set","string"],"description":"A set of one or more context kinds that this metric can measure events from. Metrics can only use context kinds marked as \"Available for experiments.\" For more information, read [Allocating experiment audiences](https://docs.launchdarkly.com/home/creating-experiments/allocation).","description_kind":"plain","optional":true,"computed":true},"selector":{"type":"string","description":"The CSS selector for your metric (if click metric)","description_kind":"plain","optional":true},"success_criteria":{"type":"string","description":"The success criteria for your metric (if numeric metric). Available choices are `HigherThanBaseline` and `LowerThanBaseline`.","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"unit":{"type":"string","description":"(Required for kind `custom`) The unit for numeric `custom` metrics.","description_kind":"plain","optional":true},"unit_aggregation_type":{"type":"string","description":"The method by which multiple unit event values are aggregated. Available choices are `average` and `sum`.","description_kind":"plain","optional":true},"version":{"type":"number","description":"Version of the metric","description_kind":"plain","computed":true}},"block_types":{"urls":{"nesting_mode":"list","block":{"attributes":{"kind":{"type":"string","description":"The URL type. Available choices are `exact`, `canonical`, `substring` and `regex`.","description_kind":"plain","required":true},"pattern":{"type":"string","description":"(Required for kind `regex`) The regex pattern to match by.","description_kind":"plain","optional":true},"substring":{"type":"string","description":"(Required for kind `substring`) The URL substring to match by.","description_kind":"plain","optional":true},"url":{"type":"string","description":"(Required for kind `exact` and `canonical`) The exact or canonical URL.","description_kind":"plain","optional":true}},"description":"List of nested `url` blocks describing URLs that you want to associate with the metric.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly metric resource.\n\nThis resource allows you to create and manage metrics within your LaunchDarkly organization.\n\nTo learn more about metrics and experimentation, read [Experimentation Documentation](https://docs.launchdarkly.com/home/experimentation).","description_kind":"plain"}},"launchdarkly_project":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_in_snippet":{"type":"bool","description":"Whether feature flags created under the project should be available to client-side SDKs by default. Please migrate to `default_client_side_availability` to maintain future compatibility.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"key":{"type":"string","description":"The project's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"The project's name.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"default_client_side_availability":{"nesting_mode":"list","block":{"attributes":{"using_environment_id":{"type":"bool","description_kind":"plain","required":true},"using_mobile_key":{"type":"bool","description_kind":"plain","required":true}},"description":"A block describing which client-side SDKs can use new flags by default.","description_kind":"plain"}},"environments":{"nesting_mode":"list","block":{"attributes":{"api_key":{"type":"string","description":"The environment's SDK key.","description_kind":"plain","computed":true,"sensitive":true},"client_side_id":{"type":"string","description":"The environment's client-side ID.","description_kind":"plain","computed":true,"sensitive":true},"color":{"type":"string","description":"The color swatch as an RGB hex value with no leading `#`. For example: `000000`","description_kind":"plain","required":true},"confirm_changes":{"type":"bool","description":"Set to `true` if this environment requires confirmation for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"critical":{"type":"bool","description":"Denotes whether the environment is critical.","description_kind":"plain","optional":true},"default_track_events":{"type":"bool","description":"Set to `true` to enable data export for every flag created in this environment after you configure this argument. This field will default to `false` when not set. To learn more, read [Data Export](https://docs.launchdarkly.com/home/data-export).","description_kind":"plain","optional":true},"default_ttl":{"type":"number","description":"The TTL for the environment. This must be between 0 and 60 minutes. The TTL setting only applies to environments using the PHP SDK. This field will default to `0` when not set. To learn more, read [TTL settings](https://docs.launchdarkly.com/home/organize/environments#ttl-settings).","description_kind":"plain","optional":true},"key":{"type":"string","description":"The project-unique key for the environment. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"mobile_key":{"type":"string","description":"The environment's mobile key.","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description":"The name of the environment.","description_kind":"plain","required":true},"require_comments":{"type":"bool","description":"Set to `true` if this environment requires comments for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"secure_mode":{"type":"bool","description":"Set to `true` to ensure a user of the client-side SDK cannot impersonate another user. This field will default to `false` when not set.","description_kind":"plain","optional":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"approval_settings":{"nesting_mode":"list","block":{"attributes":{"auto_apply_approved_changes":{"type":"bool","description":"Automatically apply changes that have been approved by all reviewers. This field is only applicable for approval service kinds other than `launchdarkly`.","description_kind":"plain","optional":true},"can_apply_declined_changes":{"type":"bool","description":"Set to `true` if changes can be applied as long as the `min_num_approvals` is met, regardless of whether any reviewers have declined a request. Defaults to `true`.","description_kind":"plain","optional":true},"can_review_own_request":{"type":"bool","description":"Set to `true` if requesters can approve or decline their own request. They may always comment. Defaults to `false`.","description_kind":"plain","optional":true},"min_num_approvals":{"type":"number","description":"The number of approvals required before an approval request can be applied. This number must be between 1 and 5. Defaults to 1.","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Set to `true` for changes to flags in this environment to require approval. You may only set `required` to true if `required_approval_tags` is not set and vice versa. Defaults to `false`.","description_kind":"plain","optional":true},"required_approval_tags":{"type":["list","string"],"description":"An array of tags used to specify which flags with those tags require approval. You may only set `required_approval_tags` if `required` is set to `false` and vice versa.","description_kind":"plain","optional":true},"service_config":{"type":["map","string"],"description":"The configuration for the service associated with this approval. This is specific to each approval service. For a `service_kind` of `servicenow`, the following fields apply:\n\n\t - `template` (String) The sys_id of the Standard Change Request Template in ServiceNow that LaunchDarkly will use when creating the change request.\n\t - `detail_column` (String) The name of the ServiceNow Change Request column LaunchDarkly uses to populate detailed approval request information. This is most commonly \"justification\".","description_kind":"plain","optional":true},"service_kind":{"type":"string","description":"The kind of service associated with this approval. This determines which platform is used for requesting approval. Valid values are `servicenow`, `launchdarkly`. If you use a value other than `launchdarkly`, you must have already configured the integration in the LaunchDarkly UI or your apply will fail.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"List of nested `environments` blocks describing LaunchDarkly environments that belong to the project. When managing LaunchDarkly projects in Terraform, you should always manage your environments as nested project resources.\n\n-\u003e **Note:** Mixing the use of nested `environments` blocks and [`launchdarkly_environment`](/docs/providers/launchdarkly/r/environment.html) resources is not recommended. `launchdarkly_environment` resources should only be used when the encapsulating project is not managed in Terraform.","description_kind":"plain"},"min_items":1}},"description":"Provides a LaunchDarkly project resource.\n\nThis resource allows you to create and manage projects within your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_relay_proxy_configuration":{"version":0,"block":{"attributes":{"display_key":{"type":"string","description":"The last 4 characters of the Relay Proxy configuration's unique key.","description_kind":"plain","computed":true},"full_key":{"type":"string","description":"The Relay Proxy configuration's unique key. Because the `full_key` is only exposed upon creation, it will not be available if the resource is imported.","description_kind":"plain","computed":true,"sensitive":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The human-readable name for your Relay Proxy configuration.","description_kind":"plain","required":true}},"block_types":{"policy":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"The Relay Proxy configuration's rule policy block. This determines what content the Relay Proxy receives. To learn more, read [Understanding policies](https://docs.launchdarkly.com/home/members/role-policies#understanding-policies).","description_kind":"plain"},"min_items":1}},"description":"Provides a LaunchDarkly Relay Proxy configuration resource for use with the Relay Proxy's [automatic configuration feature](https://docs.launchdarkly.com/home/relay-proxy/automatic-configuration).\n\n-\u003e **Note:** Relay Proxy automatic configuration is available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis resource allows you to create and manage Relay Proxy configurations within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource will store the full plaintext secret for your Relay Proxy configuration's unique key in Terraform state. Be sure your state is configured securely before using this resource. See https://www.terraform.io/docs/state/sensitive-data.html for more details.","description_kind":"plain"}},"launchdarkly_segment":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"The segment's creation date represented as a UNIX epoch timestamp.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The description of the segment's purpose.","description_kind":"plain","optional":true},"env_key":{"type":"string","description":"The segment's environment key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"excluded":{"type":["list","string"],"description":"List of user keys excluded from the segment. To target on other context kinds, use the excluded_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"included":{"type":["list","string"],"description":"List of user keys included in the segment. To target on other context kinds, use the included_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","optional":true},"key":{"type":"string","description":"The unique key that references the segment. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"The human-friendly name for the segment.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The segment's project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"unbounded":{"type":"bool","description":"Whether to create a standard segment (`false`) or a Big Segment (`true`). Standard segments include rule-based and smaller list-based segments. Big Segments include larger list-based segments and synced segments. Only use a Big Segment if you need to add more than 15,000 individual targets. It is not possible to manage the list of targeted contexts for Big Segments with Terraform. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"unbounded_context_kind":{"type":"string","description":"For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"excluded_contexts":{"nesting_mode":"list","block":{"attributes":{"context_kind":{"type":"string","description":"The context kind associated with this segment target. To target on user contexts, use the included and excluded attributes.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"List of target object keys included in or excluded from the segment.","description_kind":"plain","required":true}},"description":"List of non-user target objects excluded from the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain"}},"included_contexts":{"nesting_mode":"list","block":{"attributes":{"context_kind":{"type":"string","description":"The context kind associated with this segment target. To target on user contexts, use the included and excluded attributes.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"List of target object keys included in or excluded from the segment.","description_kind":"plain","required":true}},"description":"List of non-user target objects included in the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain"}},"rules":{"nesting_mode":"list","block":{"attributes":{"bucket_by":{"type":"string","description":"The attribute by which to group contexts together.","description_kind":"plain","optional":true},"rollout_context_kind":{"type":"string","description":"The context kind associated with this segment rule. This argument is only valid if `weight` is also specified. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"weight":{"type":"number","description":"The integer weight of the rule (between 1 and 100000).","description_kind":"plain","optional":true}},"block_types":{"clauses":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The user attribute to operate on","description_kind":"plain","required":true},"context_kind":{"type":"string","description":"The context kind associated with this rule clause. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"negate":{"type":"bool","description":"Whether to negate the rule clause.","description_kind":"plain","optional":true},"op":{"type":"string","description":"The operator associated with the rule clause. Available options are `in`, `endsWith`, `startsWith`, `matches`, `contains`, `lessThan`, `lessThanOrEqual`, `greaterThanOrEqual`, `before`, `after`, `segmentMatch`, `semVerEqual`, `semVerLessThan`, and `semVerGreaterThan`. Read LaunchDarkly's [Operators](https://docs.launchdarkly.com/sdk/concepts/flag-evaluation-rules#operators) documentation for more information.","description_kind":"plain","required":true},"value_type":{"type":"string","description":"The type for each of the clause's values. Available types are `boolean`, `string`, and `number`. If omitted, `value_type` defaults to `string`.","description_kind":"plain","optional":true},"values":{"type":["list","string"],"description":"The list of values associated with the rule clause.","description_kind":"plain","required":true}},"description":"List of nested blocks specifying the logical clauses to evaluate","description_kind":"plain"}}},"description":"List of nested custom rule blocks to apply to the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly segment resource.\n\nThis resource allows you to create and manage segments within your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_team":{"version":0,"block":{"attributes":{"custom_role_keys":{"type":["set","string"],"description":"List of custom role keys the team will access. The referenced custom roles must already exist in LaunchDarkly. If they don't, the provider may behave unexpectedly.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The team description.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The team key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainers":{"type":["set","string"],"description":"List of member IDs for users who maintain the team.","description_kind":"plain","optional":true},"member_ids":{"type":["set","string"],"description":"List of member IDs who belong to the team.","description_kind":"plain","optional":true},"name":{"type":"string","description":"A human-friendly name for the team.","description_kind":"plain","required":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team resource.\n\nThis resource allows you to create and manage a team within your LaunchDarkly organization.\n\n-\u003e **Note:** Teams are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).","description_kind":"plain"}},"launchdarkly_team_member":{"version":0,"block":{"attributes":{"custom_roles":{"type":["set","string"],"description":"The list of custom roles keys associated with the team member. Custom roles are only available to customers on an Enterprise plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\n-\u003e **Note:** each `launchdarkly_team_member` must have either a `role` or `custom_roles` argument.","description_kind":"plain","optional":true},"email":{"type":"string","description":"The unique email address associated with the team member. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"first_name":{"type":"string","description":"The team member's given name. Once created, this cannot be updated except by the team member.","description_kind":"plain","optional":true},"id":{"type":"string","description":"The 24 character alphanumeric ID of the team member.","description_kind":"plain","computed":true},"last_name":{"type":"string","description":"TThe team member's family name. Once created, this cannot be updated except by the team member.","description_kind":"plain","optional":true},"role":{"type":"string","description":"The role associated with team member. Supported roles are `reader`, `writer`, `no_access`, or `admin`. If you don't specify a role, `reader` is assigned by default.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team member resource.\n\nThis resource allows you to create and manage team members within your LaunchDarkly organization.\n\n-\u003e **Note:** You can only manage team members with \"admin\" level personal access tokens. To learn more, read [Managing Teams](https://docs.launchdarkly.com/home/teams/managing).","description_kind":"plain"}},"launchdarkly_team_role_mapping":{"version":0,"block":{"attributes":{"custom_role_keys":{"type":["set","string"],"description":"A set of custom role keys to assign to the team.","description_kind":"plain","required":true},"id":{"type":"string","description":"The ID for this resource.","description_kind":"plain","computed":true},"team_key":{"type":"string","description":"The LaunchDarkly team key.","description_kind":"plain","required":true}},"description":"Manages the mapping of LaunchDarkly custom roles to teams.","description_kind":"plain"}},"launchdarkly_webhook":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The webhook's human-readable name.","description_kind":"plain","optional":true},"on":{"type":"bool","description":"Specifies whether the webhook is enabled.","description_kind":"plain","optional":true},"secret":{"type":"string","description":"The secret used to sign the webhook.","description_kind":"plain","optional":true,"sensitive":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"url":{"type":"string","description":"The URL of the remote webhook.","description_kind":"plain","required":true}},"block_types":{"statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"List of policy statement blocks used to filter webhook events. For more information on webhook policy filters read [Adding a policy filter](https://docs.launchdarkly.com/integrations/webhooks#adding-a-policy-filter).","description_kind":"plain"}}},"description":"Provides a LaunchDarkly webhook resource.\n\nThis resource allows you to create and manage webhooks within your LaunchDarkly organization.","description_kind":"plain"}}},"data_source_schemas":{"launchdarkly_audit_log_subscription":{"version":0,"block":{"attributes":{"config":{"type":["map","string"],"description":"The set of configuration fields corresponding to the value defined for `integration_key`. Refer to the `formVariables` field in the corresponding `integrations/\u003cintegration_key\u003e/manifest.json` file in [this repo](https://github.com/launchdarkly/integration-framework/tree/master/integrations) for a full list of fields for the integration you wish to configure. **IMPORTANT**: Please note that Terraform will only accept these in snake case, regardless of the case shown in the manifest.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The audit log subscription ID.","description_kind":"plain","required":true},"integration_key":{"type":"string","description":"The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`.","description_kind":"plain","required":true},"name":{"type":"string","description":"A human-friendly name for your audit log subscription viewable from within the LaunchDarkly Integrations page.","description_kind":"plain","computed":true},"on":{"type":"bool","description":"Whether or not you want your subscription enabled, i.e. to actively send events.","description_kind":"plain","computed":true},"statements":{"type":["list",["object",{"actions":["list","string"],"effect":"string","not_actions":["list","string"],"not_resources":["list","string"],"resources":["list","string"]}]],"description":"A block representing the resources to which you wish to subscribe.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly audit log subscription data source.\n\nThis data source allows you to retrieve information about LaunchDarkly audit log subscriptions.","description_kind":"plain"}},"launchdarkly_environment":{"version":0,"block":{"attributes":{"api_key":{"type":"string","description":"The environment's SDK key.","description_kind":"plain","computed":true,"sensitive":true},"approval_settings":{"type":["list",["object",{"auto_apply_approved_changes":"bool","can_apply_declined_changes":"bool","can_review_own_request":"bool","min_num_approvals":"number","required":"bool","required_approval_tags":["list","string"],"service_config":["map","string"],"service_kind":"string"}]],"description_kind":"plain","computed":true},"client_side_id":{"type":"string","description":"The environment's client-side ID.","description_kind":"plain","computed":true,"sensitive":true},"color":{"type":"string","description_kind":"plain","computed":true},"confirm_changes":{"type":"bool","description":"Set to `true` if this environment requires confirmation for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","computed":true},"critical":{"type":"bool","description":"Denotes whether the environment is critical.","description_kind":"plain","optional":true},"default_track_events":{"type":"bool","description":"Set to `true` to enable data export for every flag created in this environment after you configure this argument. This field will default to `false` when not set. To learn more, read [Data Export](https://docs.launchdarkly.com/home/data-export).","description_kind":"plain","computed":true},"default_ttl":{"type":"number","description":"The TTL for the environment. This must be between 0 and 60 minutes. The TTL setting only applies to environments using the PHP SDK. This field will default to `0` when not set. To learn more, read [TTL settings](https://docs.launchdarkly.com/home/organize/environments#ttl-settings).","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The project-unique key for the environment.","description_kind":"plain","required":true},"mobile_key":{"type":"string","description":"The environment's mobile key.","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The environment's project key.","description_kind":"plain","required":true},"require_comments":{"type":"bool","description":"Set to `true` if this environment requires comments for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","computed":true},"secure_mode":{"type":"bool","description":"Set to `true` to ensure a user of the client-side SDK cannot impersonate another user. This field will default to `false` when not set.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly environment data source.\n\nThis data source allows you to retrieve environment information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_feature_flag":{"version":0,"block":{"attributes":{"archived":{"type":"bool","description":"Specifies whether the flag is archived or not. Note that you cannot create a new flag that is archived, but can update a flag to be archived.","description_kind":"plain","computed":true},"client_side_availability":{"type":["list",["object",{"using_environment_id":"bool","using_mobile_key":"bool"}]],"description_kind":"plain","computed":true},"custom_properties":{"type":["set",["object",{"key":"string","name":"string","value":["list","string"]}]],"description":"List of nested blocks describing the feature flag's [custom properties](https://docs.launchdarkly.com/home/connecting/custom-properties)","description_kind":"plain","computed":true},"defaults":{"type":["list",["object",{"off_variation":"number","on_variation":"number"}]],"description":"A block containing the indices of the variations to be used as the default on and off variations in all new environments. Flag configurations in existing environments will not be changed nor updated if the configuration block is removed.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The feature flag's description.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_in_snippet":{"type":"bool","description":"Specifies whether this flag should be made available to the client-side JavaScript SDK using the client-side Id. This value gets its default from your project configuration if not set. `include_in_snippet` is now deprecated. Please migrate to `client_side_availability.using_environment_id` to maintain future compatibility.","description_kind":"plain","deprecated":true,"computed":true},"key":{"type":"string","description":"The unique feature flag key that references the flag in your application code.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The feature flag maintainer's 24 character alphanumeric team member ID. `maintainer_team_key` cannot be set if `maintainer_id` is set. If neither is set, it will automatically be or stay set to the member ID associated with the API key used by your LaunchDarkly Terraform provider or the most recently-set maintainer.","description_kind":"plain","optional":true,"computed":true},"maintainer_team_key":{"type":"string","description":"The key of the associated team that maintains this feature flag. `maintainer_id` cannot be set if `maintainer_team_key` is set","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The feature flag's human-readable name","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The feature flag's project key.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"temporary":{"type":"bool","description":"Specifies whether the flag is a temporary flag.","description_kind":"plain","computed":true},"variation_type":{"type":"string","description":"The uniform type for all variations. Can be either \"boolean\", \"string\", \"number\", or \"json\".","description_kind":"plain","computed":true},"variations":{"type":["list",["object",{"description":"string","name":"string","value":"string"}]],"description":"An array of possible variations for the flag","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly feature flag data source.\n\nThis data source allows you to retrieve feature flag information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_feature_flag_environment":{"version":0,"block":{"attributes":{"context_targets":{"type":["set",["object",{"context_kind":"string","values":["list","string"],"variation":"number"}]],"description":"The set of nested blocks describing the individual targets for non-user context kinds for each variation.","description_kind":"plain","computed":true},"env_key":{"type":"string","description":"The environment key.","description_kind":"plain","required":true},"fallthrough":{"type":["list",["object",{"bucket_by":"string","context_kind":"string","rollout_weights":["list","number"],"variation":"number"}]],"description":"Nested block describing the default variation to serve if no `prerequisites`, `target`, or `rules` apply.","description_kind":"plain","computed":true},"flag_id":{"type":"string","description":"The feature flag's unique `id` in the format `project_key/flag_key`.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"off_variation":{"type":"number","description":"The index of the variation to serve if targeting is disabled.","description_kind":"plain","computed":true},"on":{"type":"bool","description":"Whether targeting is enabled. Defaults to `false` if not set.","description_kind":"plain","computed":true},"prerequisites":{"type":["list",["object",{"flag_key":"string","variation":"number"}]],"description":"List of nested blocks describing prerequisite feature flags rules.","description_kind":"plain","computed":true},"rules":{"type":["list",["object",{"bucket_by":"string","clauses":["list",["object",{"attribute":"string","context_kind":"string","negate":"bool","op":"string","value_type":"string","values":["list","string"]}]],"context_kind":"string","description":"string","rollout_weights":["list","number"],"variation":"number"}]],"description":"List of logical targeting rules.","description_kind":"plain","computed":true},"targets":{"type":["set",["object",{"values":["list","string"],"variation":"number"}]],"description":"Set of nested blocks describing the individual user targets for each variation.","description_kind":"plain","computed":true},"track_events":{"type":"bool","description":"Whether to send event data back to LaunchDarkly. Defaults to `false` if not set.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly environment-specific feature flag data source.\n\nThis data source allows you to retrieve environment-specific feature flag information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_flag_trigger":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","description":"Whether the trigger is currently active or not.","description_kind":"plain","computed":true},"env_key":{"type":"string","description":"The unique key of the environment the flag trigger will work in.","description_kind":"plain","required":true},"flag_key":{"type":"string","description":"The unique key of the associated flag.","description_kind":"plain","required":true},"id":{"type":"string","description":"The Terraform trigger ID. The unique trigger ID can be found in your saved trigger URL:\n\n```\nhttps://app.launchdarkly.com/webhook/triggers/THIS_IS_YOUR_TRIGGER_ID/aff25a53-17d9-4112-a9b8-12718d1a2e79\n```\n\nPlease note that if you did not save this upon creation of the resource, you will have to reset it to get a new value, which can cause breaking changes.","description_kind":"plain","required":true},"instructions":{"type":["list",["object",{"kind":"string"}]],"description":"Instructions containing the action to perform when invoking the trigger. Currently supported flag actions are `turnFlagOn` and `turnFlagOff`. This must be passed as the key-value pair `{ kind = \"\u003cflag_action\u003e\" }`.","description_kind":"plain","computed":true},"integration_key":{"type":"string","description":"The unique identifier of the integration you intend to set your trigger up with. Currently supported are `generic-trigger`, `datadog`, `dynatrace`, `dynatrace-cloud-automation`, `honeycomb`, `new-relic-apm`, and `signalfx`. `generic-trigger` should be used for integrations not explicitly supported.","description_kind":"plain","computed":true},"maintainer_id":{"type":"string","description":"The ID of the member responsible for maintaining the flag trigger. If created via Terraform, this value will be the ID of the member associated with the API key used for your provider configuration.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The unique key of the project encompassing the associated flag.","description_kind":"plain","required":true},"trigger_url":{"type":"string","description":"The unique URL used to invoke the trigger.","description_kind":"plain","computed":true,"sensitive":true}},"description":"Provides a LaunchDarkly flag trigger data source.\n\n-\u003e **Note:** Flag triggers are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis data source allows you to retrieve information about flag triggers from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_metric":{"version":0,"block":{"attributes":{"analysis_type":{"type":"string","description":"The method for analyzing metric events. Available choices are `mean` and `percentile`.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The description of the metric's purpose.","description_kind":"plain","computed":true},"event_key":{"type":"string","description":"The event key for your metric (if custom metric)","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_units_without_events":{"type":"bool","description":"Include units that did not send any events and set their value to 0.","description_kind":"plain","computed":true},"is_active":{"type":"bool","description":"Ignored. All metrics are considered active.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"is_numeric":{"type":"bool","description":"Whether a `custom` metric is a numeric metric or not.","description_kind":"plain","computed":true},"key":{"type":"string","description":"The unique key that references the metric. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"kind":{"type":"string","description":"The metric type. Available choices are `click`, `custom`, and `pageview`.","description_kind":"plain","computed":true},"maintainer_id":{"type":"string","description":"The LaunchDarkly member ID of the member who will maintain the metric. If not set, the API will automatically apply the member associated with your Terraform API key or the most recently-set maintainer","description_kind":"plain","computed":true},"name":{"type":"string","description":"The human-friendly name for the metric.","description_kind":"plain","computed":true},"percentile_value":{"type":"number","description":"The percentile for the analysis method. An integer denoting the target percentile between 0 and 100. Required when analysis_type is percentile.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The metrics's project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"randomization_units":{"type":["set","string"],"description":"A set of one or more context kinds that this metric can measure events from. Metrics can only use context kinds marked as \"Available for experiments.\" For more information, read [Allocating experiment audiences](https://docs.launchdarkly.com/home/creating-experiments/allocation).","description_kind":"plain","computed":true},"selector":{"type":"string","description":"The CSS selector for your metric (if click metric)","description_kind":"plain","computed":true},"success_criteria":{"type":"string","description":"The success criteria for your metric (if numeric metric). Available choices are `HigherThanBaseline` and `LowerThanBaseline`.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"unit":{"type":"string","description":"(Required for kind `custom`) The unit for numeric `custom` metrics.","description_kind":"plain","computed":true},"unit_aggregation_type":{"type":"string","description":"The method by which multiple unit event values are aggregated. Available choices are `average` and `sum`.","description_kind":"plain","computed":true},"urls":{"type":["list",["object",{"kind":"string","pattern":"string","substring":"string","url":"string"}]],"description":"List of nested `url` blocks describing URLs that you want to associate with the metric.","description_kind":"plain","computed":true},"version":{"type":"number","description":"Version of the metric","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly metric data source.\n\nThis data source allows you to retrieve metric information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_project":{"version":0,"block":{"attributes":{"client_side_availability":{"type":["list",["object",{"using_environment_id":"bool","using_mobile_key":"bool"}]],"description":"A map describing which client-side SDKs can use new flags by default. Please migrate to `default_client_side_availability` to maintain future compatibility.","description_kind":"plain","deprecated":true,"computed":true},"default_client_side_availability":{"type":["list",["object",{"using_environment_id":"bool","using_mobile_key":"bool"}]],"description":"A block describing which client-side SDKs can use new flags by default.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The project's unique key.","description_kind":"plain","required":true},"name":{"type":"string","description":"The project's name.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly project data source.\n\nThis data source allows you to retrieve project information from your LaunchDarkly organization.\n\n-\u003e **Note:** LaunchDarkly data sources do not provide access to the project's environments. If you wish to import environment configurations as data sources you must use the [`launchdarkly_environment` data source](/docs/providers/launchdarkly/d/environment.html).","description_kind":"plain"}},"launchdarkly_relay_proxy_configuration":{"version":0,"block":{"attributes":{"display_key":{"type":"string","description":"The last 4 characters of the Relay Proxy configuration's unique key.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Relay Proxy configuration's unique 24 character ID. The unique relay proxy ID can be found in the relay proxy edit page URL, which you can locate by clicking the three dot menu on your relay proxy item in the UI and selecting \"Edit configuration\":\n\n```\nhttps://app.launchdarkly.com/settings/relay/THIS_IS_YOUR_RELAY_PROXY_ID/edit\n```","description_kind":"plain","required":true},"name":{"type":"string","description":"The human-readable name for your Relay Proxy configuration.","description_kind":"plain","computed":true},"policy":{"type":["list",["object",{"actions":["list","string"],"effect":"string","not_actions":["list","string"],"not_resources":["list","string"],"resources":["list","string"]}]],"description":"The Relay Proxy configuration's rule policy block. This determines what content the Relay Proxy receives. To learn more, read [Understanding policies](https://docs.launchdarkly.com/home/members/role-policies#understanding-policies).","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly Relay Proxy configuration data source for use with the Relay Proxy's [automatic configuration feature](https://docs.launchdarkly.com/home/relay-proxy/automatic-configuration).\n\n-\u003e **Note:** Relay Proxy automatic configuration is available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis data source allows you to retrieve Relay Proxy configuration information from your LaunchDarkly organization.\n\n-\u003e **Note:** It is not possible for this data source to retrieve your Relay Proxy configuration's unique key. This is because the unique key is only exposed upon creation. If you need to reference the Relay Proxy configuration's unique key in your terraform config, use the `launchdarkly_relay_proxy_configuration` resource instead.","description_kind":"plain"}},"launchdarkly_segment":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"The segment's creation date represented as a UNIX epoch timestamp.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The description of the segment's purpose.","description_kind":"plain","computed":true},"env_key":{"type":"string","description":"The segment's environment key.","description_kind":"plain","required":true},"excluded":{"type":["list","string"],"description":"List of user keys excluded from the segment. To target on other context kinds, use the excluded_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"excluded_contexts":{"type":["list",["object",{"context_kind":"string","values":["list","string"]}]],"description":"List of non-user target objects excluded from the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"included":{"type":["list","string"],"description":"List of user keys included in the segment. To target on other context kinds, use the included_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"included_contexts":{"type":["list",["object",{"context_kind":"string","values":["list","string"]}]],"description":"List of non-user target objects included in the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"key":{"type":"string","description":"The unique key that references the segment.","description_kind":"plain","required":true},"name":{"type":"string","description":"The human-friendly name for the segment.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The segment's project key.","description_kind":"plain","required":true},"rules":{"type":["list",["object",{"bucket_by":"string","clauses":["list",["object",{"attribute":"string","context_kind":"string","negate":"bool","op":"string","value_type":"string","values":["list","string"]}]],"rollout_context_kind":"string","weight":"number"}]],"description":"List of nested custom rule blocks to apply to the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"unbounded":{"type":"bool","description":"Whether to create a standard segment (`false`) or a Big Segment (`true`). Standard segments include rule-based and smaller list-based segments. Big Segments include larger list-based segments and synced segments. Only use a Big Segment if you need to add more than 15,000 individual targets. It is not possible to manage the list of targeted contexts for Big Segments with Terraform.","description_kind":"plain","computed":true},"unbounded_context_kind":{"type":"string","description":"For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly segment data source.\n\nThis data source allows you to retrieve segment information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_team":{"version":0,"block":{"attributes":{"custom_role_keys":{"type":["set","string"],"description":"The list of the keys of the custom roles that you have assigned to the team.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The team description.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The team key.","description_kind":"plain","required":true},"maintainers":{"type":["set",["object",{"email":"string","first_name":"string","id":"string","last_name":"string","role":"string"}]],"description":"The list of team maintainers as [team member objects](/providers/launchdarkly/launchdarkly/latest/docs/data-sources/team_member).","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-readable name for the team.","description_kind":"plain","computed":true},"project_keys":{"type":["set","string"],"description":"The list of keys of the projects that the team has any write access to.","description_kind":"plain","computed":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team data source.\n\nThis data source allows you to retrieve team information from your LaunchDarkly organization.\n\n-\u003e **Note:** Teams are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).","description_kind":"plain"}},"launchdarkly_team_member":{"version":0,"block":{"attributes":{"custom_roles":{"type":["set","string"],"description":"The list of custom roles keys associated with the team member. Custom roles are only available to customers on an Enterprise plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).","description_kind":"plain","computed":true},"email":{"type":"string","description":"The unique email address associated with the team member.","description_kind":"plain","required":true},"first_name":{"type":"string","description":"The team member's given name.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The 24 character alphanumeric ID of the team member.","description_kind":"plain","computed":true},"last_name":{"type":"string","description":"The team member's family name.","description_kind":"plain","computed":true},"role":{"type":"string","description":"The role associated with team member. Possible roles are `owner`, `reader`, `writer`, or `admin`.","description_kind":"plain","computed":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team member data source.\n\nThis data source allows you to retrieve team member information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_team_members":{"version":0,"block":{"attributes":{"emails":{"type":["list","string"],"description":"An array of unique email addresses associated with the team members.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ignore_missing":{"type":"bool","description":"A boolean to determine whether to ignore members that weren't found.","description_kind":"plain","optional":true},"team_members":{"type":["list",["object",{"custom_roles":["set","string"],"email":"string","first_name":"string","id":"string","last_name":"string","role":"string","role_attributes":["set",["object",{"key":"string","values":["list","string"]}]]}]],"description":"The members that were found. The following attributes are available for each member:\n\n- `id` - The 24 character alphanumeric ID of the team member.\n\n- `first_name` - The team member's given name.\n\n- `last_name` - The team member's family name.\n\n- `role` - The role associated with team member. Possible roles are `owner`, `reader`, `writer`, or `admin`.\n\n- `custom_roles` - (Optional) The list of custom roles keys associated with the team member. Custom roles are only available to customers on an Enterprise plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly team members data source.\n\nThis data source allows you to retrieve team member information from your LaunchDarkly organization on multiple team members.","description_kind":"plain"}},"launchdarkly_webhook":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The unique webhook ID.","description_kind":"plain","required":true},"name":{"type":"string","description":"The webhook's human-readable name.","description_kind":"plain","computed":true},"on":{"type":"bool","description":"Whether the webhook is enabled.","description_kind":"plain","computed":true},"secret":{"type":"string","description":"The secret used to sign the webhook.","description_kind":"plain","computed":true,"sensitive":true},"statements":{"type":["list",["object",{"actions":["list","string"],"effect":"string","not_actions":["list","string"],"not_resources":["list","string"],"resources":["list","string"]}]],"description":"List of policy statement blocks used to filter webhook events. For more information on webhook policy filters read [Adding a policy filter](https://docs.launchdarkly.com/integrations/webhooks#adding-a-policy-filter).","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"url":{"type":"string","description":"The URL of the remote webhook.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly webhook data source.\n\nThis data source allows you to retrieve webhook information from your LaunchDarkly organization.","description_kind":"plain"}}}}}} +{"format_version":"1.0","provider_schemas":{"registry.terraform.io/launchdarkly/launchdarkly":{"provider":{"version":0,"block":{"attributes":{"access_token":{"type":"string","description":"The [personal access token](https://docs.launchdarkly.com/home/account-security/api-access-tokens#personal-tokens) or [service token](https://docs.launchdarkly.com/home/account-security/api-access-tokens#service-tokens) used to authenticate with LaunchDarkly. You can also set this with the `LAUNCHDARKLY_ACCESS_TOKEN` environment variable. You must provide either `access_token` or `oauth_token`.","description_kind":"plain","optional":true},"api_host":{"type":"string","description":"The LaunchDarkly host address. If this argument is not specified, the default host address is `https://app.launchdarkly.com`","description_kind":"plain","optional":true},"http_timeout":{"type":"number","description":"The HTTP timeout (in seconds) when making API calls to LaunchDarkly. Defaults to 20 seconds.","description_kind":"plain","optional":true},"oauth_token":{"type":"string","description":"An OAuth V2 token you use to authenticate with LaunchDarkly. You can also set this with the `LAUNCHDARKLY_OAUTH_TOKEN` environment variable. You must provide either `access_token` or `oauth_token`.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"launchdarkly_access_token":{"version":0,"block":{"attributes":{"custom_roles":{"type":["set","string"],"description":"A list of custom role IDs to use as access limits for the access token.","description_kind":"plain","optional":true},"default_api_version":{"type":"number","description":"The default API version for this token. Defaults to the latest API version. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true,"computed":true},"expire":{"type":"number","description":"An expiration time for the current token secret, expressed as a Unix epoch time. Replace the computed token secret with a new value. The expired secret will no longer be able to authorize usage of the LaunchDarkly API. This field argument is **deprecated**. Please update your config to remove `expire` to maintain compatibility with future versions","description_kind":"plain","deprecated":true,"optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"A human-friendly name for the access token.","description_kind":"plain","optional":true},"role":{"type":"string","description":"A built-in LaunchDarkly role. Can be `reader`, `writer`, or `admin`","description_kind":"plain","optional":true},"service_token":{"type":"bool","description":"Whether the token will be a [service token](https://docs.launchdarkly.com/home/account-security/api-access-tokens#service-tokens). A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"token":{"type":"string","description":"The access token used to authorize usage of the LaunchDarkly API.","description_kind":"plain","computed":true,"sensitive":true}},"block_types":{"inline_roles":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"Define inline custom roles. An array of statements represented as config blocks with three attributes: effect, resources, actions. May be used in place of a built-in or custom role. [Using polices](https://docs.launchdarkly.com/home/members/role-policies). May be specified more than once.","description_kind":"plain"}},"policy_statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"Define inline custom roles. An array of statements represented as config blocks with three attributes: effect, resources, actions. May be used in place of a built-in or custom role. May be specified more than once. This field argument is **deprecated**. Update your config to use `inline_role` to maintain compatibility with future versions.","description_kind":"plain","deprecated":true}}},"description":"Provides a LaunchDarkly access token resource.\n\nThis resource allows you to create and manage access tokens within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource will store the full plaintext secret for your access token in Terraform state. Be sure your state is configured securely before using this resource. See https://www.terraform.io/docs/state/sensitive-data.html for more details.\n\nThe resource must contain either a \"role\", \"custom_role\" or an \"inline_roles\" (previously \"policy_statements\") block. As of v1.7.0, \"policy_statements\" has been deprecated in favor of \"inline_roles\".","description_kind":"plain"}},"launchdarkly_ai_config":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"A timestamp of when the AI Config was created.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The AI Config's description.","description_kind":"plain","optional":true},"evaluation_metric_key":{"type":"string","description":"The key of the evaluation metric associated with this AI Config.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_inverted":{"type":"bool","description":"Whether the evaluation metric is inverted.","description_kind":"plain","optional":true},"key":{"type":"string","description":"The AI Config's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The member ID of the maintainer for this AI Config. Conflicts with `maintainer_team_key`.","description_kind":"plain","optional":true,"computed":true},"maintainer_team_key":{"type":"string","description":"The team key of the maintainer team for this AI Config. Conflicts with `maintainer_id`.","description_kind":"plain","optional":true,"computed":true},"mode":{"type":"string","description":"The AI Config's mode. Must be `completion`, `agent`, or `judge`. Defaults to `completion`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The AI Config's human-readable name.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"variations":{"type":["list",["object",{"key":"string","name":"string","variation_id":"string"}]],"description":"A list of variation summaries for this AI Config.","description_kind":"plain","computed":true},"version":{"type":"number","description":"The version of the AI Config.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly AI Config resource.\n\nThis resource allows you to create and manage AI Configurations within your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_ai_config_variation":{"version":0,"block":{"attributes":{"config_key":{"type":"string","description":"The AI Config key that this variation belongs to. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"creation_date":{"type":"number","description":"The creation timestamp of the variation.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The variation's description (used in agent mode).","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instructions":{"type":"string","description":"The variation's instructions (used in agent mode).","description_kind":"plain","optional":true},"key":{"type":"string","description":"The variation's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"model":{"type":"string","description":"A JSON string representing the inline model configuration for the variation. Conflicts with `model_config_key`.","description_kind":"plain","optional":true},"model_config_key":{"type":"string","description":"The key of a model config resource to use for this variation. Conflicts with `model`.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The variation's human-readable name.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"state":{"type":"string","description":"The state of the variation. Must be `archived` or `published`.","description_kind":"plain","optional":true,"computed":true},"tool_keys":{"type":["set","string"],"description":"A set of AI tool keys to associate with this variation. **Note:** The API does not currently return tool associations on read, so Terraform cannot detect drift for this field. Changes made outside of Terraform will not be reflected in state.","description_kind":"plain","optional":true},"variation_id":{"type":"string","description":"The internal ID of the variation.","description_kind":"plain","computed":true},"version":{"type":"number","description":"The version number of the variation.","description_kind":"plain","computed":true}},"block_types":{"messages":{"nesting_mode":"list","block":{"attributes":{"content":{"type":"string","description":"The content of the message.","description_kind":"plain","required":true},"role":{"type":"string","description":"The role of the message. Must be one of `system`, `user`, `assistant`, or `developer`.","description_kind":"plain","required":true}},"description":"A list of messages for completion mode. Each message has a `role` and `content`.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly AI Config variation resource.\n\nThis resource allows you to create and manage AI Config variations within your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_ai_tool":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"The creation timestamp of the AI tool.","description_kind":"plain","computed":true},"custom_parameters":{"type":"string","description":"A JSON string representing custom application-level metadata for the AI tool.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The AI tool's description.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The AI tool's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The member ID of the maintainer for this AI tool. Conflicts with `maintainer_team_key`.","description_kind":"plain","optional":true,"computed":true},"maintainer_team_key":{"type":"string","description":"The team key of the maintainer team for this AI tool. Conflicts with `maintainer_id`.","description_kind":"plain","optional":true,"computed":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"schema_json":{"type":"string","description":"A JSON string representing the JSON Schema for the tool's parameters.","description_kind":"plain","required":true},"version":{"type":"number","description":"The version of the AI tool.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly AI tool resource.\n\nThis resource allows you to create and manage AI tools within your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_audit_log_subscription":{"version":0,"block":{"attributes":{"config":{"type":["map","string"],"description":"The set of configuration fields corresponding to the value defined for `integration_key`. Refer to the `formVariables` field in the corresponding `integrations/\u003cintegration_key\u003e/manifest.json` file in [this repo](https://github.com/launchdarkly/integration-framework/tree/master/integrations) for a full list of fields for the integration you wish to configure. **IMPORTANT**: Please note that Terraform will only accept these in snake case, regardless of the case shown in the manifest.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_key":{"type":"string","description":"The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"A human-friendly name for your audit log subscription viewable from within the LaunchDarkly Integrations page.","description_kind":"plain","required":true},"on":{"type":"bool","description":"Whether or not you want your subscription enabled, i.e. to actively send events.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"A block representing the resources to which you wish to subscribe.","description_kind":"plain"},"min_items":1}},"description":"Provides a LaunchDarkly audit log subscription resource.\n\nThis resource allows you to create and manage LaunchDarkly audit log subscriptions.","description_kind":"plain"}},"launchdarkly_custom_role":{"version":0,"block":{"attributes":{"base_permissions":{"type":"string","description":"The base permission level - either `reader` or `no_access`. While newer API versions default to `no_access`, this field defaults to `reader` in keeping with previous API versions.","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the custom role.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"A unique key that will be used to reference the custom role in your code. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"A name for the custom role. This must be unique within your organization.","description_kind":"plain","required":true}},"block_types":{"policy":{"nesting_mode":"set","block":{"attributes":{"actions":{"type":["list","string"],"description_kind":"plain","required":true},"effect":{"type":"string","description_kind":"plain","required":true},"resources":{"type":["list","string"],"description_kind":"plain","required":true}},"description_kind":"plain","deprecated":true}},"policy_statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"An array of the policy statements that define the permissions for the custom role. This field accepts [role attributes](https://docs.launchdarkly.com/home/getting-started/vocabulary#role-attribute). To use role attributes, use the syntax `$${roleAttribute/\u003cYOUR_ROLE_ATTRIBUTE\u003e}` in lieu of your usual resource keys.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly custom role resource.\n\n-\u003e **Note:** Custom roles are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis resource allows you to create and manage custom roles within your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_destination":{"version":0,"block":{"attributes":{"config":{"type":["map","string"],"description":"The destination-specific configuration. To learn more, read [Destination-Specific Configs](#destination-specific-configs)","description_kind":"plain","required":true},"env_key":{"type":"string","description":"The environment key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"kind":{"type":"string","description":"The data export destination type. Available choices are `kinesis`, `google-pubsub`, `mparticle`, `azure-event-hubs`, and `segment`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"A human-readable name for your data export destination.","description_kind":"plain","required":true},"on":{"type":"bool","description":"Whether the data export destination is on or not.","description_kind":"plain","optional":true},"project_key":{"type":"string","description":"The LaunchDarkly project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"description":"Provides a LaunchDarkly Data Export Destination resource.\n\n-\u003e **Note:** Data Export is available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nData Export Destinations are locations that receive exported data. This resource allows you to configure destinations for the export of raw analytics data, including feature flag requests, analytics events, custom events, and more.\n\nTo learn more about data export, read [Data Export Documentation](https://docs.launchdarkly.com/integrations/data-export).","description_kind":"plain"}},"launchdarkly_environment":{"version":0,"block":{"attributes":{"api_key":{"type":"string","description":"The environment's SDK key.","description_kind":"plain","computed":true,"sensitive":true},"client_side_id":{"type":"string","description":"The environment's client-side ID.","description_kind":"plain","computed":true,"sensitive":true},"color":{"type":"string","description":"The color swatch as an RGB hex value with no leading `#`. For example: `000000`","description_kind":"plain","required":true},"confirm_changes":{"type":"bool","description":"Set to `true` if this environment requires confirmation for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"critical":{"type":"bool","description":"Denotes whether the environment is critical.","description_kind":"plain","optional":true},"default_track_events":{"type":"bool","description":"Set to `true` to enable data export for every flag created in this environment after you configure this argument. This field will default to `false` when not set. To learn more, read [Data Export](https://docs.launchdarkly.com/home/data-export).","description_kind":"plain","optional":true},"default_ttl":{"type":"number","description":"The TTL for the environment. This must be between 0 and 60 minutes. The TTL setting only applies to environments using the PHP SDK. This field will default to `0` when not set. To learn more, read [TTL settings](https://docs.launchdarkly.com/home/organize/environments#ttl-settings).","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The project-unique key for the environment. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"mobile_key":{"type":"string","description":"The environment's mobile key.","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description":"The name of the environment.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The LaunchDarkly project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"require_comments":{"type":"bool","description":"Set to `true` if this environment requires comments for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"secure_mode":{"type":"bool","description":"Set to `true` to ensure a user of the client-side SDK cannot impersonate another user. This field will default to `false` when not set.","description_kind":"plain","optional":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"approval_settings":{"nesting_mode":"list","block":{"attributes":{"auto_apply_approved_changes":{"type":"bool","description":"Automatically apply changes that have been approved by all reviewers. This field is only applicable for approval service kinds other than `launchdarkly`.","description_kind":"plain","optional":true},"can_apply_declined_changes":{"type":"bool","description":"Set to `true` if changes can be applied as long as the `min_num_approvals` is met, regardless of whether any reviewers have declined a request. Defaults to `true`.","description_kind":"plain","optional":true},"can_review_own_request":{"type":"bool","description":"Set to `true` if requesters can approve or decline their own request. They may always comment. Defaults to `false`.","description_kind":"plain","optional":true},"min_num_approvals":{"type":"number","description":"The number of approvals required before an approval request can be applied. This number must be between 1 and 5. Defaults to 1.","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Set to `true` for changes to flags in this environment to require approval. You may only set `required` to true if `required_approval_tags` is not set and vice versa. Defaults to `false`.","description_kind":"plain","optional":true},"required_approval_tags":{"type":["list","string"],"description":"An array of tags used to specify which flags with those tags require approval. You may only set `required_approval_tags` if `required` is set to `false` and vice versa.","description_kind":"plain","optional":true},"service_config":{"type":["map","string"],"description":"The configuration for the service associated with this approval. This is specific to each approval service. For a `service_kind` of `servicenow`, the following fields apply:\n\n\t - `template` (String) The sys_id of the Standard Change Request Template in ServiceNow that LaunchDarkly will use when creating the change request.\n\t - `detail_column` (String) The name of the ServiceNow Change Request column LaunchDarkly uses to populate detailed approval request information. This is most commonly \"justification\".","description_kind":"plain","optional":true},"service_kind":{"type":"string","description":"The kind of service associated with this approval. This determines which platform is used for requesting approval. Valid values are `servicenow`, `launchdarkly`. If you use a value other than `launchdarkly`, you must have already configured the integration in the LaunchDarkly UI or your apply will fail.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Provides a LaunchDarkly environment resource.\n\nThis resource allows you to create and manage environments in your LaunchDarkly organization. This resource should _not_ be used if the encapsulated project is also managed via Terraform. In this case, you should _always_ use the nested environments config blocks on your `launchdarkly_project` resource to manage your environments.\n\n-\u003e **Note:** Mixing the use of nested `environments` blocks in the [`launchdarkly_project`] resource and `launchdarkly_environment` resources is not recommended.","description_kind":"plain"}},"launchdarkly_feature_flag":{"version":0,"block":{"attributes":{"archived":{"type":"bool","description":"Specifies whether the flag is archived or not. Note that you cannot create a new flag that is archived, but can update a flag to be archived.","description_kind":"plain","optional":true},"deprecated":{"type":"bool","description":"Specifies whether the flag is deprecated or not. Note that you cannot create a new flag that is deprecated, but can update a flag to be deprecated.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The feature flag's description.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_in_snippet":{"type":"bool","description":"Specifies whether this flag should be made available to the client-side JavaScript SDK using the client-side Id. This value gets its default from your project configuration if not set. `include_in_snippet` is now deprecated. Please migrate to `client_side_availability.using_environment_id` to maintain future compatibility.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"key":{"type":"string","description":"The unique feature flag key that references the flag in your application code. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The feature flag maintainer's 24 character alphanumeric team member ID. `maintainer_team_key` cannot be set if `maintainer_id` is set. If neither is set, it will automatically be or stay set to the member ID associated with the API key used by your LaunchDarkly Terraform provider or the most recently-set maintainer.","description_kind":"plain","optional":true,"computed":true},"maintainer_team_key":{"type":"string","description":"The key of the associated team that maintains this feature flag. `maintainer_id` cannot be set if `maintainer_team_key` is set","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The human-readable name of the feature flag.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The feature flag's project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"temporary":{"type":"bool","description":"Specifies whether the flag is a temporary flag.","description_kind":"plain","optional":true},"variation_type":{"type":"string","description":"The feature flag's variation type: `boolean`, `string`, `number` or `json`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"view_keys":{"type":["set","string"],"description":"A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. The field is also computed, meaning Terraform will read back the current view associations from LaunchDarkly to detect drift. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the configured `view_keys`. Choose one approach per resource.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"client_side_availability":{"nesting_mode":"list","block":{"attributes":{"using_environment_id":{"type":"bool","description":"Whether this flag is available to SDKs using the client-side ID.","description_kind":"plain","optional":true,"computed":true},"using_mobile_key":{"type":"bool","description":"Whether this flag is available to SDKs using a mobile key.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"custom_properties":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The unique custom property key.","description_kind":"plain","required":true},"name":{"type":"string","description":"The name of the custom property.","description_kind":"plain","required":true},"value":{"type":["list","string"],"description":"The list of custom property value strings.","description_kind":"plain","required":true}},"description":"List of nested blocks describing the feature flag's [custom properties](https://docs.launchdarkly.com/home/connecting/custom-properties)","description_kind":"plain"},"max_items":64},"defaults":{"nesting_mode":"list","block":{"attributes":{"off_variation":{"type":"number","description":"The index of the variation the flag will default to in all new environments when off.","description_kind":"plain","required":true},"on_variation":{"type":"number","description":"The index of the variation the flag will default to in all new environments when on.","description_kind":"plain","required":true}},"description":"A block containing the indices of the variations to be used as the default on and off variations in all new environments. Flag configurations in existing environments will not be changed nor updated if the configuration block is removed.","description_kind":"plain"},"max_items":1},"variations":{"nesting_mode":"list","block":{"attributes":{"description":{"type":"string","description":"The variation's description.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The name of the variation.","description_kind":"plain","optional":true},"value":{"type":"string","description":"The variation value. The value's type must correspond to the `variation_type` argument. For example: `variation_type = \"boolean\"` accepts only `true` or `false`. The `number` variation type accepts both floats and ints, but please note that any trailing zeroes on floats will be trimmed (i.e. `1.1` and `1.100` will both be converted to `1.1`).\n\nIf you wish to define an empty string variation, you must still define the value field on the variations block like so:\n\n```terraform\nvariations {\n value = \"\"\n}\n```\n\n-\u003e **Note:** Terraform manages `variations` as an ordered array and identifies them by index. This means that if you change the order of your `variations` block, you may end up destroying and recreating those variations. Additionally, if you delete variations that have targets that have been attached outside of Terraform, those targets may be incorrectly reassigned to a different variation.","description_kind":"plain","required":true}},"description":"An array of possible variations for the flag","description_kind":"plain"}}},"description":"Provides a LaunchDarkly feature flag resource.\n\nThis resource allows you to create and manage feature flags within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource is for global-level feature flag configuration. Unexpected behavior may result if your environment-level configurations are not also managed from Terraform.","description_kind":"plain"}},"launchdarkly_feature_flag_environment":{"version":0,"block":{"attributes":{"env_key":{"type":"string","description":"The environment key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"flag_id":{"type":"string","description":"The feature flag's unique `id` in the format `project_key/flag_key`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"off_variation":{"type":"number","description":"The index of the variation to serve if targeting is disabled.","description_kind":"plain","required":true},"on":{"type":"bool","description":"Whether targeting is enabled. Defaults to `false` if not set.","description_kind":"plain","optional":true},"track_events":{"type":"bool","description":"Whether to send event data back to LaunchDarkly. Defaults to `false` if not set.","description_kind":"plain","optional":true}},"block_types":{"context_targets":{"nesting_mode":"set","block":{"attributes":{"context_kind":{"type":"string","description":"The context kind on which the flag should target in this environment. User (`user`) targets should be specified as `targets` attribute blocks.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"List of `user` strings to target.","description_kind":"plain","required":true},"variation":{"type":"number","description":"The index of the variation to serve if a user target value is matched.","description_kind":"plain","required":true}},"description":"The set of nested blocks describing the individual targets for non-user context kinds for each variation.","description_kind":"plain"}},"fallthrough":{"nesting_mode":"list","block":{"attributes":{"bucket_by":{"type":"string","description":"Group percentage rollout by a custom attribute. This argument is only valid if rollout_weights is also specified.","description_kind":"plain","optional":true},"context_kind":{"type":"string","description":"The context kind associated with the specified rollout. This argument is only valid if rollout_weights is also specified. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"rollout_weights":{"type":["list","number"],"description":"List of integer percentage rollout weights (in thousandths of a percent) to apply to each variation if the rule clauses evaluates to `true`. The sum of the `rollout_weights` must equal 100000 and the number of rollout weights specified in the array must match the number of flag variations. You must specify either `variation` or `rollout_weights`.","description_kind":"plain","optional":true},"variation":{"type":"number","description":"The default integer variation index to serve if no `prerequisites`, `target`, or `rules` apply. You must specify either `variation` or `rollout_weights`.","description_kind":"plain","optional":true}},"description":"Nested block describing the default variation to serve if no `prerequisites`, `target`, or `rules` apply.","description_kind":"plain"},"min_items":1,"max_items":1},"prerequisites":{"nesting_mode":"list","block":{"attributes":{"flag_key":{"type":"string","description":"The prerequisite feature flag's `key`.","description_kind":"plain","required":true},"variation":{"type":"number","description":"The index of the prerequisite feature flag's variation to target.","description_kind":"plain","required":true}},"description":"List of nested blocks describing prerequisite feature flags rules.","description_kind":"plain"}},"rules":{"nesting_mode":"list","block":{"attributes":{"bucket_by":{"type":"string","description":"Group percentage rollout by a custom attribute. This argument is only valid if `rollout_weights` is also specified.","description_kind":"plain","optional":true},"context_kind":{"type":"string","description":"The context kind associated with the specified rollout. This argument is only valid if `rollout_weights` is also specified. Defaults to `user` if omitted.","description_kind":"plain","optional":true},"description":{"type":"string","description":"A human-readable description of the targeting rule.","description_kind":"plain","optional":true},"rollout_weights":{"type":["list","number"],"description":"List of integer percentage rollout weights (in thousandths of a percent) to apply to each variation if the rule clauses evaluates to `true`. The sum of the `rollout_weights` must equal 100000 and the number of rollout weights specified in the array must match the number of flag variations. You must specify either `variation` or `rollout_weights`.","description_kind":"plain","optional":true},"variation":{"type":"number","description":"The integer variation index to serve if the rule clauses evaluate to `true`. You must specify either `variation` or `rollout_weights`","description_kind":"plain","optional":true}},"block_types":{"clauses":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The user attribute to operate on","description_kind":"plain","required":true},"context_kind":{"type":"string","description":"The context kind associated with this rule clause. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"negate":{"type":"bool","description":"Whether to negate the rule clause.","description_kind":"plain","optional":true},"op":{"type":"string","description":"The operator associated with the rule clause. Available options are `in`, `endsWith`, `startsWith`, `matches`, `contains`, `lessThan`, `lessThanOrEqual`, `greaterThanOrEqual`, `before`, `after`, `segmentMatch`, `semVerEqual`, `semVerLessThan`, and `semVerGreaterThan`. Read LaunchDarkly's [Operators](https://docs.launchdarkly.com/sdk/concepts/flag-evaluation-rules#operators) documentation for more information.","description_kind":"plain","required":true},"value_type":{"type":"string","description":"The type for each of the clause's values. Available types are `boolean`, `string`, and `number`. If omitted, `value_type` defaults to `string`.","description_kind":"plain","optional":true},"values":{"type":["list","string"],"description":"The list of values associated with the rule clause.","description_kind":"plain","required":true}},"description":"List of nested blocks specifying the logical clauses to evaluate","description_kind":"plain"}}},"description":"List of logical targeting rules.","description_kind":"plain"}},"targets":{"nesting_mode":"set","block":{"attributes":{"values":{"type":["list","string"],"description":"List of `user` strings to target.","description_kind":"plain","required":true},"variation":{"type":"number","description":"The index of the variation to serve if a user target value is matched.","description_kind":"plain","required":true}},"description":"Set of nested blocks describing the individual user targets for each variation.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly environment-specific feature flag resource.\n\nThis resource allows you to create and manage environment-specific feature flags attributes within your LaunchDarkly organization.\n\n-\u003e **Note:** If you intend to attach a feature flag to any experiments, we do _not_ recommend configuring environment-specific flag settings using Terraform. Subsequent applies may overwrite the changes made by experiments and break your experiment. An alternate workaround is to use the [lifecycle.ignore_changes](https://developer.hashicorp.com/terraform/language/meta-arguments/lifecycle#ignore_changes) Terraform meta-argument on the `fallthrough` field to prevent potential overwrites.","description_kind":"plain"}},"launchdarkly_flag_templates":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"temporary":{"type":"bool","description":"Whether new flags should be temporary by default.","description_kind":"plain","optional":true}},"block_types":{"boolean_defaults":{"nesting_mode":"list","block":{"attributes":{"false_description":{"type":"string","description":"The description for the false variation.","description_kind":"plain","required":true},"false_display_name":{"type":"string","description":"The display name for the false variation.","description_kind":"plain","required":true},"off_variation":{"type":"number","description":"The variation index of the boolean flag variation to serve when the flag's targeting is off.","description_kind":"plain","required":true},"on_variation":{"type":"number","description":"The variation index of the boolean flag variation to serve when the flag's targeting is on.","description_kind":"plain","required":true},"true_description":{"type":"string","description":"The description for the true variation.","description_kind":"plain","required":true},"true_display_name":{"type":"string","description":"The display name for the true variation.","description_kind":"plain","required":true}},"description":"A block describing the default boolean flag variation settings.","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Provides a LaunchDarkly flag templates resource.\n\nThis resource allows you to manage the \"Custom\" flag template settings applied to new feature flags created within a LaunchDarkly project. LaunchDarkly projects include several built-in flag templates (Release, Kill switch, Experiment, Custom, Migration). This resource manages the Custom template only.\n\n-\u003e **Note:** Flag templates are a singleton per project. Destroying this resource only removes it from Terraform state. The flag templates will continue to exist in LaunchDarkly.","description_kind":"plain"}},"launchdarkly_flag_trigger":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","description":"Whether the trigger is currently active or not.","description_kind":"plain","required":true},"env_key":{"type":"string","description":"The unique key of the environment the flag trigger will work in. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"flag_key":{"type":"string","description":"The unique key of the associated flag. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_key":{"type":"string","description":"The unique identifier of the integration you intend to set your trigger up with. Currently supported are `generic-trigger`, `datadog`, `dynatrace`, `dynatrace-cloud-automation`, `honeycomb`, `new-relic-apm`, and `signalfx`. `generic-trigger` should be used for integrations not explicitly supported. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The ID of the member responsible for maintaining the flag trigger. If created via Terraform, this value will be the ID of the member associated with the API key used for your provider configuration.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The unique key of the project encompassing the associated flag. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"trigger_url":{"type":"string","description":"The unique URL used to invoke the trigger.","description_kind":"plain","computed":true,"sensitive":true}},"block_types":{"instructions":{"nesting_mode":"list","block":{"attributes":{"kind":{"type":"string","description":"The action to perform when triggering. Currently supported flag actions are `turnFlagOn` and `turnFlagOff`.","description_kind":"plain","required":true}},"description":"Instructions containing the action to perform when invoking the trigger. Currently supported flag actions are `turnFlagOn` and `turnFlagOff`. This must be passed as the key-value pair `{ kind = \"\u003cflag_action\u003e\" }`.","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Provides a LaunchDarkly flag trigger resource.\n\n-\u003e **Note:** Flag triggers are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis resource allows you to create and manage flag triggers within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource will store sensitive unique trigger URL value in plaintext in your Terraform state. Be sure your state is configured securely before using this resource. See https://www.terraform.io/docs/state/sensitive-data.html for more details.","description_kind":"plain"}},"launchdarkly_ip_allowlist_config":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"scoped_allowlist_enabled":{"type":"bool","description":"Whether the scoped (API token) IP allowlist is enabled.","description_kind":"plain","optional":true},"session_allowlist_enabled":{"type":"bool","description":"Whether the session IP allowlist is enabled.","description_kind":"plain","optional":true}},"description":"Provides a LaunchDarkly IP allowlist configuration resource.\n\n-\u003e **Note:** IP allowlists are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\n~\u003e **Beta:** This resource uses a beta API. Beta resources may change or be removed in future versions.\n\nThis resource allows you to manage the IP allowlist configuration for your LaunchDarkly account. There is only one configuration per account, so you should define only a single instance of this resource.","description_kind":"plain"}},"launchdarkly_ip_allowlist_entry":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"A human-readable description of the IP allowlist entry.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ip_address":{"type":"string","description":"The IP address or CIDR block for the allowlist entry. Changing this forces a new resource to be created.","description_kind":"plain","required":true}},"description":"Provides a LaunchDarkly IP allowlist entry resource.\n\n-\u003e **Note:** IP allowlists are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\n~\u003e **Beta:** This resource uses a beta API. Beta resources may change or be removed in future versions.\n\nThis resource allows you to create and manage IP allowlist entries within your LaunchDarkly account.","description_kind":"plain"}},"launchdarkly_metric":{"version":0,"block":{"attributes":{"analysis_type":{"type":"string","description":"The method for analyzing metric events. Available choices are `mean` and `percentile`.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The description of the metric's purpose.","description_kind":"plain","optional":true},"event_key":{"type":"string","description":"The event key for your metric (if custom metric)","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_units_without_events":{"type":"bool","description":"Include units that did not send any events and set their value to 0.","description_kind":"plain","optional":true,"computed":true},"is_active":{"type":"bool","description":"Ignored. All metrics are considered active.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"is_numeric":{"type":"bool","description":"Whether a `custom` metric is a numeric metric or not.","description_kind":"plain","optional":true},"key":{"type":"string","description":"The unique key that references the metric. A change in this field will force the destruction of the existing resource and the creation of a new one. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"kind":{"type":"string","description":"The metric type. Available choices are `click`, `custom`, and `pageview`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The LaunchDarkly member ID of the member who will maintain the metric. If not set, the API will automatically apply the member associated with your Terraform API key or the most recently-set maintainer","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The human-friendly name for the metric.","description_kind":"plain","required":true},"percentile_value":{"type":"number","description":"The percentile for the analysis method. An integer denoting the target percentile between 0 and 100. Required when analysis_type is percentile.","description_kind":"plain","optional":true},"project_key":{"type":"string","description":"The metrics's project key. A change in this field will force the destruction of the existing resource and the creation of a new one. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"randomization_units":{"type":["set","string"],"description":"A set of one or more context kinds that this metric can measure events from. Metrics can only use context kinds marked as \"Available for experiments.\" For more information, read [Allocating experiment audiences](https://docs.launchdarkly.com/home/creating-experiments/allocation).","description_kind":"plain","optional":true,"computed":true},"selector":{"type":"string","description":"The CSS selector for your metric (if click metric)","description_kind":"plain","optional":true},"success_criteria":{"type":"string","description":"The success criteria for your metric (if numeric metric). Available choices are `HigherThanBaseline` and `LowerThanBaseline`.","description_kind":"plain","optional":true,"computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"unit":{"type":"string","description":"(Required for kind `custom`) The unit for numeric `custom` metrics.","description_kind":"plain","optional":true},"unit_aggregation_type":{"type":"string","description":"The method by which multiple unit event values are aggregated. Available choices are `average` and `sum`.","description_kind":"plain","optional":true},"version":{"type":"number","description":"Version of the metric","description_kind":"plain","computed":true}},"block_types":{"urls":{"nesting_mode":"list","block":{"attributes":{"kind":{"type":"string","description":"The URL type. Available choices are `exact`, `canonical`, `substring` and `regex`.","description_kind":"plain","required":true},"pattern":{"type":"string","description":"(Required for kind `regex`) The regex pattern to match by.","description_kind":"plain","optional":true},"substring":{"type":"string","description":"(Required for kind `substring`) The URL substring to match by.","description_kind":"plain","optional":true},"url":{"type":"string","description":"(Required for kind `exact` and `canonical`) The exact or canonical URL.","description_kind":"plain","optional":true}},"description":"List of nested `url` blocks describing URLs that you want to associate with the metric.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly metric resource.\n\nThis resource allows you to create and manage metrics within your LaunchDarkly organization.\n\nTo learn more about metrics and experimentation, read [Experimentation Documentation](https://docs.launchdarkly.com/home/experimentation).","description_kind":"plain"}},"launchdarkly_model_config":{"version":0,"block":{"attributes":{"cost_per_input_token":{"type":"number","description":"The cost per input token for the model. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"cost_per_output_token":{"type":"number","description":"The cost per output token for the model. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"custom_parameters":{"type":"string","description":"A JSON string representing custom parameters for the model config. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"global":{"type":"bool","description":"Whether the model config is available globally.","description_kind":"plain","computed":true},"icon":{"type":"string","description":"The icon for the model config. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The model config's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"model_id":{"type":"string","description":"The model identifier (e.g. `gpt-4`, `claude-3`). A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"model_provider":{"type":"string","description":"The provider name for the model config (e.g. `openai`, `anthropic`). A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The model config's human-readable name. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"params":{"type":"string","description":"A JSON string representing the model parameters (e.g. `{\"temperature\": 0.7, \"maxTokens\": 4096}`). A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"version":{"type":"number","description":"The version of the model config.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly model config resource.\n\nThis resource allows you to create and manage AI model configurations within your LaunchDarkly project. Since the API does not support updates, any field change will force recreation of the resource.\n\n~\u003e **Important:** If an `launchdarkly_ai_config_variation` references this model config via `model_config_key`, use a Terraform resource reference (e.g. `launchdarkly_model_config.example.key`) so Terraform can order destruction correctly. A literal string key will cause the delete to fail because the API rejects deleting a model config that is still in use.","description_kind":"plain"}},"launchdarkly_project":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_in_snippet":{"type":"bool","description":"Whether feature flags created under the project should be available to client-side SDKs by default. Please migrate to `default_client_side_availability` to maintain future compatibility.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"key":{"type":"string","description":"The project's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"The project's name.","description_kind":"plain","required":true},"require_view_association_for_new_flags":{"type":"bool","description":"Whether new flags created in this project must be associated with at least one view.","description_kind":"plain","optional":true},"require_view_association_for_new_segments":{"type":"bool","description":"Whether new segments created in this project must be associated with at least one view.","description_kind":"plain","optional":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"default_client_side_availability":{"nesting_mode":"list","block":{"attributes":{"using_environment_id":{"type":"bool","description_kind":"plain","required":true},"using_mobile_key":{"type":"bool","description_kind":"plain","required":true}},"description":"A block describing which client-side SDKs can use new flags by default.","description_kind":"plain"}},"environments":{"nesting_mode":"list","block":{"attributes":{"api_key":{"type":"string","description":"The environment's SDK key.","description_kind":"plain","computed":true,"sensitive":true},"client_side_id":{"type":"string","description":"The environment's client-side ID.","description_kind":"plain","computed":true,"sensitive":true},"color":{"type":"string","description":"The color swatch as an RGB hex value with no leading `#`. For example: `000000`","description_kind":"plain","required":true},"confirm_changes":{"type":"bool","description":"Set to `true` if this environment requires confirmation for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"critical":{"type":"bool","description":"Denotes whether the environment is critical.","description_kind":"plain","optional":true},"default_track_events":{"type":"bool","description":"Set to `true` to enable data export for every flag created in this environment after you configure this argument. This field will default to `false` when not set. To learn more, read [Data Export](https://docs.launchdarkly.com/home/data-export).","description_kind":"plain","optional":true},"default_ttl":{"type":"number","description":"The TTL for the environment. This must be between 0 and 60 minutes. The TTL setting only applies to environments using the PHP SDK. This field will default to `0` when not set. To learn more, read [TTL settings](https://docs.launchdarkly.com/home/organize/environments#ttl-settings).","description_kind":"plain","optional":true},"key":{"type":"string","description":"The project-unique key for the environment. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"mobile_key":{"type":"string","description":"The environment's mobile key.","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description":"The name of the environment.","description_kind":"plain","required":true},"require_comments":{"type":"bool","description":"Set to `true` if this environment requires comments for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","optional":true},"secure_mode":{"type":"bool","description":"Set to `true` to ensure a user of the client-side SDK cannot impersonate another user. This field will default to `false` when not set.","description_kind":"plain","optional":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"block_types":{"approval_settings":{"nesting_mode":"list","block":{"attributes":{"auto_apply_approved_changes":{"type":"bool","description":"Automatically apply changes that have been approved by all reviewers. This field is only applicable for approval service kinds other than `launchdarkly`.","description_kind":"plain","optional":true},"can_apply_declined_changes":{"type":"bool","description":"Set to `true` if changes can be applied as long as the `min_num_approvals` is met, regardless of whether any reviewers have declined a request. Defaults to `true`.","description_kind":"plain","optional":true},"can_review_own_request":{"type":"bool","description":"Set to `true` if requesters can approve or decline their own request. They may always comment. Defaults to `false`.","description_kind":"plain","optional":true},"min_num_approvals":{"type":"number","description":"The number of approvals required before an approval request can be applied. This number must be between 1 and 5. Defaults to 1.","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Set to `true` for changes to flags in this environment to require approval. You may only set `required` to true if `required_approval_tags` is not set and vice versa. Defaults to `false`.","description_kind":"plain","optional":true},"required_approval_tags":{"type":["list","string"],"description":"An array of tags used to specify which flags with those tags require approval. You may only set `required_approval_tags` if `required` is set to `false` and vice versa.","description_kind":"plain","optional":true},"service_config":{"type":["map","string"],"description":"The configuration for the service associated with this approval. This is specific to each approval service. For a `service_kind` of `servicenow`, the following fields apply:\n\n\t - `template` (String) The sys_id of the Standard Change Request Template in ServiceNow that LaunchDarkly will use when creating the change request.\n\t - `detail_column` (String) The name of the ServiceNow Change Request column LaunchDarkly uses to populate detailed approval request information. This is most commonly \"justification\".","description_kind":"plain","optional":true},"service_kind":{"type":"string","description":"The kind of service associated with this approval. This determines which platform is used for requesting approval. Valid values are `servicenow`, `launchdarkly`. If you use a value other than `launchdarkly`, you must have already configured the integration in the LaunchDarkly UI or your apply will fail.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"List of nested `environments` blocks describing LaunchDarkly environments that belong to the project. When managing LaunchDarkly projects in Terraform, you should always manage your environments as nested project resources.\n\n-\u003e **Note:** Mixing the use of nested `environments` blocks and [`launchdarkly_environment`](/docs/providers/launchdarkly/r/environment.html) resources is not recommended. `launchdarkly_environment` resources should only be used when the encapsulating project is not managed in Terraform.","description_kind":"plain"},"min_items":1}},"description":"Provides a LaunchDarkly project resource.\n\nThis resource allows you to create and manage projects within your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_relay_proxy_configuration":{"version":0,"block":{"attributes":{"display_key":{"type":"string","description":"The last 4 characters of the Relay Proxy configuration's unique key.","description_kind":"plain","computed":true},"full_key":{"type":"string","description":"The Relay Proxy configuration's unique key. Because the `full_key` is only exposed upon creation, it will not be available if the resource is imported.","description_kind":"plain","computed":true,"sensitive":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The human-readable name for your Relay Proxy configuration.","description_kind":"plain","required":true}},"block_types":{"policy":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"The Relay Proxy configuration's rule policy block. This determines what content the Relay Proxy receives. To learn more, read [Understanding policies](https://docs.launchdarkly.com/home/members/role-policies#understanding-policies).","description_kind":"plain"},"min_items":1}},"description":"Provides a LaunchDarkly Relay Proxy configuration resource for use with the Relay Proxy's [automatic configuration feature](https://docs.launchdarkly.com/home/relay-proxy/automatic-configuration).\n\n-\u003e **Note:** Relay Proxy automatic configuration is available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis resource allows you to create and manage Relay Proxy configurations within your LaunchDarkly organization.\n\n-\u003e **Note:** This resource will store the full plaintext secret for your Relay Proxy configuration's unique key in Terraform state. Be sure your state is configured securely before using this resource. See https://www.terraform.io/docs/state/sensitive-data.html for more details.","description_kind":"plain"}},"launchdarkly_segment":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"The segment's creation date represented as a UNIX epoch timestamp.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The description of the segment's purpose.","description_kind":"plain","optional":true},"env_key":{"type":"string","description":"The segment's environment key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"excluded":{"type":["list","string"],"description":"List of user keys excluded from the segment. To target on other context kinds, use the excluded_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"included":{"type":["list","string"],"description":"List of user keys included in the segment. To target on other context kinds, use the included_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","optional":true},"key":{"type":"string","description":"The unique key that references the segment. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"name":{"type":"string","description":"The human-friendly name for the segment.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The segment's project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"unbounded":{"type":"bool","description":"Whether to create a standard segment (`false`) or a Big Segment (`true`). Standard segments include rule-based and smaller list-based segments. Big Segments include larger list-based segments and synced segments. Only use a Big Segment if you need to add more than 15,000 individual targets. It is not possible to manage the list of targeted contexts for Big Segments with Terraform. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true},"unbounded_context_kind":{"type":"string","description":"For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","optional":true,"computed":true},"view_keys":{"type":["set","string"],"description":"A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. The field is also computed, meaning Terraform will read back the current view associations from LaunchDarkly to detect drift. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the configured `view_keys`. Choose one approach per resource.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"excluded_contexts":{"nesting_mode":"list","block":{"attributes":{"context_kind":{"type":"string","description":"The context kind associated with this segment target. To target on user contexts, use the included and excluded attributes.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"List of target object keys included in or excluded from the segment.","description_kind":"plain","required":true}},"description":"List of non-user target objects excluded from the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain"}},"included_contexts":{"nesting_mode":"list","block":{"attributes":{"context_kind":{"type":"string","description":"The context kind associated with this segment target. To target on user contexts, use the included and excluded attributes.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"List of target object keys included in or excluded from the segment.","description_kind":"plain","required":true}},"description":"List of non-user target objects included in the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain"}},"rules":{"nesting_mode":"list","block":{"attributes":{"bucket_by":{"type":"string","description":"The attribute by which to group contexts together.","description_kind":"plain","optional":true},"rollout_context_kind":{"type":"string","description":"The context kind associated with this segment rule. This argument is only valid if `weight` is also specified. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"weight":{"type":"number","description":"The integer weight of the rule (between 1 and 100000).","description_kind":"plain","optional":true}},"block_types":{"clauses":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The user attribute to operate on","description_kind":"plain","required":true},"context_kind":{"type":"string","description":"The context kind associated with this rule clause. If omitted, defaults to `user`.","description_kind":"plain","optional":true},"negate":{"type":"bool","description":"Whether to negate the rule clause.","description_kind":"plain","optional":true},"op":{"type":"string","description":"The operator associated with the rule clause. Available options are `in`, `endsWith`, `startsWith`, `matches`, `contains`, `lessThan`, `lessThanOrEqual`, `greaterThanOrEqual`, `before`, `after`, `segmentMatch`, `semVerEqual`, `semVerLessThan`, and `semVerGreaterThan`. Read LaunchDarkly's [Operators](https://docs.launchdarkly.com/sdk/concepts/flag-evaluation-rules#operators) documentation for more information.","description_kind":"plain","required":true},"value_type":{"type":"string","description":"The type for each of the clause's values. Available types are `boolean`, `string`, and `number`. If omitted, `value_type` defaults to `string`.","description_kind":"plain","optional":true},"values":{"type":["list","string"],"description":"The list of values associated with the rule clause.","description_kind":"plain","required":true}},"description":"List of nested blocks specifying the logical clauses to evaluate","description_kind":"plain"}}},"description":"List of nested custom rule blocks to apply to the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly segment resource.\n\nThis resource allows you to create and manage segments within your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_team":{"version":0,"block":{"attributes":{"custom_role_keys":{"type":["set","string"],"description":"List of custom role keys the team will access. The referenced custom roles must already exist in LaunchDarkly. If they don't, the provider may behave unexpectedly.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The team description.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The team key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainers":{"type":["set","string"],"description":"List of member IDs for users who maintain the team.","description_kind":"plain","optional":true},"member_ids":{"type":["set","string"],"description":"List of member IDs who belong to the team.","description_kind":"plain","optional":true},"name":{"type":"string","description":"A human-friendly name for the team.","description_kind":"plain","required":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team resource.\n\nThis resource allows you to create and manage a team within your LaunchDarkly organization.\n\n-\u003e **Note:** Teams are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).","description_kind":"plain"}},"launchdarkly_team_member":{"version":0,"block":{"attributes":{"custom_roles":{"type":["set","string"],"description":"The list of custom roles keys associated with the team member. Custom roles are only available to customers on an Enterprise plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\n-\u003e **Note:** each `launchdarkly_team_member` must have either a `role` or `custom_roles` argument.","description_kind":"plain","optional":true},"email":{"type":"string","description":"The unique email address associated with the team member. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"first_name":{"type":"string","description":"The team member's given name. Once created, this cannot be updated except by the team member.","description_kind":"plain","optional":true},"id":{"type":"string","description":"The 24 character alphanumeric ID of the team member.","description_kind":"plain","computed":true},"last_name":{"type":"string","description":"TThe team member's family name. Once created, this cannot be updated except by the team member.","description_kind":"plain","optional":true},"role":{"type":"string","description":"The role associated with team member. Supported roles are `reader`, `writer`, `no_access`, or `admin`. If you don't specify a role, `reader` is assigned by default.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team member resource.\n\nThis resource allows you to create and manage team members within your LaunchDarkly organization.\n\n-\u003e **Note:** You can only manage team members with \"admin\" level personal access tokens. To learn more, read [Managing Teams](https://docs.launchdarkly.com/home/teams/managing).","description_kind":"plain"}},"launchdarkly_team_role_mapping":{"version":0,"block":{"attributes":{"custom_role_keys":{"type":["set","string"],"description":"A set of custom role keys to assign to the team.","description_kind":"plain","required":true},"id":{"type":"string","description":"The ID for this resource.","description_kind":"plain","computed":true},"team_key":{"type":"string","description":"The LaunchDarkly team key.","description_kind":"plain","required":true}},"description":"Manages the mapping of LaunchDarkly custom roles to teams.","description_kind":"plain"}},"launchdarkly_view":{"version":0,"block":{"attributes":{"archived":{"type":"bool","description":"Whether the view is archived.","description_kind":"plain","optional":true},"description":{"type":"string","description":"The view's description.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The view's unique key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The member ID of the maintainer for this view. Exactly one of `maintainer_id` and `maintainer_team_key` must be set.","description_kind":"plain","optional":true},"maintainer_team_key":{"type":"string","description":"The team key of the maintainer team for this view. Exactly one of `maintainer_id` and `maintainer_team_key` must be set.","description_kind":"plain","optional":true},"name":{"type":"string","description":"The view's name.","description_kind":"plain","required":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true}},"description":"Provides a LaunchDarkly view resource.\n\n-\u003e **Note:** Views are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\n~\u003e **Beta:** This resource uses a beta API. Beta resources may change or be removed in future versions.\n\nThis resource allows you to create and manage views within your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_view_filter_links":{"version":0,"block":{"attributes":{"flag_filter":{"type":"string","description":"A filter expression to match feature flags for linking to the view. Uses the same filter syntax as the flag list API endpoint (e.g. `tags:frontend`, `status:active`).","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"reconcile_on_apply":{"type":"bool","description":"Whether to re-resolve configured filters on every `terraform apply` even when no resource arguments changed. When true, Terraform will show an in-place update on each apply and `resolved_at` will change every run.","description_kind":"plain","optional":true},"resolved_at":{"type":"string","description":"Timestamp of the last successful filter resolution. This value updates when the resource is created or updated, and on every apply when `reconcile_on_apply` is true.","description_kind":"plain","computed":true},"segment_filter":{"type":"string","description":"A filter expression to match segments for linking to the view. Uses the segment query filter syntax (e.g. `tags anyOf [\"backend\"]`, `query = \"my-segment\"`, `unbounded = true`). Requires `segment_filter_environment_id` to be set.","description_kind":"plain","optional":true},"segment_filter_environment_id":{"type":"string","description":"The environment ID to use when resolving segment filters. Required when `segment_filter` is set. This is the environment's opaque ID (e.g. from `launchdarkly_project.environments[*].client_side_id`).","description_kind":"plain","optional":true},"view_key":{"type":"string","description":"The view key to link resources to. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true}},"description":"Provides a LaunchDarkly view filter links resource for linking resources to views using filter expressions.\n\n-\u003e **Note:** Views are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\n~\u003e **Beta:** This resource uses a beta API. Beta resources may change or be removed in future versions.\n\nThis resource allows you to link all flags and/or segments matching a filter expression to a specific view. The filter is resolved at apply time — the backend finds all resources matching the filter and links them to the view.\n\n-\u003e **Note:** Filter-based links are point-in-time. By default, filters are resolved only when this resource is created or updated (for example, when `flag_filter` changes). Set `reconcile_on_apply = true` to force re-resolution on every `terraform apply`.\n\n## When to use which resource\n\n- **`view_links`**: You know the exact flag/segment keys to link. Terraform tracks the explicit list and detects drift if links are removed externally.\n- **`view_filter_links` (this resource)**: You want to link all resources matching a dynamic query (e.g. all flags tagged \"frontend\"). No drift detection on resolved keys. By default, only resource argument changes trigger updates; set `reconcile_on_apply` to refresh links every apply.\n- **`view_keys` on individual resources**: Each flag/segment declares its own view membership. Best for modular Terraform structures.\n\n-\u003e **Warning:** Do not use `view_filter_links` and `view_links` targeting the same view and resource type, as conflicts may cause unexpected behavior.","description_kind":"plain"}},"launchdarkly_view_links":{"version":0,"block":{"attributes":{"flags":{"type":["set","string"],"description":"A set of feature flag keys to link to the view.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"project_key":{"type":"string","description":"The project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"view_key":{"type":"string","description":"The view key to link resources to. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true}},"block_types":{"segments":{"nesting_mode":"set","block":{"attributes":{"environment_id":{"type":"string","description":"The environment ID of the segment.","description_kind":"plain","required":true},"segment_key":{"type":"string","description":"The key of the segment.","description_kind":"plain","required":true}},"description":"A set of segments to link to the view. Each segment is identified by its environment ID and segment key.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly view links resource for managing bulk resource linkage to views.\n\n-\u003e **Note:** Views are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\n~\u003e **Beta:** This resource uses a beta API. Beta resources may change or be removed in future versions.\n\nThis resource allows you to efficiently link multiple flags and/or segments to a specific view. This is particularly useful for administrators organizing resources by team or deployment unit.\n\n-\u003e **Note:** This resource manages ALL links for the specified resource types within a view. Adding or removing items from the configuration will link or unlink those resources accordingly.\n\n## Alternative Approach: view_keys on Individual Resources\n\nFor modular Terraform configurations where flags and segments are defined in separate files or modules, you can use the `view_keys` field directly on the resource instead of using this centralized `view_links` resource:\n\n- **Feature Flags**: Use the `view_keys` attribute on `launchdarkly_feature_flag` resources\n- **Segments**: Use the `view_keys` attribute on `launchdarkly_segment` resources\n\n**When to use `view_links` (this resource):**\n- Managing many flags/segments for a single view (bulk operations)\n- Centralized view management across your infrastructure\n- Administrative view organization\n\n**When to use `view_keys` on individual resources:**\n- Modular Terraform structures with separate files per flag/segment\n- Each team/module manages their own resources\n- Want view membership defined alongside the resource\n\n-\u003e **Warning:** Do not use both `view_links` and `view_keys` to manage the same flag or segment's view associations. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the managing resource's configured associations. Choose one approach per resource.\n\nSee the feature flag resource documentation and segment resource documentation for details on the `view_keys` attribute.","description_kind":"plain"}},"launchdarkly_webhook":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The webhook's human-readable name.","description_kind":"plain","optional":true},"on":{"type":"bool","description":"Specifies whether the webhook is enabled.","description_kind":"plain","optional":true},"secret":{"type":"string","description":"The secret used to sign the webhook.","description_kind":"plain","optional":true,"sensitive":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","optional":true},"url":{"type":"string","description":"The URL of the remote webhook.","description_kind":"plain","required":true}},"block_types":{"statements":{"nesting_mode":"list","block":{"attributes":{"actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement applies.\nEither `actions` or `not_actions` must be specified. For a list of available actions read [Actions reference](https://docs.launchdarkly.com/home/account-security/custom-roles/actions#actions-reference).","description_kind":"plain","optional":true},"effect":{"type":"string","description":"Either `allow` or `deny`. This argument defines whether the statement allows or denies access to the named resources and actions.","description_kind":"plain","required":true},"not_actions":{"type":["list","string"],"description":"The list of action specifiers defining the actions to which the statement does not apply.","description_kind":"plain","optional":true},"not_resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement does not apply.","description_kind":"plain","optional":true},"resources":{"type":["list","string"],"description":"The list of resource specifiers defining the resources to which the statement applies.","description_kind":"plain","optional":true}},"description":"List of policy statement blocks used to filter webhook events. For more information on webhook policy filters read [Adding a policy filter](https://docs.launchdarkly.com/integrations/webhooks#adding-a-policy-filter).","description_kind":"plain"}}},"description":"Provides a LaunchDarkly webhook resource.\n\nThis resource allows you to create and manage webhooks within your LaunchDarkly organization.","description_kind":"plain"}}},"data_source_schemas":{"launchdarkly_ai_config":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"A timestamp of when the AI Config was created.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The AI Config's description.","description_kind":"plain","computed":true},"evaluation_metric_key":{"type":"string","description":"The key of the evaluation metric associated with this AI Config.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_inverted":{"type":"bool","description":"Whether the evaluation metric is inverted.","description_kind":"plain","computed":true},"key":{"type":"string","description":"The AI Config's unique key.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The member ID of the maintainer for this AI Config. Conflicts with `maintainer_team_key`.","description_kind":"plain","computed":true},"maintainer_team_key":{"type":"string","description":"The team key of the maintainer team for this AI Config. Conflicts with `maintainer_id`.","description_kind":"plain","computed":true},"mode":{"type":"string","description":"The AI Config's mode. Must be `completion`, `agent`, or `judge`. Defaults to `completion`.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The AI Config's human-readable name.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The project key.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"variations":{"type":["list",["object",{"key":"string","name":"string","variation_id":"string"}]],"description":"A list of variation summaries for this AI Config.","description_kind":"plain","computed":true},"version":{"type":"number","description":"The version of the AI Config.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly AI Config data source.\n\nThis data source allows you to retrieve AI configuration information from your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_ai_config_variation":{"version":0,"block":{"attributes":{"config_key":{"type":"string","description":"The AI Config key that this variation belongs to.","description_kind":"plain","required":true},"creation_date":{"type":"number","description":"The creation timestamp of the variation.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The variation's description (used in agent mode).","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"instructions":{"type":"string","description":"The variation's instructions (used in agent mode).","description_kind":"plain","computed":true},"key":{"type":"string","description":"The variation's unique key.","description_kind":"plain","required":true},"messages":{"type":["list",["object",{"content":"string","role":"string"}]],"description":"A list of messages for completion mode. Each message has a `role` and `content`.","description_kind":"plain","computed":true},"model":{"type":"string","description":"A JSON string representing the inline model configuration for the variation. Conflicts with `model_config_key`.","description_kind":"plain","computed":true},"model_config_key":{"type":"string","description":"The key of a model config resource to use for this variation. Conflicts with `model`.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The variation's human-readable name.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The project key.","description_kind":"plain","required":true},"state":{"type":"string","description":"The state of the variation. Must be `archived` or `published`.","description_kind":"plain","computed":true},"tool_keys":{"type":["set","string"],"description":"A set of AI tool keys to associate with this variation. **Note:** The API does not currently return tool associations on read, so Terraform cannot detect drift for this field. Changes made outside of Terraform will not be reflected in state.","description_kind":"plain","computed":true},"variation_id":{"type":"string","description":"The internal ID of the variation.","description_kind":"plain","computed":true},"version":{"type":"number","description":"The version number of the variation.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly AI Config variation data source.\n\nThis data source allows you to retrieve AI Config variation information from your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_ai_tool":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"The creation timestamp of the AI tool.","description_kind":"plain","computed":true},"custom_parameters":{"type":"string","description":"A JSON string representing custom application-level metadata for the AI tool.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The AI tool's description.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The AI tool's unique key.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The member ID of the maintainer for this AI tool. Conflicts with `maintainer_team_key`.","description_kind":"plain","computed":true},"maintainer_team_key":{"type":"string","description":"The team key of the maintainer team for this AI tool. Conflicts with `maintainer_id`.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The project key.","description_kind":"plain","required":true},"schema_json":{"type":"string","description":"A JSON string representing the JSON Schema for the tool's parameters.","description_kind":"plain","computed":true},"version":{"type":"number","description":"The version of the AI tool.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly AI tool data source.\n\nThis data source allows you to retrieve AI tool information from your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_audit_log_subscription":{"version":0,"block":{"attributes":{"config":{"type":["map","string"],"description":"The set of configuration fields corresponding to the value defined for `integration_key`. Refer to the `formVariables` field in the corresponding `integrations/\u003cintegration_key\u003e/manifest.json` file in [this repo](https://github.com/launchdarkly/integration-framework/tree/master/integrations) for a full list of fields for the integration you wish to configure. **IMPORTANT**: Please note that Terraform will only accept these in snake case, regardless of the case shown in the manifest.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The audit log subscription ID.","description_kind":"plain","required":true},"integration_key":{"type":"string","description":"The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`.","description_kind":"plain","required":true},"name":{"type":"string","description":"A human-friendly name for your audit log subscription viewable from within the LaunchDarkly Integrations page.","description_kind":"plain","computed":true},"on":{"type":"bool","description":"Whether or not you want your subscription enabled, i.e. to actively send events.","description_kind":"plain","computed":true},"statements":{"type":["list",["object",{"actions":["list","string"],"effect":"string","not_actions":["list","string"],"not_resources":["list","string"],"resources":["list","string"]}]],"description":"A block representing the resources to which you wish to subscribe.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly audit log subscription data source.\n\nThis data source allows you to retrieve information about LaunchDarkly audit log subscriptions.","description_kind":"plain"}},"launchdarkly_environment":{"version":0,"block":{"attributes":{"api_key":{"type":"string","description":"The environment's SDK key.","description_kind":"plain","computed":true,"sensitive":true},"approval_settings":{"type":["list",["object",{"auto_apply_approved_changes":"bool","can_apply_declined_changes":"bool","can_review_own_request":"bool","min_num_approvals":"number","required":"bool","required_approval_tags":["list","string"],"service_config":["map","string"],"service_kind":"string"}]],"description_kind":"plain","computed":true},"client_side_id":{"type":"string","description":"The environment's client-side ID.","description_kind":"plain","computed":true,"sensitive":true},"color":{"type":"string","description_kind":"plain","computed":true},"confirm_changes":{"type":"bool","description":"Set to `true` if this environment requires confirmation for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","computed":true},"critical":{"type":"bool","description":"Denotes whether the environment is critical.","description_kind":"plain","optional":true},"default_track_events":{"type":"bool","description":"Set to `true` to enable data export for every flag created in this environment after you configure this argument. This field will default to `false` when not set. To learn more, read [Data Export](https://docs.launchdarkly.com/home/data-export).","description_kind":"plain","computed":true},"default_ttl":{"type":"number","description":"The TTL for the environment. This must be between 0 and 60 minutes. The TTL setting only applies to environments using the PHP SDK. This field will default to `0` when not set. To learn more, read [TTL settings](https://docs.launchdarkly.com/home/organize/environments#ttl-settings).","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The project-unique key for the environment.","description_kind":"plain","required":true},"mobile_key":{"type":"string","description":"The environment's mobile key.","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The environment's project key.","description_kind":"plain","required":true},"require_comments":{"type":"bool","description":"Set to `true` if this environment requires comments for flag and segment changes. This field will default to `false` when not set.","description_kind":"plain","computed":true},"secure_mode":{"type":"bool","description":"Set to `true` to ensure a user of the client-side SDK cannot impersonate another user. This field will default to `false` when not set.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly environment data source.\n\nThis data source allows you to retrieve environment information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_feature_flag":{"version":0,"block":{"attributes":{"archived":{"type":"bool","description":"Specifies whether the flag is archived or not. Note that you cannot create a new flag that is archived, but can update a flag to be archived.","description_kind":"plain","computed":true},"client_side_availability":{"type":["list",["object",{"using_environment_id":"bool","using_mobile_key":"bool"}]],"description_kind":"plain","computed":true},"custom_properties":{"type":["set",["object",{"key":"string","name":"string","value":["list","string"]}]],"description":"List of nested blocks describing the feature flag's [custom properties](https://docs.launchdarkly.com/home/connecting/custom-properties)","description_kind":"plain","computed":true},"defaults":{"type":["list",["object",{"off_variation":"number","on_variation":"number"}]],"description":"A block containing the indices of the variations to be used as the default on and off variations in all new environments. Flag configurations in existing environments will not be changed nor updated if the configuration block is removed.","description_kind":"plain","computed":true},"deprecated":{"type":"bool","description":"Specifies whether the flag is deprecated or not. Note that you cannot create a new flag that is deprecated, but can update a flag to be deprecated.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The feature flag's description.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_in_snippet":{"type":"bool","description":"Specifies whether this flag should be made available to the client-side JavaScript SDK using the client-side Id. This value gets its default from your project configuration if not set. `include_in_snippet` is now deprecated. Please migrate to `client_side_availability.using_environment_id` to maintain future compatibility.","description_kind":"plain","deprecated":true,"computed":true},"key":{"type":"string","description":"The unique feature flag key that references the flag in your application code.","description_kind":"plain","required":true},"maintainer_id":{"type":"string","description":"The feature flag maintainer's 24 character alphanumeric team member ID. `maintainer_team_key` cannot be set if `maintainer_id` is set. If neither is set, it will automatically be or stay set to the member ID associated with the API key used by your LaunchDarkly Terraform provider or the most recently-set maintainer.","description_kind":"plain","optional":true,"computed":true},"maintainer_team_key":{"type":"string","description":"The key of the associated team that maintains this feature flag. `maintainer_id` cannot be set if `maintainer_team_key` is set","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The feature flag's human-readable name","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The feature flag's project key.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"temporary":{"type":"bool","description":"Specifies whether the flag is a temporary flag.","description_kind":"plain","computed":true},"variation_type":{"type":"string","description":"The uniform type for all variations. Can be either \"boolean\", \"string\", \"number\", or \"json\".","description_kind":"plain","computed":true},"variations":{"type":["list",["object",{"description":"string","name":"string","value":"string"}]],"description":"An array of possible variations for the flag","description_kind":"plain","computed":true},"view_keys":{"type":["set","string"],"description":"A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. The field is also computed, meaning Terraform will read back the current view associations from LaunchDarkly to detect drift. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the configured `view_keys`. Choose one approach per resource.","description_kind":"plain","computed":true},"views":{"type":["list","string"],"description":"A list of view keys that this feature flag is linked to.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly feature flag data source.\n\nThis data source allows you to retrieve feature flag information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_feature_flag_environment":{"version":0,"block":{"attributes":{"context_targets":{"type":["set",["object",{"context_kind":"string","values":["list","string"],"variation":"number"}]],"description":"The set of nested blocks describing the individual targets for non-user context kinds for each variation.","description_kind":"plain","computed":true},"env_key":{"type":"string","description":"The environment key.","description_kind":"plain","required":true},"fallthrough":{"type":["list",["object",{"bucket_by":"string","context_kind":"string","rollout_weights":["list","number"],"variation":"number"}]],"description":"Nested block describing the default variation to serve if no `prerequisites`, `target`, or `rules` apply.","description_kind":"plain","computed":true},"flag_id":{"type":"string","description":"The feature flag's unique `id` in the format `project_key/flag_key`.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"off_variation":{"type":"number","description":"The index of the variation to serve if targeting is disabled.","description_kind":"plain","computed":true},"on":{"type":"bool","description":"Whether targeting is enabled. Defaults to `false` if not set.","description_kind":"plain","computed":true},"prerequisites":{"type":["list",["object",{"flag_key":"string","variation":"number"}]],"description":"List of nested blocks describing prerequisite feature flags rules.","description_kind":"plain","computed":true},"rules":{"type":["list",["object",{"bucket_by":"string","clauses":["list",["object",{"attribute":"string","context_kind":"string","negate":"bool","op":"string","value_type":"string","values":["list","string"]}]],"context_kind":"string","description":"string","rollout_weights":["list","number"],"variation":"number"}]],"description":"List of logical targeting rules.","description_kind":"plain","computed":true},"targets":{"type":["set",["object",{"values":["list","string"],"variation":"number"}]],"description":"Set of nested blocks describing the individual user targets for each variation.","description_kind":"plain","computed":true},"track_events":{"type":"bool","description":"Whether to send event data back to LaunchDarkly. Defaults to `false` if not set.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly environment-specific feature flag data source.\n\nThis data source allows you to retrieve environment-specific feature flag information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_flag_templates":{"version":0,"block":{"attributes":{"boolean_defaults":{"type":["list",["object",{"false_description":"string","false_display_name":"string","off_variation":"number","on_variation":"number","true_description":"string","true_display_name":"string"}]],"description":"A block describing the default boolean flag variation settings.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"project_key":{"type":"string","description":"The project key.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"temporary":{"type":"bool","description":"Whether new flags should be temporary by default.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly flag templates data source.\n\nThis data source allows you to retrieve the \"Custom\" flag template settings for a LaunchDarkly project. LaunchDarkly projects include several built-in flag templates (Release, Kill switch, Experiment, Custom, Migration). This data source reads the Custom template only.","description_kind":"plain"}},"launchdarkly_flag_trigger":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","description":"Whether the trigger is currently active or not.","description_kind":"plain","computed":true},"env_key":{"type":"string","description":"The unique key of the environment the flag trigger will work in.","description_kind":"plain","required":true},"flag_key":{"type":"string","description":"The unique key of the associated flag.","description_kind":"plain","required":true},"id":{"type":"string","description":"The Terraform trigger ID. The unique trigger ID can be found in your saved trigger URL:\n\n```\nhttps://app.launchdarkly.com/webhook/triggers/THIS_IS_YOUR_TRIGGER_ID/aff25a53-17d9-4112-a9b8-12718d1a2e79\n```\n\nPlease note that if you did not save this upon creation of the resource, you will have to reset it to get a new value, which can cause breaking changes.","description_kind":"plain","required":true},"instructions":{"type":["list",["object",{"kind":"string"}]],"description":"Instructions containing the action to perform when invoking the trigger. Currently supported flag actions are `turnFlagOn` and `turnFlagOff`. This must be passed as the key-value pair `{ kind = \"\u003cflag_action\u003e\" }`.","description_kind":"plain","computed":true},"integration_key":{"type":"string","description":"The unique identifier of the integration you intend to set your trigger up with. Currently supported are `generic-trigger`, `datadog`, `dynatrace`, `dynatrace-cloud-automation`, `honeycomb`, `new-relic-apm`, and `signalfx`. `generic-trigger` should be used for integrations not explicitly supported.","description_kind":"plain","computed":true},"maintainer_id":{"type":"string","description":"The ID of the member responsible for maintaining the flag trigger. If created via Terraform, this value will be the ID of the member associated with the API key used for your provider configuration.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The unique key of the project encompassing the associated flag.","description_kind":"plain","required":true},"trigger_url":{"type":"string","description":"The unique URL used to invoke the trigger.","description_kind":"plain","computed":true,"sensitive":true}},"description":"Provides a LaunchDarkly flag trigger data source.\n\n-\u003e **Note:** Flag triggers are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis data source allows you to retrieve information about flag triggers from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_metric":{"version":0,"block":{"attributes":{"analysis_type":{"type":"string","description":"The method for analyzing metric events. Available choices are `mean` and `percentile`.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The description of the metric's purpose.","description_kind":"plain","computed":true},"event_key":{"type":"string","description":"The event key for your metric (if custom metric)","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"include_units_without_events":{"type":"bool","description":"Include units that did not send any events and set their value to 0.","description_kind":"plain","computed":true},"is_active":{"type":"bool","description":"Ignored. All metrics are considered active.","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"is_numeric":{"type":"bool","description":"Whether a `custom` metric is a numeric metric or not.","description_kind":"plain","computed":true},"key":{"type":"string","description":"The unique key that references the metric. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"kind":{"type":"string","description":"The metric type. Available choices are `click`, `custom`, and `pageview`.","description_kind":"plain","computed":true},"maintainer_id":{"type":"string","description":"The LaunchDarkly member ID of the member who will maintain the metric. If not set, the API will automatically apply the member associated with your Terraform API key or the most recently-set maintainer","description_kind":"plain","computed":true},"name":{"type":"string","description":"The human-friendly name for the metric.","description_kind":"plain","computed":true},"percentile_value":{"type":"number","description":"The percentile for the analysis method. An integer denoting the target percentile between 0 and 100. Required when analysis_type is percentile.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The metrics's project key. A change in this field will force the destruction of the existing resource and the creation of a new one.","description_kind":"plain","required":true},"randomization_units":{"type":["set","string"],"description":"A set of one or more context kinds that this metric can measure events from. Metrics can only use context kinds marked as \"Available for experiments.\" For more information, read [Allocating experiment audiences](https://docs.launchdarkly.com/home/creating-experiments/allocation).","description_kind":"plain","computed":true},"selector":{"type":"string","description":"The CSS selector for your metric (if click metric)","description_kind":"plain","computed":true},"success_criteria":{"type":"string","description":"The success criteria for your metric (if numeric metric). Available choices are `HigherThanBaseline` and `LowerThanBaseline`.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"unit":{"type":"string","description":"(Required for kind `custom`) The unit for numeric `custom` metrics.","description_kind":"plain","computed":true},"unit_aggregation_type":{"type":"string","description":"The method by which multiple unit event values are aggregated. Available choices are `average` and `sum`.","description_kind":"plain","computed":true},"urls":{"type":["list",["object",{"kind":"string","pattern":"string","substring":"string","url":"string"}]],"description":"List of nested `url` blocks describing URLs that you want to associate with the metric.","description_kind":"plain","computed":true},"version":{"type":"number","description":"Version of the metric","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly metric data source.\n\nThis data source allows you to retrieve metric information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_model_config":{"version":0,"block":{"attributes":{"cost_per_input_token":{"type":"number","description":"The cost per input token for the model.","description_kind":"plain","computed":true},"cost_per_output_token":{"type":"number","description":"The cost per output token for the model.","description_kind":"plain","computed":true},"custom_parameters":{"type":"string","description":"A JSON string representing custom parameters for the model config.","description_kind":"plain","computed":true},"global":{"type":"bool","description":"Whether the model config is available globally.","description_kind":"plain","computed":true},"icon":{"type":"string","description":"The icon for the model config.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The model config's unique key.","description_kind":"plain","required":true},"model_id":{"type":"string","description":"The model identifier (e.g. `gpt-4`, `claude-3`).","description_kind":"plain","computed":true},"model_provider":{"type":"string","description":"The provider name for the model config (e.g. `openai`, `anthropic`).","description_kind":"plain","computed":true},"name":{"type":"string","description":"The model config's human-readable name.","description_kind":"plain","computed":true},"params":{"type":"string","description":"A JSON string representing the model parameters (e.g. `{\"temperature\": 0.7, \"maxTokens\": 4096}`).","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The project key.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"version":{"type":"number","description":"The version of the model config.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly model config data source.\n\nThis data source allows you to retrieve AI model configuration information from your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_project":{"version":0,"block":{"attributes":{"client_side_availability":{"type":["list",["object",{"using_environment_id":"bool","using_mobile_key":"bool"}]],"description":"A map describing which client-side SDKs can use new flags by default. Please migrate to `default_client_side_availability` to maintain future compatibility.","description_kind":"plain","deprecated":true,"computed":true},"default_client_side_availability":{"type":["list",["object",{"using_environment_id":"bool","using_mobile_key":"bool"}]],"description":"A block describing which client-side SDKs can use new flags by default.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The project's unique key.","description_kind":"plain","required":true},"name":{"type":"string","description":"The project's name.","description_kind":"plain","computed":true},"require_view_association_for_new_flags":{"type":"bool","description":"Whether new flags created in this project must be associated with at least one view.","description_kind":"plain","computed":true},"require_view_association_for_new_segments":{"type":"bool","description":"Whether new segments created in this project must be associated with at least one view.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly project data source.\n\nThis data source allows you to retrieve project information from your LaunchDarkly organization.\n\n-\u003e **Note:** LaunchDarkly data sources do not provide access to the project's environments. If you wish to import environment configurations as data sources you must use the [`launchdarkly_environment` data source](/docs/providers/launchdarkly/d/environment.html).","description_kind":"plain"}},"launchdarkly_relay_proxy_configuration":{"version":0,"block":{"attributes":{"display_key":{"type":"string","description":"The last 4 characters of the Relay Proxy configuration's unique key.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Relay Proxy configuration's unique 24 character ID. The unique relay proxy ID can be found in the relay proxy edit page URL, which you can locate by clicking the three dot menu on your relay proxy item in the UI and selecting \"Edit configuration\":\n\n```\nhttps://app.launchdarkly.com/settings/relay/THIS_IS_YOUR_RELAY_PROXY_ID/edit\n```","description_kind":"plain","required":true},"name":{"type":"string","description":"The human-readable name for your Relay Proxy configuration.","description_kind":"plain","computed":true},"policy":{"type":["list",["object",{"actions":["list","string"],"effect":"string","not_actions":["list","string"],"not_resources":["list","string"],"resources":["list","string"]}]],"description":"The Relay Proxy configuration's rule policy block. This determines what content the Relay Proxy receives. To learn more, read [Understanding policies](https://docs.launchdarkly.com/home/members/role-policies#understanding-policies).","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly Relay Proxy configuration data source for use with the Relay Proxy's [automatic configuration feature](https://docs.launchdarkly.com/home/relay-proxy/automatic-configuration).\n\n-\u003e **Note:** Relay Proxy automatic configuration is available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n\nThis data source allows you to retrieve Relay Proxy configuration information from your LaunchDarkly organization.\n\n-\u003e **Note:** It is not possible for this data source to retrieve your Relay Proxy configuration's unique key. This is because the unique key is only exposed upon creation. If you need to reference the Relay Proxy configuration's unique key in your terraform config, use the `launchdarkly_relay_proxy_configuration` resource instead.","description_kind":"plain"}},"launchdarkly_segment":{"version":0,"block":{"attributes":{"creation_date":{"type":"number","description":"The segment's creation date represented as a UNIX epoch timestamp.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The description of the segment's purpose.","description_kind":"plain","computed":true},"env_key":{"type":"string","description":"The segment's environment key.","description_kind":"plain","required":true},"excluded":{"type":["list","string"],"description":"List of user keys excluded from the segment. To target on other context kinds, use the excluded_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"excluded_contexts":{"type":["list",["object",{"context_kind":"string","values":["list","string"]}]],"description":"List of non-user target objects excluded from the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"included":{"type":["list","string"],"description":"List of user keys included in the segment. To target on other context kinds, use the included_contexts block attribute. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"included_contexts":{"type":["list",["object",{"context_kind":"string","values":["list","string"]}]],"description":"List of non-user target objects included in the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"key":{"type":"string","description":"The unique key that references the segment.","description_kind":"plain","required":true},"name":{"type":"string","description":"The human-friendly name for the segment.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The segment's project key.","description_kind":"plain","required":true},"rules":{"type":["list",["object",{"bucket_by":"string","clauses":["list",["object",{"attribute":"string","context_kind":"string","negate":"bool","op":"string","value_type":"string","values":["list","string"]}]],"rollout_context_kind":"string","weight":"number"}]],"description":"List of nested custom rule blocks to apply to the segment. This attribute is not valid when `unbounded` is set to `true`.","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"unbounded":{"type":"bool","description":"Whether to create a standard segment (`false`) or a Big Segment (`true`). Standard segments include rule-based and smaller list-based segments. Big Segments include larger list-based segments and synced segments. Only use a Big Segment if you need to add more than 15,000 individual targets. It is not possible to manage the list of targeted contexts for Big Segments with Terraform.","description_kind":"plain","computed":true},"unbounded_context_kind":{"type":"string","description":"For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`.","description_kind":"plain","computed":true},"view_keys":{"type":["set","string"],"description":"A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. The field is also computed, meaning Terraform will read back the current view associations from LaunchDarkly to detect drift. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Mixed ownership can cause conflicts; when detected, Terraform logs a warning and reconciles to the configured `view_keys`. Choose one approach per resource.","description_kind":"plain","computed":true},"views":{"type":["list","string"],"description":"A list of view keys that this segment is linked to.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly segment data source.\n\nThis data source allows you to retrieve segment information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_team":{"version":0,"block":{"attributes":{"custom_role_keys":{"type":["set","string"],"description":"The list of the keys of the custom roles that you have assigned to the team.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The team description.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The team key.","description_kind":"plain","required":true},"maintainers":{"type":["set",["object",{"email":"string","first_name":"string","id":"string","last_name":"string","role":"string"}]],"description":"The list of team maintainers as [team member objects](/providers/launchdarkly/launchdarkly/latest/docs/data-sources/team_member).","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-readable name for the team.","description_kind":"plain","computed":true},"project_keys":{"type":["set","string"],"description":"The list of keys of the projects that the team has any write access to.","description_kind":"plain","computed":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team data source.\n\nThis data source allows you to retrieve team information from your LaunchDarkly organization.\n\n-\u003e **Note:** Teams are available to customers on an Enterprise LaunchDarkly plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).","description_kind":"plain"}},"launchdarkly_team_member":{"version":0,"block":{"attributes":{"custom_roles":{"type":["set","string"],"description":"The list of custom roles keys associated with the team member. Custom roles are only available to customers on an Enterprise plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).","description_kind":"plain","computed":true},"email":{"type":"string","description":"The unique email address associated with the team member.","description_kind":"plain","required":true},"first_name":{"type":"string","description":"The team member's given name.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The 24 character alphanumeric ID of the team member.","description_kind":"plain","computed":true},"last_name":{"type":"string","description":"The team member's family name.","description_kind":"plain","computed":true},"role":{"type":"string","description":"The role associated with team member. Possible roles are `owner`, `reader`, `writer`, or `admin`.","description_kind":"plain","computed":true}},"block_types":{"role_attributes":{"nesting_mode":"set","block":{"attributes":{"key":{"type":"string","description":"The key / name of your role attribute. In the example `$${roleAttribute/testAttribute}`, the key is `testAttribute`.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"A list of values for your role attribute. For example, if your policy statement defines the resource `\"proj/$${roleAttribute/testAttribute}\"`, the values would be the keys of the projects you wanted to assign access to.","description_kind":"plain","required":true}},"description":"A role attributes block. One block must be defined per role attribute. The key is the role attribute key and the value is a string array of resource keys that apply.","description_kind":"plain"}}},"description":"Provides a LaunchDarkly team member data source.\n\nThis data source allows you to retrieve team member information from your LaunchDarkly organization.","description_kind":"plain"}},"launchdarkly_team_members":{"version":0,"block":{"attributes":{"emails":{"type":["list","string"],"description":"An array of unique email addresses associated with the team members.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ignore_missing":{"type":"bool","description":"A boolean to determine whether to ignore members that weren't found.","description_kind":"plain","optional":true},"team_members":{"type":["list",["object",{"custom_roles":["set","string"],"email":"string","first_name":"string","id":"string","last_name":"string","role":"string","role_attributes":["set",["object",{"key":"string","values":["list","string"]}]]}]],"description":"The members that were found. The following attributes are available for each member:\n\n- `id` - The 24 character alphanumeric ID of the team member.\n\n- `first_name` - The team member's given name.\n\n- `last_name` - The team member's family name.\n\n- `role` - The role associated with team member. Possible roles are `owner`, `reader`, `writer`, or `admin`.\n\n- `custom_roles` - (Optional) The list of custom roles keys associated with the team member. Custom roles are only available to customers on an Enterprise plan. To learn more, [read about our pricing](https://launchdarkly.com/pricing/). To upgrade your plan, [contact LaunchDarkly Sales](https://launchdarkly.com/contact-sales/).\n","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly team members data source.\n\nThis data source allows you to retrieve team member information from your LaunchDarkly organization on multiple team members.","description_kind":"plain"}},"launchdarkly_view":{"version":0,"block":{"attributes":{"archived":{"type":"bool","description":"Whether the view is archived.","description_kind":"plain","computed":true},"description":{"type":"string","description":"The view's description.","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The view's unique key.","description_kind":"plain","required":true},"linked_flags":{"type":["list","string"],"description":"A list of feature flag keys that are linked to this view.","description_kind":"plain","computed":true},"linked_segments":{"type":["list",["object",{"environment_id":"string","segment_key":"string"}]],"description":"A list of segments that are linked to this view.","description_kind":"plain","computed":true},"maintainer_id":{"type":"string","description":"The member ID of the maintainer for this view.","description_kind":"plain","computed":true},"maintainer_team_key":{"type":"string","description":"The team key of the maintainer team for this view.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The view's name.","description_kind":"plain","computed":true},"project_key":{"type":"string","description":"The project key.","description_kind":"plain","required":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly view data source.\n\nThis data source allows you to retrieve view information from your LaunchDarkly project.","description_kind":"plain"}},"launchdarkly_webhook":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The unique webhook ID.","description_kind":"plain","required":true},"name":{"type":"string","description":"The webhook's human-readable name.","description_kind":"plain","computed":true},"on":{"type":"bool","description":"Whether the webhook is enabled.","description_kind":"plain","computed":true},"secret":{"type":"string","description":"The secret used to sign the webhook.","description_kind":"plain","computed":true,"sensitive":true},"statements":{"type":["list",["object",{"actions":["list","string"],"effect":"string","not_actions":["list","string"],"not_resources":["list","string"],"resources":["list","string"]}]],"description":"List of policy statement blocks used to filter webhook events. For more information on webhook policy filters read [Adding a policy filter](https://docs.launchdarkly.com/integrations/webhooks#adding-a-policy-filter).","description_kind":"plain","computed":true},"tags":{"type":["set","string"],"description":"Tags associated with your resource.","description_kind":"plain","computed":true},"url":{"type":"string","description":"The URL of the remote webhook.","description_kind":"plain","computed":true}},"description":"Provides a LaunchDarkly webhook data source.\n\nThis data source allows you to retrieve webhook information from your LaunchDarkly organization.","description_kind":"plain"}}}}}} diff --git a/examples-generated/project/v1alpha1/project.yaml b/examples-generated/project/v1alpha1/project.yaml index 5cd68fe..534fc35 100644 --- a/examples-generated/project/v1alpha1/project.yaml +++ b/examples-generated/project/v1alpha1/project.yaml @@ -27,5 +27,7 @@ spec: - terraform key: example-project name: Example project + requireViewAssociationForNewFlags: false + requireViewAssociationForNewSegments: false tags: - terraform diff --git a/examples/custom_role/custom_role.yaml b/examples/custom_role/custom_role.yaml index 41236d6..6303255 100644 --- a/examples/custom_role/custom_role.yaml +++ b/examples/custom_role/custom_role.yaml @@ -1,12 +1,12 @@ apiVersion: account.launchdarkly.com/v1alpha1 kind: CustomRole metadata: - name: no-production-access + name: crossplane-created-no-production-access spec: forProvider: description: "Managed with Crossplane LaunchDarkly Provider (generated with Upjet)" - name: no production access - key: global-non-prod + name: crossplane-created-no-production-access + key: crossplane-created-no-production-access policyStatements: - actions: - 'createFlag' @@ -17,4 +17,27 @@ spec: - '*' effect: allow notResources: - - 'proj/*:env/production:flag/*' \ No newline at end of file + - 'proj/*:env/production:flag/*' +--- +apiVersion: account.launchdarkly.com/v1alpha1 +kind: CustomRole +metadata: + name: crossplane-created-allow-product-manager-tag +spec: + forProvider: + description: | + Allow Product Managers to toggle flags and change targeting for flags with the product-manager tag. + This role leverages role scope with the `productManagerProjAttr` role attribute so that projects can be assigned at the team level. + name: crossplane-created-allow-product-manager-tag + key: crossplane-created-allow-product-manager-tag + policyStatements: + - actions: + - "updateOn" + - "updateRules" + - "updateRulesWithMeasuredRollout" + - "updateScheduledChanges" + - "updateTargets" + effect: allow + resources: + # To use role attributes, use the syntax ${roleAttribute/} in lieu of your usual resource keys. + - "proj/${roleAttribute/productManagerProjAttr}:env/*:flag/*;product-manager" diff --git a/examples/feature_flag_environment/targeting.yaml b/examples/feature_flag_environment/targeting.yaml index 6dc4681..5273005 100644 --- a/examples/feature_flag_environment/targeting.yaml +++ b/examples/feature_flag_environment/targeting.yaml @@ -10,7 +10,10 @@ spec: onVariation: 1 key: targeting-rules-flag name: Targeting Rules Flag - projectKey: crossplane-project + projectKeyRef: + name: crossplane-project + tags: + - managed-by-crossplane variationType: boolean variations: - value: "false" @@ -22,8 +25,10 @@ metadata: name: targeting-ff-env spec: forProvider: - flagId: crossplane-project/targeting-rules-flag - envKey: test + flagIdRef: + name: targeting-rules-flag + envKeyRef: + name: development offVariation: 1 "on": true @@ -33,11 +38,7 @@ spec: - accountX variation: 1 fallthrough: - - bucketBy: accountId - contextKind: account - rolloutWeights: - - 60000 - - 40000 + - variation: 0 rules: - clauses: - attribute: country @@ -48,4 +49,4 @@ spec: - de - united description: Target countries - variation: 0 + variation: 0 \ No newline at end of file diff --git a/examples/project_environment_and_flag/flag.yaml b/examples/project_environment_and_flag/flag.yaml index 7428928..9e33404 100644 --- a/examples/project_environment_and_flag/flag.yaml +++ b/examples/project_environment_and_flag/flag.yaml @@ -39,7 +39,7 @@ spec: flagIdRef: name: my-first-string-flag envKeyRef: - name: name-dev-environment + name: development "on": true offVariation: 0 fallthrough: diff --git a/examples/project_environment_and_flag/project_environment.yaml b/examples/project_environment_and_flag/project_environment.yaml index 46bb8b0..2783723 100644 --- a/examples/project_environment_and_flag/project_environment.yaml +++ b/examples/project_environment_and_flag/project_environment.yaml @@ -1,4 +1,7 @@ --- +# Project requires spec.forProvider.environments (CRD / Terraform Min: 1). Nested blocks create +# production, staging, test. Do not duplicate those keys with standalone Environment CRs (provider +# warns against mixing nested envs with launchdarkly_environment for the same project). apiVersion: project.launchdarkly.com/v1alpha1 kind: Project metadata: @@ -36,11 +39,11 @@ spec: apiVersion: project.launchdarkly.com/v1alpha1 kind: Environment metadata: - name: name-dev-environment + name: development spec: forProvider: - key: name-dev - name: Name Dev Environment + key: development + name: development projectKeyRef: name: crossplane-project color: FFFFFF diff --git a/examples/project_environment_and_flag/segment.yaml b/examples/project_environment_and_flag/segment.yaml index 1f82903..7e474cf 100644 --- a/examples/project_environment_and_flag/segment.yaml +++ b/examples/project_environment_and_flag/segment.yaml @@ -7,7 +7,7 @@ spec: projectKeyRef: name: crossplane-project envKeyRef: - name: name-dev-environment + name: development key: example-segment name: Example Segment diff --git a/examples/segment/segment_with_env.yaml b/examples/segment/segment_with_env.yaml index 75c2e2d..fc14dc0 100644 --- a/examples/segment/segment_with_env.yaml +++ b/examples/segment/segment_with_env.yaml @@ -1,12 +1,13 @@ apiVersion: project.launchdarkly.com/v1alpha1 kind: Environment metadata: - name: cross-reference-env + name: development spec: forProvider: - key: cross-reference-env - name: Cross Reference Environment - projectKey: crossplane-project + key: development + name: development + projectKeyRef: + name: crossplane-project color: FFFFFF tags: - managed-by-crossplane @@ -20,7 +21,7 @@ spec: description: Cross reference segment projectKey: crossplane-project envKeyRef: - name: cross-reference-env + name: development includedContexts: - contextKind: account values: diff --git a/examples/team_with_custom_roles/members.yml b/examples/team_with_custom_roles/members.yml index e7ad3cc..f8b98e1 100644 --- a/examples/team_with_custom_roles/members.yml +++ b/examples/team_with_custom_roles/members.yml @@ -3,7 +3,7 @@ kind: TeamMember metadata: name: example-member-1 labels: - team: product-manager + team: crossplane-created-product-manager-team spec: forProvider: email: jesse.smith+crossplane@example.com @@ -16,7 +16,7 @@ kind: TeamMember metadata: name: example-member-2 labels: - team: product-manager + team: crossplane-created-product-manager-team spec: forProvider: email: john.doe+crossplane@example.com diff --git a/examples/team_with_custom_roles/team.yaml b/examples/team_with_custom_roles/team.yaml index d65abd1..2914de1 100644 --- a/examples/team_with_custom_roles/team.yaml +++ b/examples/team_with_custom_roles/team.yaml @@ -1,23 +1,23 @@ ---- +# Team only. CustomRoles live in examples/custom_role/custom_role.yaml (applied in local-e2e Phase 1). apiVersion: account.launchdarkly.com/v1alpha1 kind: Team metadata: - name: product-manager-team + name: crossplane-created-product-manager-team spec: forProvider: description: "Team for all Product Managers (managed with Crossplane)" - name: Product Managers - key: product-manager-team + name: crossplane-created-product-manager-team + key: crossplane-created-product-manager-team memberIdsSelector: matchLabels: - team: product-manager + team: crossplane-created-product-manager-team maintainersRefs: - name: example-member-1 customRoleKeysRefs: - - name: no-production-access - - name: allow-product-manager-tag + - name: crossplane-created-no-production-access + - name: crossplane-created-allow-product-manager-tag # Role attributes are used to assign projects to the team. roleAttributes: @@ -25,47 +25,3 @@ spec: values: - default - the-big-project ---- -apiVersion: account.launchdarkly.com/v1alpha1 -kind: CustomRole -metadata: - name: no-production-access -spec: - forProvider: - description: "Managed with Crossplane LaunchDarkly Provider (generated with Upjet)" - name: no production access - key: global-non-prod - policyStatements: - - actions: - - "createFlag" - effect: allow - resources: - - "proj/*:env/*:flag/*" - - actions: - - "*" - effect: allow - notResources: - - "proj/*:env/production:flag/*" ---- -apiVersion: account.launchdarkly.com/v1alpha1 -kind: CustomRole -metadata: - name: allow-product-manager-tag -spec: - forProvider: - description: | - Allow Product Managers to toggle flags and change targeting for flags with the product-manager tag. - This role leverages role scope with the `productManagerProjAttr` role attribute so that projects can be assigned at the team level. - name: Product Manager tag access - key: product-manager-tag-access - policyStatements: - - actions: - - "updateOn" - - "updateRules" - - "updateRulesWithMeasuredRollout" - - "updateScheduledChanges" - - "updateTargets" - effect: allow - resources: - # To use role attributes, use the syntax $${roleAttribute/} in lieu of your usual resource keys. - - "proj/$${roleAttribute/productManagerProjAttr}:env/*:flag/*;product-manager" diff --git a/go.mod b/go.mod index dcfbf60..524e15b 100644 --- a/go.mod +++ b/go.mod @@ -7,9 +7,8 @@ require ( github.com/crossplane/crossplane-runtime/v2 v2.1.0 github.com/crossplane/crossplane-tools v0.0.0-20251017183449-dd4517244339 github.com/crossplane/upjet/v2 v2.2.0 - // terraform-provider-launchdarkly v2.25.3 - // Pseudo-version required: upstream module lacks /v2 suffix for v2.x releases - github.com/launchdarkly/terraform-provider-launchdarkly v0.0.0-20250718105317-e900a1f0e158 + // terraform-provider-launchdarkly v2.29.0 release tag, canonical Go pseudo-version 1.7.2 + github.com/launchdarkly/terraform-provider-launchdarkly v1.7.2-0.20260508121827-e990d608e567 github.com/pkg/errors v0.9.1 gopkg.in/alecthomas/kingpin.v2 v2.2.6 k8s.io/apimachinery v0.35.0 @@ -83,7 +82,7 @@ require ( github.com/iancoleman/strcase v0.3.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/launchdarkly/api-client-go/v17 v17.1.0 // indirect + github.com/launchdarkly/api-client-go/v22 v22.0.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -111,6 +110,9 @@ require ( github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/x448/float16 v0.8.4 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect github.com/yuin/goldmark v1.7.16 // indirect github.com/zclconf/go-cty v1.17.0 // indirect @@ -132,12 +134,12 @@ require ( golang.org/x/tools v0.40.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect google.golang.org/grpc v1.79.3 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/validator.v2 v2.0.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/api v0.35.0 // indirect diff --git a/go.sum b/go.sum index ae7a54d..f5756f3 100644 --- a/go.sum +++ b/go.sum @@ -1,42 +1,7 @@ cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= @@ -67,16 +32,10 @@ github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/ github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= -github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8= +github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/crossplane/crossplane-runtime/v2 v2.1.0 h1:JBMhL9T+/PfyjLAQEdZWlKLvA3jJVtza8zLLwd9Gs4k= github.com/crossplane/crossplane-runtime/v2 v2.1.0/go.mod h1:j78pmk0qlI//Ur7zHhqTr8iePHFcwJKrZnzZB+Fg4t0= @@ -92,10 +51,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes= github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8= github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= @@ -111,9 +66,6 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -160,56 +112,24 @@ github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4= github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/addlicense v0.0.0-20210428195630-6d92264d7170/go.mod h1:EMjYTRimagHs1FwlIqKyX3wAM0u3rA+McvlIIWmSamA= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/cel-go v0.26.0 h1:DPGjXackMpJWH680oGY4lZhYjIameYmR+/6RBdDGmaI= github.com/google/cel-go v0.26.0/go.mod h1:A9O8OU9rdvrK5MQyrqfIxo1a0u4g3sF8KB6PUIaryMM= github.com/google/gnostic-models v0.7.1 h1:SisTfuFKJSKM5CPZkffwi6coztzzeYUhc3v4yxLWH8c= github.com/google/gnostic-models v0.7.1/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -218,22 +138,10 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= @@ -256,8 +164,6 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24= github.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I= github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= @@ -284,16 +190,12 @@ github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8 github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -305,10 +207,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/launchdarkly/api-client-go/v17 v17.1.0 h1:IbR5UDLKBmff0eRBSD3UgVDfgnifOepBIe4gqivMaec= -github.com/launchdarkly/api-client-go/v17 v17.1.0/go.mod h1:lMTmhEjepXfam8xm8b0ERBJbV9g8vdu9nbKueDXcB5o= -github.com/launchdarkly/terraform-provider-launchdarkly v0.0.0-20250718105317-e900a1f0e158 h1:c1juVPe2qO+PPt/2J9w+uGjqReoURd63884dtLMFcUg= -github.com/launchdarkly/terraform-provider-launchdarkly v0.0.0-20250718105317-e900a1f0e158/go.mod h1:+qVJ3jUMEx16AmH4R0DOPz9HhsEsF8FRqnzgxoRPgJ4= +github.com/launchdarkly/api-client-go/v22 v22.0.0 h1:UeWfl/JDVD5oDVto2NQvho+edAJs9478drZH8L1A1Ws= +github.com/launchdarkly/api-client-go/v22 v22.0.0/go.mod h1:gwKiCZMJeT/x7inYaswt/Z8h5lr+tdHRcRCI4qTZEyM= +github.com/launchdarkly/terraform-provider-launchdarkly v1.7.2-0.20260508121827-e990d608e567 h1:GCp1T05LVxnvqoqCH7nmJukbMM4IT0cnE7Uut3y4WRA= +github.com/launchdarkly/terraform-provider-launchdarkly v1.7.2-0.20260508121827-e990d608e567/go.mod h1:m5tTZR+OdNBLgoIqiv6JxwwgcdTGzVJnzeX3TSGxR68= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= @@ -357,14 +259,12 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -384,7 +284,6 @@ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -404,11 +303,14 @@ github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAh github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -420,11 +322,6 @@ github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6 github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= github.com/zclconf/go-cty-yaml v1.2.0 h1:GDyL4+e/Qe/S0B7YaecMLbVvAR/Mp21CXMOSiCTOi1M= github.com/zclconf/go-cty-yaml v1.2.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= @@ -456,8 +353,6 @@ go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -467,37 +362,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -507,32 +373,8 @@ golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/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-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= @@ -545,22 +387,11 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -571,32 +402,10 @@ golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -628,10 +437,7 @@ golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/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.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= @@ -643,51 +449,10 @@ golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -708,87 +473,15 @@ gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0 gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b h1:Mv8VFug0MP9e5vUxfBcE3vUkV6CImK3cMNMIDFjmzxU= google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= @@ -799,26 +492,19 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo= gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/validator.v2 v2.0.1 h1:xF0KWyGWXm/LM2G1TrEjqOu4pa6coO9AlWSf3msVfDY= +gopkg.in/validator.v2 v2.0.1/go.mod h1:lIUZBlB3Im4s/eYp39Ry/wkR02yOPhZ9IwIRBjuPuG8= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.35.0 h1:iBAU5LTyBI9vw3L5glmat1njFK34srdLmktWwLTprlY= k8s.io/api v0.35.0/go.mod h1:AQ0SNTzm4ZAczM03QH42c7l3bih1TbAXYo0DkF8ktnA= k8s.io/apiextensions-apiserver v0.35.0 h1:3xHk2rTOdWXXJM+RDQZJvdx0yEOgC0FgQ1PlJatA5T4= @@ -841,9 +527,6 @@ k8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e h1:iW9ChlU0cU16w8MpVYjXk1 k8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ= k8s.io/utils v0.0.0-20260108192941-914a6e750570 h1:JT4W8lsdrGENg9W+YwwdLJxklIuKWdRm+BC+xt33FOY= k8s.io/utils v0.0.0-20260108192941-914a6e750570/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 h1:jpcvIRr3GLoUoEKRkHKSmGjxb6lWwrBlJsXc+eUYQHM= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= diff --git a/internal/clients/launchdarkly.go b/internal/clients/launchdarkly.go index 7eb3be5..02015b4 100644 --- a/internal/clients/launchdarkly.go +++ b/internal/clients/launchdarkly.go @@ -17,15 +17,12 @@ import ( "github.com/crossplane/upjet/v2/pkg/terraform" tfsdk "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ldProvider "github.com/launchdarkly/terraform-provider-launchdarkly/launchdarkly" + "github.com/launchdarkly/crossplane-provider-launchdarkly/internal/version" "github.com/launchdarkly/crossplane-provider-launchdarkly/apis/v1beta1" ) const ( - // Provider version for Plugin Framework - providerVersion = "2.25.3" - - // error messages errNotLegacyManaged = "managed resource does not implement LegacyManaged" errNoProviderConfig = "no providerConfigRef provided" errGetProviderConfig = "cannot get referenced ProviderConfig" @@ -104,7 +101,7 @@ func TerraformSetupBuilder() terraform.SetupFn { ps.Meta = sdkProvider.Meta() // Configure Plugin Framework provider (for team_role_mapping) - ps.FrameworkProvider = ldProvider.NewPluginProvider(providerVersion)() + ps.FrameworkProvider = ldProvider.NewPluginProvider(version.TerraformProviderVersion)() return ps, nil } diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..3a864d8 --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,40 @@ +/* +Copyright 2026 LaunchDarkly, Inc. +*/ + +// Package version exposes version strings used by the launchdarkly upjet +// provider. These values are baked into the binary at build time and are +// surfaced to upstream SDKs (e.g. user-agent strings) at runtime. +package version + +// Version is the provider's own release version, injected at link time by +// the Makefile via: +// +// GO_LDFLAGS += -X $(GO_PROJECT)/internal/version.Version=$(VERSION) +// +// MUST be a `var` (not `const`) — the linker's `-X` flag only rewrites +// package-level string variables, not constants. Defaults to "dev" when +// built without ldflags (e.g. `go run ./cmd/provider`, `go test ./...`), +// so the binary always has a sensible value. +var Version = "dev" + +// TerraformProviderVersion is the upstream +// github.com/launchdarkly/terraform-provider-launchdarkly release that this +// binary embeds via no-fork mode. +// +// When bumping the upstream provider, keep all of the following in sync — +// they cannot share a single literal because they're consumed by different +// external systems: +// +// - This constant (passed to ldProvider.NewPluginProvider at runtime). +// - Makefile: TERRAFORM_PROVIDER_VERSION (Terraform Registry semver, +// no `v` prefix). Used by `make generate` to dump config/schema.json. +// - go.mod: the pseudo-version on the github.com/launchdarkly/terraform- +// provider-launchdarkly line, derived from the release commit SHA via +// `go mod download @`. +// - Makefile (optional): TERRAFORM_PROVIDER_GIT_REF, if pinning docs to +// the tag instead of tracking main. +// +// See README.md "Architecture > Note on Go Module Dependency" for why a +// pseudo-version is required in go.mod. +const TerraformProviderVersion = "2.29.0" \ No newline at end of file diff --git a/package/crds/account.launchdarkly.com_auditlogsubscriptions.yaml b/package/crds/account.launchdarkly.com_auditlogsubscriptions.yaml index ef50390..4e1ccfe 100644 --- a/package/crds/account.launchdarkly.com_auditlogsubscriptions.yaml +++ b/package/crds/account.launchdarkly.com_auditlogsubscriptions.yaml @@ -83,8 +83,8 @@ spec: type: object integrationKey: description: |- - relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. - The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. + v2, elastic, grafana, honeycomb, jira, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. + The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. type: string name: description: |- @@ -170,8 +170,8 @@ spec: type: object integrationKey: description: |- - relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. - The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. + v2, elastic, grafana, honeycomb, jira, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. + The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. type: string name: description: |- @@ -360,8 +360,8 @@ spec: type: string integrationKey: description: |- - relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. - The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `elastic`, `grafana`, `honeycomb`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. + v2, elastic, grafana, honeycomb, jira, kosli, last9, logdna, msteams, new-relic-apm, pagerduty, signalfx, slack, and splunk. A change in this field will force the destruction of the existing resource and the creation of a new one. + The integration key. Supported integration keys are `chronosphere`, `cloudtrail`, `datadog`, `dynatrace`, `dynatrace-v2`, `elastic`, `grafana`, `honeycomb`, `jira`, `kosli`, `last9`, `logdna`, `msteams`, `new-relic-apm`, `pagerduty`, `signalfx`, `slack`, and `splunk`. A change in this field will force the destruction of the existing resource and the creation of a new one. type: string name: description: |- diff --git a/package/crds/flag.launchdarkly.com_featureflags.yaml b/package/crds/flag.launchdarkly.com_featureflags.yaml index ad09fb1..87d2a06 100644 --- a/package/crds/flag.launchdarkly.com_featureflags.yaml +++ b/package/crds/flag.launchdarkly.com_featureflags.yaml @@ -141,6 +141,11 @@ spec: type: integer type: object type: array + deprecated: + description: Specifies whether the flag is deprecated or not. + Note that you cannot create a new flag that is deprecated, but + can update a flag to be deprecated. + type: boolean description: description: |- (String) The feature flag's description. @@ -286,6 +291,14 @@ spec: type: string type: object type: array + viewKeys: + description: |- + (Set of String) A set of view keys to link this flag to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same flag. Choose one approach per resource. + A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Choose one approach per resource. + items: + type: string + type: array + x-kubernetes-list-type: set type: object initProvider: description: |- @@ -366,6 +379,11 @@ spec: type: integer type: object type: array + deprecated: + description: Specifies whether the flag is deprecated or not. + Note that you cannot create a new flag that is deprecated, but + can update a flag to be deprecated. + type: boolean description: description: |- (String) The feature flag's description. @@ -511,6 +529,14 @@ spec: type: string type: object type: array + viewKeys: + description: |- + (Set of String) A set of view keys to link this flag to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same flag. Choose one approach per resource. + A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Choose one approach per resource. + items: + type: string + type: array + x-kubernetes-list-type: set type: object managementPolicies: default: @@ -682,6 +708,11 @@ spec: type: integer type: object type: array + deprecated: + description: Specifies whether the flag is deprecated or not. + Note that you cannot create a new flag that is deprecated, but + can update a flag to be deprecated. + type: boolean description: description: |- (String) The feature flag's description. @@ -756,6 +787,14 @@ spec: type: string type: object type: array + viewKeys: + description: |- + (Set of String) A set of view keys to link this flag to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same flag. Choose one approach per resource. + A set of view keys to link this flag to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this flag will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same flag. Choose one approach per resource. + items: + type: string + type: array + x-kubernetes-list-type: set type: object conditions: description: Conditions of the resource. diff --git a/package/crds/project.launchdarkly.com_environmentsegments.yaml b/package/crds/project.launchdarkly.com_environmentsegments.yaml index b70a837..34d1a34 100644 --- a/package/crds/project.launchdarkly.com_environmentsegments.yaml +++ b/package/crds/project.launchdarkly.com_environmentsegments.yaml @@ -385,6 +385,14 @@ spec: (String) For Big Segments, the targeted context kind. If this attribute is not specified it will default to user. A change in this field will force the destruction of the existing resource and the creation of a new one. For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one. type: string + viewKeys: + description: |- + (Set of String) A set of view keys to link this segment to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same segment. Choose one approach per resource. + A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Choose one approach per resource. + items: + type: string + type: array + x-kubernetes-list-type: set type: object initProvider: description: |- @@ -710,6 +718,14 @@ spec: (String) For Big Segments, the targeted context kind. If this attribute is not specified it will default to user. A change in this field will force the destruction of the existing resource and the creation of a new one. For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one. type: string + viewKeys: + description: |- + (Set of String) A set of view keys to link this segment to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same segment. Choose one approach per resource. + A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Choose one approach per resource. + items: + type: string + type: array + x-kubernetes-list-type: set type: object managementPolicies: default: @@ -981,6 +997,14 @@ spec: (String) For Big Segments, the targeted context kind. If this attribute is not specified it will default to user. A change in this field will force the destruction of the existing resource and the creation of a new one. For Big Segments, the targeted context kind. If this attribute is not specified it will default to `user`. A change in this field will force the destruction of the existing resource and the creation of a new one. type: string + viewKeys: + description: |- + (Set of String) A set of view keys to link this segment to. This is an alternative to using the launchdarkly_view_links resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set view_keys = []. Simply removing the field from your configuration will leave existing associations unchanged. Important: Avoid using both view_keys and launchdarkly_view_links to manage the same segment. Choose one approach per resource. + A set of view keys to link this segment to. This is an alternative to using the `launchdarkly_view_links` resource for managing view associations. When set, this segment will be linked to the specified views. To explicitly remove all view associations, set `view_keys = []`. Simply removing the field from your configuration will leave existing associations unchanged. **Important**: Avoid using both `view_keys` and `launchdarkly_view_links` to manage the same segment. Choose one approach per resource. + items: + type: string + type: array + x-kubernetes-list-type: set type: object conditions: description: Conditions of the resource. diff --git a/package/crds/project.launchdarkly.com_projects.yaml b/package/crds/project.launchdarkly.com_projects.yaml index 842668f..b5904d4 100644 --- a/package/crds/project.launchdarkly.com_projects.yaml +++ b/package/crds/project.launchdarkly.com_projects.yaml @@ -216,6 +216,16 @@ spec: (String) The name of the environment. The project's name. type: string + requireViewAssociationForNewFlags: + description: |- + (Boolean) Whether new flags created in this project must be associated with at least one view. + Whether new flags created in this project must be associated with at least one view. + type: boolean + requireViewAssociationForNewSegments: + description: |- + (Boolean) Whether new segments created in this project must be associated with at least one view. + Whether new segments created in this project must be associated with at least one view. + type: boolean tags: description: |- (Set of String) Tags associated with your resource. @@ -380,6 +390,16 @@ spec: (String) The name of the environment. The project's name. type: string + requireViewAssociationForNewFlags: + description: |- + (Boolean) Whether new flags created in this project must be associated with at least one view. + Whether new flags created in this project must be associated with at least one view. + type: boolean + requireViewAssociationForNewSegments: + description: |- + (Boolean) Whether new segments created in this project must be associated with at least one view. + Whether new segments created in this project must be associated with at least one view. + type: boolean tags: description: |- (Set of String) Tags associated with your resource. @@ -638,6 +658,16 @@ spec: (String) The name of the environment. The project's name. type: string + requireViewAssociationForNewFlags: + description: |- + (Boolean) Whether new flags created in this project must be associated with at least one view. + Whether new flags created in this project must be associated with at least one view. + type: boolean + requireViewAssociationForNewSegments: + description: |- + (Boolean) Whether new segments created in this project must be associated with at least one view. + Whether new segments created in this project must be associated with at least one view. + type: boolean tags: description: |- (Set of String) Tags associated with your resource.