From 85e4e57ae3c7ce26a2006ef85da09bed22bf8ab6 Mon Sep 17 00:00:00 2001 From: stack72 Date: Thu, 7 Jul 2022 13:49:41 +0100 Subject: [PATCH] Upgrade to v2.2.0 of the Fastly Terraform Provider Fixes: #168 Fixes: #174 Fixes: #175 Please note, the following breaking changes: healthchecks, directors and vclSettings have been removed from fastly.serviceCompute --- .github/workflows/main.yml | 1 + .github/workflows/master.yml | 1 + .github/workflows/run-acceptance-tests.yml | 1 + .goreleaser.prerelease.yml | 2 +- .goreleaser.yml | 2 +- Makefile | 6 +- examples/go.mod | 135 ++++- examples/go.sum | 26 - .../cmd/pulumi-resource-fastly/generate.go | 15 +- provider/cmd/pulumi-resource-fastly/main.go | 10 +- .../pulumi-resource-fastly/schema-embed.json | 1 + .../cmd/pulumi-resource-fastly/schema.json | 488 +++++++---------- provider/cmd/pulumi-tfgen-fastly/main.go | 4 +- provider/go.mod | 192 ++++++- provider/go.sum | 18 +- provider/resources.go | 4 +- sdk/dotnet/Config/Config.cs | 3 +- sdk/dotnet/GetServices.cs | 51 ++ .../Inputs/ServiceComputeDirectorArgs.cs | 67 --- .../Inputs/ServiceComputeDirectorGetArgs.cs | 67 --- .../Inputs/ServiceComputeHealthcheckArgs.cs | 85 --- .../ServiceComputeHealthcheckGetArgs.cs | 85 --- sdk/dotnet/Outputs/GetServicesDetailResult.cs | 56 ++ sdk/dotnet/Outputs/ServiceComputeDirector.cs | 70 --- .../Outputs/ServiceComputeHealthcheck.cs | 98 ---- sdk/dotnet/Provider.cs | 3 +- sdk/dotnet/ServiceAuthorization.cs | 170 ++++++ sdk/dotnet/ServiceCompute.cs | 110 ---- sdk/dotnet/ServiceVcl.cs | 299 ----------- sdk/dotnet/go.mod | 3 + sdk/go/fastly/config/config.go | 3 +- sdk/go/fastly/getFastlyIpRanges.go | 4 +- sdk/go/fastly/getServices.go | 28 + sdk/go/fastly/getTlsActivation.go | 2 +- sdk/go/fastly/getTlsCertificate.go | 2 +- sdk/go/fastly/getTlsCertificateIds.go | 2 +- sdk/go/fastly/getTlsConfiguration.go | 2 +- sdk/go/fastly/getTlsConfigurationIds.go | 2 +- sdk/go/fastly/getTlsDomain.go | 2 +- sdk/go/fastly/getTlsPlatformCertificate.go | 2 +- sdk/go/fastly/getTlsPlatformCertificateIds.go | 2 +- sdk/go/fastly/getTlsPrivateKey.go | 2 +- sdk/go/fastly/getTlsPrivateKeyIds.go | 2 +- sdk/go/fastly/getTlsSubscription.go | 2 +- sdk/go/fastly/init.go | 7 + sdk/go/fastly/provider.go | 6 +- sdk/go/fastly/pulumiTypes.go | 489 +++++------------- sdk/go/fastly/serviceAuthorization.go | 283 ++++++++++ sdk/go/fastly/serviceCompute.go | 60 +-- sdk/go/fastly/serviceVcl.go | 291 ----------- sdk/go/fastly/tlsActivation.go | 2 +- sdk/go/fastly/tlsCertificate.go | 2 +- sdk/go/fastly/tlsPlatformCertificate.go | 2 +- sdk/go/fastly/tlsPrivateKey.go | 2 +- sdk/go/fastly/user.go | 2 +- sdk/nodejs/config/vars.ts | 3 +- sdk/nodejs/getServices.ts | 37 ++ sdk/nodejs/go.mod | 3 + sdk/nodejs/index.ts | 6 + sdk/nodejs/provider.ts | 3 +- sdk/nodejs/serviceAuthorization.ts | 150 ++++++ sdk/nodejs/serviceCompute.ts | 66 --- sdk/nodejs/serviceVcl.ts | 6 +- sdk/nodejs/tsconfig.json | 2 + sdk/nodejs/types/input.ts | 79 +-- sdk/nodejs/types/output.ts | 93 +--- sdk/python/go.mod | 3 + sdk/python/pulumi_fastly/__init__.py | 10 + sdk/python/pulumi_fastly/_inputs.py | 299 ----------- sdk/python/pulumi_fastly/config/__init__.pyi | 3 +- sdk/python/pulumi_fastly/config/vars.py | 3 +- sdk/python/pulumi_fastly/get_services.py | 84 +++ sdk/python/pulumi_fastly/outputs.py | 316 +++-------- sdk/python/pulumi_fastly/provider.py | 9 +- .../pulumi_fastly/service_authorization.py | 300 +++++++++++ sdk/python/pulumi_fastly/service_compute.py | 256 --------- sdk/python/pulumi_fastly/service_vcl.py | 370 ------------- 77 files changed, 2025 insertions(+), 3352 deletions(-) create mode 100644 provider/cmd/pulumi-resource-fastly/schema-embed.json create mode 100644 sdk/dotnet/GetServices.cs delete mode 100644 sdk/dotnet/Inputs/ServiceComputeDirectorArgs.cs delete mode 100644 sdk/dotnet/Inputs/ServiceComputeDirectorGetArgs.cs delete mode 100644 sdk/dotnet/Inputs/ServiceComputeHealthcheckArgs.cs delete mode 100644 sdk/dotnet/Inputs/ServiceComputeHealthcheckGetArgs.cs create mode 100644 sdk/dotnet/Outputs/GetServicesDetailResult.cs delete mode 100644 sdk/dotnet/Outputs/ServiceComputeDirector.cs delete mode 100644 sdk/dotnet/Outputs/ServiceComputeHealthcheck.cs create mode 100644 sdk/dotnet/ServiceAuthorization.cs create mode 100644 sdk/dotnet/go.mod create mode 100644 sdk/go/fastly/getServices.go create mode 100644 sdk/go/fastly/serviceAuthorization.go create mode 100644 sdk/nodejs/getServices.ts create mode 100644 sdk/nodejs/go.mod create mode 100644 sdk/nodejs/serviceAuthorization.ts create mode 100644 sdk/python/go.mod create mode 100644 sdk/python/pulumi_fastly/get_services.py create mode 100644 sdk/python/pulumi_fastly/service_authorization.py diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 69f222ba..242e6a9b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,6 +12,7 @@ env: PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} TRAVIS_OS_NAME: linux + VERSION_PREFIX: 5.0.0 jobs: build_sdk: name: build_sdk diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 9f1f3d93..75e16955 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -12,6 +12,7 @@ env: PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} TRAVIS_OS_NAME: linux + VERSION_PREFIX: 5.0.0 jobs: build_sdk: name: build_sdk diff --git a/.github/workflows/run-acceptance-tests.yml b/.github/workflows/run-acceptance-tests.yml index cf283a03..0cd712da 100644 --- a/.github/workflows/run-acceptance-tests.yml +++ b/.github/workflows/run-acceptance-tests.yml @@ -13,6 +13,7 @@ env: PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} TRAVIS_OS_NAME: linux + VERSION_PREFIX: 5.0.0 jobs: build_sdk: if: github.event_name == 'repository_dispatch' || diff --git a/.goreleaser.prerelease.yml b/.goreleaser.prerelease.yml index 2fc1326d..27bea0ba 100644 --- a/.goreleaser.prerelease.yml +++ b/.goreleaser.prerelease.yml @@ -26,7 +26,7 @@ builds: - linux ignore: [] ldflags: - - -X github.com/pulumi/pulumi-fastly/provider/v4/pkg/version.Version={{.Tag}} + - -X github.com/pulumi/pulumi-fastly/provider/v5/pkg/version.Version={{.Tag}} main: ./cmd/pulumi-resource-fastly/ changelog: skip: true diff --git a/.goreleaser.yml b/.goreleaser.yml index bb11ae5e..598d6ed3 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -26,7 +26,7 @@ builds: - linux ignore: [] ldflags: - - -X github.com/pulumi/pulumi-fastly/provider/v4/pkg/version.Version={{.Tag}} + - -X github.com/pulumi/pulumi-fastly/provider/v5/pkg/version.Version={{.Tag}} main: ./cmd/pulumi-resource-fastly/ changelog: filters: diff --git a/Makefile b/Makefile index 46ba79cd..9154e53b 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ PACK := fastly ORG := pulumi PROJECT := github.com/$(ORG)/pulumi-$(PACK) -PROVIDER_PATH := provider/v4 +PROVIDER_PATH := provider/v5 VERSION_PATH := $(PROVIDER_PATH)/pkg/version.Version TFGEN := pulumi-tfgen-$(PACK) PROVIDER := pulumi-resource-$(PACK) @@ -78,7 +78,7 @@ clean:: install_plugins:: [ -x $(shell which pulumi) ] || curl -fsSL https://get.pulumi.com | sh - pulumi plugin install resource aws 4.0.0 + pulumi plugin install resource aws 5.0.0 pulumi plugin install resource tls 4.0.0 install_dotnet_sdk:: @@ -97,4 +97,4 @@ install_sdks:: install_dotnet_sdk install_python_sdk install_nodejs_sdk test:: cd examples && go test -v -tags=all -parallel $(TESTPARALLELISM) -timeout 2h -.PHONY:: development build tfgen provider build_sdks build_nodejs build_python build_go build_dotnet lint_provider cleanup help clean install_plugins install_dotnet_sdk install_python_sdk install_go_sdk install_nodejs_sdk install_sdks test \ No newline at end of file +.PHONY:: development build tfgen provider build_sdks build_nodejs build_python build_go build_dotnet lint_provider cleanup help clean install_plugins install_dotnet_sdk install_python_sdk install_go_sdk install_nodejs_sdk install_sdks test diff --git a/examples/go.mod b/examples/go.mod index 470d29e3..e89ca696 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -1,5 +1,136 @@ -module github.com/pulumi/pulumi-fastly/examples/v3 +module github.com/pulumi/pulumi-fastly/examples/v5 -go 1.16 +go 1.18 require github.com/pulumi/pulumi/pkg/v3 v3.17.0 + +require ( + cloud.google.com/go v0.81.0 // indirect + cloud.google.com/go/logging v1.0.0 // indirect + cloud.google.com/go/storage v1.15.0 // indirect + github.com/Azure/azure-pipeline-go v0.2.3 // indirect + github.com/Azure/azure-sdk-for-go v54.0.0+incompatible // indirect + github.com/Azure/azure-storage-blob-go v0.13.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.18 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.7 // indirect + github.com/Azure/go-autorest/autorest/azure/cli v0.4.2 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/agext/levenshtein v1.2.1 // indirect + github.com/apparentlymart/go-textseg v1.0.0 // indirect + github.com/aws/aws-sdk-go v1.38.35 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/cheggaaa/pb v1.0.18 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/djherbis/times v1.2.0 // indirect + github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/emirpasic/gods v1.12.0 // indirect + github.com/form3tech-oss/jwt-go v3.2.2+incompatible // indirect + github.com/gofrs/flock v0.7.1 // indirect + github.com/gofrs/uuid v3.3.0+incompatible // indirect + github.com/gogo/protobuf v1.3.1 // indirect + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/google/go-cmp v0.5.5 // indirect + github.com/google/go-querystring v1.0.0 // indirect + github.com/google/uuid v1.2.0 // indirect + github.com/google/wire v0.5.0 // indirect + github.com/googleapis/gax-go/v2 v2.0.5 // indirect + github.com/gorilla/mux v1.7.4 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.0 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/hcl/v2 v2.3.0 // indirect + github.com/hashicorp/vault/api v1.1.0 // indirect + github.com/hashicorp/vault/sdk v0.2.0 // indirect + github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/json-iterator/go v1.1.9 // indirect + github.com/jstemmer/go-junit-report v0.9.1 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect + github.com/mattn/go-colorable v0.1.6 // indirect + github.com/mattn/go-ieproxy v0.0.1 // indirect + github.com/mattn/go-isatty v0.0.12 // indirect + github.com/mattn/go-runewidth v0.0.8 // indirect + github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.0 // indirect + github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/opentracing/basictracer-go v1.0.0 // indirect + github.com/opentracing/opentracing-go v1.1.0 // indirect + github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect + github.com/pierrec/lz4 v2.6.0+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pulumi/pulumi/sdk/v3 v3.17.0 // indirect + github.com/rjeczalik/notify v0.9.2 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect + github.com/sergi/go-diff v1.1.0 // indirect + github.com/sirupsen/logrus v1.4.2 // indirect + github.com/spf13/cobra v1.0.0 // indirect + github.com/spf13/pflag v1.0.3 // indirect + github.com/src-d/gcfg v1.4.0 // indirect + github.com/stretchr/testify v1.6.1 // indirect + github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 // indirect + github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect + github.com/uber/jaeger-client-go v2.22.1+incompatible // indirect + github.com/uber/jaeger-lib v2.2.0+incompatible // indirect + github.com/xanzy/ssh-agent v0.2.1 // 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/zclconf/go-cty v1.3.1 // indirect + go.opencensus.io v0.23.0 // indirect + go.uber.org/atomic v1.7.0 // indirect + gocloud.dev v0.23.0 // indirect + gocloud.dev/secrets/hashivault v0.23.0 // indirect + golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf // indirect + golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 // indirect + golang.org/x/mod v0.4.2 // indirect + golang.org/x/net v0.0.0-20210505214959-0714010a04ed // indirect + golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c // indirect + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 // indirect + golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 // indirect + golang.org/x/text v0.3.6 // indirect + golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect + golang.org/x/tools v0.1.0 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/api v0.46.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20210506142907-4a47615972c2 // indirect + google.golang.org/grpc v1.37.0 // indirect + google.golang.org/protobuf v1.26.0 // indirect + gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f // indirect + gopkg.in/square/go-jose.v2 v2.5.1 // indirect + gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect + gopkg.in/src-d/go-git.v4 v4.13.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.2.8 // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect +) diff --git a/examples/go.sum b/examples/go.sum index 99325a31..fe73a9cd 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -100,13 +100,11 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/GoogleCloudPlatform/cloudsql-proxy v1.22.0/go.mod h1:mAm5O/zik2RFmcpigNjg6nMotDL8ZXJaxKzgGVcSMFA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= @@ -155,7 +153,6 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= @@ -207,7 +204,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= @@ -217,7 +213,6 @@ github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8 github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813/go.mod h1:P+oSoE9yhSRvsmYyZsshflcR6ePWYLql6UU1amW13IM= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= @@ -234,7 +229,6 @@ github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= @@ -449,7 +443,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= @@ -472,7 +465,6 @@ github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0= @@ -505,11 +497,8 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxschmitt/golang-combinations v1.0.0/go.mod h1:RbMhWvfCelHR6WROvT2bVfxJvZHoEvBj71SKe+H0MYU= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -583,21 +572,16 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil v3.21.7+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= @@ -621,8 +605,6 @@ github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 h1:9VTskZOIRf2vKF3UL8TuWElry5pgUpV1tFSe/e/0m/E= github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= -github.com/tklauser/go-sysconf v0.3.8/go.mod h1:z4zYWRS+X53WUKtBcmDg1comV3fPhdQnzasnIHUoLDU= -github.com/tklauser/numcpus v0.2.3/go.mod h1:vpEPS/JC+oZGGQ/My/vJnNsvMDQL6PwOqt8dsCw5j+E= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= @@ -689,7 +671,6 @@ golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -873,8 +854,6 @@ golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 h1:c8PlLMqBbOHoqtjteWm5/kbe6rNY2pbRfbIMVnepueo= golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -939,7 +918,6 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc 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-20200608174601-1b747fd94509/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= @@ -1021,7 +999,6 @@ google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfG 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-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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= @@ -1090,7 +1067,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= @@ -1130,10 +1106,8 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= -pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= 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= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:L5q+DGLGOQFpo1snNEkLOJT2d1YTW66rWNzatr3He1k= diff --git a/provider/cmd/pulumi-resource-fastly/generate.go b/provider/cmd/pulumi-resource-fastly/generate.go index a548fda8..414389e2 100644 --- a/provider/cmd/pulumi-resource-fastly/generate.go +++ b/provider/cmd/pulumi-resource-fastly/generate.go @@ -12,13 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build ignore +//go:build ignore package main import ( "encoding/json" - "fmt" + "errors" + "io/fs" "io/ioutil" "log" "os" @@ -49,9 +50,13 @@ func main() { log.Fatalf("cannot reserialize schema: %v", err) } - err = ioutil.WriteFile("./schema.go", []byte(fmt.Sprintf(`package main -var pulumiSchema = %#v -`, versionedContents)), 0600) + // Clean up schema.go as it may be present & gitignored and tolerate an error if the file isn't present. + err = os.Remove("./schema.go") + if err != nil && !errors.Is(err, fs.ErrNotExist) { + log.Fatal(err) + } + + err = ioutil.WriteFile("./schema-embed.json", versionedContents, 0600) if err != nil { log.Fatal(err) } diff --git a/provider/cmd/pulumi-resource-fastly/main.go b/provider/cmd/pulumi-resource-fastly/main.go index b515c57f..2d2bf3f7 100644 --- a/provider/cmd/pulumi-resource-fastly/main.go +++ b/provider/cmd/pulumi-resource-fastly/main.go @@ -17,12 +17,16 @@ package main import ( - "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" + _ "embed" - fastly "github.com/pulumi/pulumi-fastly/provider/v4" - "github.com/pulumi/pulumi-fastly/provider/v4/pkg/version" + fastly "github.com/pulumi/pulumi-fastly/provider/v5" + "github.com/pulumi/pulumi-fastly/provider/v5/pkg/version" + "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" ) +//go:embed schema-embed.json +var pulumiSchema []byte + func main() { // Modify the path to point to the new provider tfbridge.Main("fastly", version.Version, fastly.Provider(), pulumiSchema) diff --git a/provider/cmd/pulumi-resource-fastly/schema-embed.json b/provider/cmd/pulumi-resource-fastly/schema-embed.json new file mode 100644 index 00000000..eb6c7e56 --- /dev/null +++ b/provider/cmd/pulumi-resource-fastly/schema-embed.json @@ -0,0 +1 @@ +{"name":"fastly","version":"5.0.0-alpha.1654086403+d249f3e3.dirty","description":"A Pulumi package for creating and managing fastly cloud resources.","keywords":["pulumi","fastly"],"homepage":"https://pulumi.io","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`fastly` Terraform Provider](https://github.com/fastly/terraform-provider-fastly).","repository":"https://github.com/pulumi/pulumi-fastly","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"config":{"variables":{"apiKey":{"type":"string","description":"Fastly API Key from https://app.fastly.com/#account\n"},"baseUrl":{"type":"string","description":"Fastly API URL\n"},"forceHttp2":{"type":"boolean","description":"Set this to `true` to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to\n`api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS\nhandshakes. Default: `false`\n"},"noAuth":{"type":"boolean","description":"Set to `true` if your configuration only consumes data sources that do not require authentication, such as\n`fastly_ip_ranges`\n"}}},"types":{"fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry":{"properties":{"comment":{"type":"string","description":"A personal freeform descriptive note\n","language":{"python":{"mapCase":false}}},"id":{"type":"string","description":"The unique ID of the entry\n","language":{"python":{"mapCase":false}}},"ip":{"type":"string","description":"An IP address that is the focus for the ACL\n","language":{"python":{"mapCase":false}}},"negated":{"type":"boolean","description":"A boolean that will negate the match if true\n","language":{"python":{"mapCase":false}}},"subnet":{"type":"string","description":"An optional subnet mask applied to the IP address\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["ip"],"language":{"nodejs":{"requiredOutputs":["id","ip"]}}},"fastly:index/ServiceComputeBackend:ServiceComputeBackend":{"properties":{"address":{"type":"string","description":"An IPv4, hostname, or IPv6 address for the Backend\n","language":{"python":{"mapCase":false}}},"autoLoadbalance":{"type":"boolean","description":"Denotes if this Backend should be included in the pool of backends that requests are load balanced against. Default `false`\n","language":{"python":{"mapCase":false}}},"betweenBytesTimeout":{"type":"integer","description":"How long to wait between bytes in milliseconds. Default `10000`\n","language":{"python":{"mapCase":false}}},"connectTimeout":{"type":"integer","description":"How long to wait for a timeout in milliseconds. Default `1000`\n","language":{"python":{"mapCase":false}}},"errorThreshold":{"type":"integer","description":"Number of errors to allow before the Backend is marked as down. Default `0`\n","language":{"python":{"mapCase":false}}},"firstByteTimeout":{"type":"integer","description":"How long to wait for the first bytes in milliseconds. Default `15000`\n","language":{"python":{"mapCase":false}}},"healthcheck":{"type":"string","description":"Name of a defined `healthcheck` to assign to this backend\n","language":{"python":{"mapCase":false}}},"maxConn":{"type":"integer","description":"Maximum number of connections for this Backend. Default `200`\n","language":{"python":{"mapCase":false}}},"maxTlsVersion":{"type":"string","description":"Maximum allowed TLS version on SSL connections to this backend.\n","language":{"python":{"mapCase":false}}},"minTlsVersion":{"type":"string","description":"Minimum allowed TLS version on SSL connections to this backend.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"Name for this Backend. Must be unique to this Service. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"overrideHost":{"type":"string","description":"The hostname to override the Host header\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port number on which the Backend responds. Default `80`\n","language":{"python":{"mapCase":false}}},"shield":{"type":"string","description":"The POP of the shield designated to reduce inbound load. Valid values for `shield` are included in the `GET /datacenters` API response\n","language":{"python":{"mapCase":false}}},"sslCaCert":{"type":"string","description":"CA certificate attached to origin.\n","language":{"python":{"mapCase":false}}},"sslCertHostname":{"type":"string","description":"Overrides ssl_hostname, but only for cert verification. Does not affect SNI at all\n","language":{"python":{"mapCase":false}}},"sslCheckCert":{"type":"boolean","description":"Be strict about checking SSL certs. Default `true`\n","language":{"python":{"mapCase":false}}},"sslCiphers":{"type":"string","description":"Cipher list consisting of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used.\n","language":{"python":{"mapCase":false}}},"sslClientCert":{"type":"string","description":"Client certificate attached to origin. Used when connecting to the backend\n","language":{"python":{"mapCase":false}}},"sslClientKey":{"type":"string","description":"Client key attached to origin. Used when connecting to the backend\n","language":{"python":{"mapCase":false}}},"sslHostname":{"type":"string","description":"Used for both SNI during the TLS handshake and to validate the cert\n","deprecationMessage":"Use ssl_cert_hostname and ssl_sni_hostname instead.","language":{"python":{"mapCase":false}}},"sslSniHostname":{"type":"string","description":"Overrides ssl_hostname, but only for SNI in the handshake. Does not affect cert validation at all\n","language":{"python":{"mapCase":false}}},"useSsl":{"type":"boolean","description":"Whether or not to use SSL to reach the Backend. Default `false`\n","language":{"python":{"mapCase":false}}},"weight":{"type":"integer","description":"The [portion of traffic](https://docs.fastly.com/en/guides/load-balancing-configuration#how-weight-affects-load-balancing) to send to this Backend. Each Backend receives weight / total of the traffic. Default `100`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name"]},"fastly:index/ServiceComputeDictionary:ServiceComputeDictionary":{"properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary\n","language":{"python":{"mapCase":false}}},"forceDestroy":{"type":"boolean","description":"Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this dictionary. It is important to note that changing this attribute will delete and recreate the dictionary, and discard the current items in the dictionary\n","language":{"python":{"mapCase":false}}},"writeOnly":{"type":"boolean","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["dictionaryId","name"]}}},"fastly:index/ServiceComputeDomain:ServiceComputeDomain":{"properties":{"comment":{"type":"string","description":"An optional comment about the Domain.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The domain that this Service will respond to. It is important to note that changing this attribute will delete and recreate the resource.\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"]},"fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery":{"properties":{"dataset":{"type":"string","description":"The ID of your BigQuery dataset\n","language":{"python":{"mapCase":false}}},"email":{"type":"string","description":"The email for the service account with write access to your BigQuery dataset. If not provided, this will be pulled from a `FASTLY_BQ_EMAIL` environment variable\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this BigQuery logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"projectId":{"type":"string","description":"The ID of your GCP project\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The secret key associated with the service account that has write access to your BigQuery table. If not provided, this will be pulled from the `FASTLY_BQ_SECRET_KEY` environment variable. Typical format for this is a private key in a string with newlines\n","language":{"python":{"mapCase":false}}},"table":{"type":"string","description":"The ID of your BigQuery table\n","language":{"python":{"mapCase":false}}},"template":{"type":"string","description":"BigQuery table name suffix template\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["dataset","email","name","projectId","secretKey","table"]},"fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage":{"properties":{"accountName":{"type":"string","description":"The unique Azure Blob Storage namespace in which your data objects are stored\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"container":{"type":"string","description":"The name of the Azure Blob Storage container in which to store logs\n","language":{"python":{"mapCase":false}}},"fileMaxBytes":{"type":"integer","description":"Maximum size of an uploaded log file, if non-zero.\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify the Azure Blob Storage endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload logs to. Must end with a trailing slash. If this field is left empty, the files will be saved in the container's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred in seconds. Default `3600`\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"sasToken":{"type":"string","description":"The Azure shared access signature providing write access to the blob service objects. Be sure to update your token before it expires or the logging functionality will not work\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accountName","container","name","sasToken"]},"fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile":{"properties":{"accessKey":{"type":"string","description":"Your Cloud File account access key\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of your Cloud Files container\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Rackspace Cloud Files logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload logs to\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region to stream logs to. One of: DFW (Dallas), ORD (Chicago), IAD (Northern Virginia), LON (London), SYD (Sydney), HKG (Hong Kong)\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for your Cloud Files account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accessKey","bucketName","name","user"]},"fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog":{"properties":{"name":{"type":"string","description":"The unique name of the Datadog logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The API key from your Datadog account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean":{"properties":{"accessKey":{"type":"string","description":"Your DigitalOcean Spaces account access key\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of the DigitalOcean Space\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"domain":{"type":"string","description":"The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the DigitalOcean Spaces logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload logs to\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"Your DigitalOcean Spaces account secret key\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accessKey","bucketName","name","secretKey"]},"fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch":{"properties":{"index":{"type":"string","description":"The name of the Elasticsearch index to send documents (logs) to\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Elasticsearch logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"BasicAuth password for Elasticsearch\n","language":{"python":{"mapCase":false}}},"pipeline":{"type":"string","description":"The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n","language":{"python":{"mapCase":false}}},"requestMaxBytes":{"type":"integer","description":"The maximum number of logs sent in one request. Defaults to `0` for unbounded\n","language":{"python":{"mapCase":false}}},"requestMaxEntries":{"type":"integer","description":"The maximum number of bytes sent in one request. Defaults to `0` for unbounded\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name (CN) or a Subject Alternative Name (SAN)\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The Elasticsearch URL to stream logs to\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"BasicAuth username for Elasticsearch\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["index","name","url"]},"fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp":{"properties":{"address":{"type":"string","description":"The FTP address to stream logs to\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the FTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"The password for the server (for anonymous use an email address)\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default `3600`)\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port number. Default: `21`\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for the server (can be `anonymous`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name","password","path","user"]},"fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc":{"properties":{"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this GCS endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default 3600)\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The secret key associated with the target gcs bucket on your account. You may optionally provide this secret via an environment variable, `FASTLY_GCS_SECRET_KEY`. A typical format for the key is PEM format, containing actual newline characters where required\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The `client_email` field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GCS_EMAIL`.\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub":{"properties":{"name":{"type":"string","description":"The unique name of the Google Cloud Pub/Sub logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"projectId":{"type":"string","description":"The ID of your Google Cloud Platform project\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"Your Google Cloud Platform account secret key. The `private_key` field in your service account authentication JSON. You may optionally provide this secret via an environment variable, `FASTLY_GOOGLE_PUBSUB_SECRET_KEY`.\n","language":{"python":{"mapCase":false}}},"topic":{"type":"string","description":"The Google Cloud Pub/Sub topic to which logs will be published\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The `client_email` field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GOOGLE_PUBSUB_EMAIL`.\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","projectId","secretKey","topic","user"]},"fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku":{"properties":{"name":{"type":"string","description":"The unique name of the Heroku logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The token to use for authentication (https://www.heroku.com/docs/customer-token-authentication-token/)\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The URL to stream logs to\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb":{"properties":{"dataset":{"type":"string","description":"The Honeycomb Dataset you want to log to\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Honeycomb logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The Write Key from the Account page of your Honeycomb account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["dataset","name","token"]},"fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp":{"properties":{"contentType":{"type":"string","description":"Value of the `Content-Type` header sent with the request\n","language":{"python":{"mapCase":false}}},"headerName":{"type":"string","description":"Custom header sent with the request\n","language":{"python":{"mapCase":false}}},"headerValue":{"type":"string","description":"Value of the custom header sent with the request\n","language":{"python":{"mapCase":false}}},"jsonFormat":{"type":"string","description":"Formats log entries as JSON. Can be either disabled (`0`), array of json (`1`), or newline delimited json (`2`)\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"method":{"type":"string","description":"HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the HTTPS logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"requestMaxBytes":{"type":"integer","description":"The maximum number of bytes sent in one request\n","language":{"python":{"mapCase":false}}},"requestMaxEntries":{"type":"integer","description":"The maximum number of logs sent in one request\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"URL that log data will be sent to. Must use the https protocol\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","url"]},"fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka":{"properties":{"authMethod":{"type":"string","description":"SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n","language":{"python":{"mapCase":false}}},"brokers":{"type":"string","description":"A comma-separated list of IP addresses or hostnames of Kafka brokers\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. One of: `gzip`, `snappy`, `lz4`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Kafka logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"parseLogKeyvals":{"type":"boolean","description":"Enables parsing of key=value tuples from the beginning of a logline, turning them into record headers\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"SASL Pass\n","language":{"python":{"mapCase":false}}},"requestMaxBytes":{"type":"integer","description":"Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n","language":{"python":{"mapCase":false}}},"requiredAcks":{"type":"string","description":"The Number of acknowledgements a leader must receive before a write is considered successful. One of: `1` (default) One server needs to respond. `0` No servers need to respond. `-1`\tWait for all in-sync replicas to respond\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n","language":{"python":{"mapCase":false}}},"topic":{"type":"string","description":"The Kafka topic to send logs to\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Can be either `true` or `false`\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"SASL User\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["brokers","name","topic"]},"fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese":{"properties":{"accessKey":{"type":"string","description":"The AWS access key to be used to write to the stream\n","language":{"python":{"mapCase":false}}},"iamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to Kinesis. Not required if `access_key` and `secret_key` are provided.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Kinesis logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The AWS region the stream resides in. (Default: `us-east-1`)\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The AWS secret access key to authenticate with\n","language":{"python":{"mapCase":false}}},"topic":{"type":"string","description":"The Kinesis stream name\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","topic"]},"fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry":{"properties":{"name":{"type":"string","description":"The unique name of the Logentries logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port number configured in Logentries\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"Use token based authentication (https://logentries.com/doc/input-token/)\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly":{"properties":{"name":{"type":"string","description":"The unique name of the Loggly logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The token to use for authentication (https://www.loggly.com/docs/customer-token-authentication-token/).\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle":{"properties":{"name":{"type":"string","description":"The unique name of the Log Shuttle logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The data authentication token associated with this endpoint\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"Your Log Shuttle endpoint URL\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic":{"properties":{"name":{"type":"string","description":"The unique name of the New Relic logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region that log data will be sent to. Default: `US`\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The Insert API key from the Account page of your New Relic account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack":{"properties":{"accessKey":{"type":"string","description":"Your OpenStack account access key\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of your OpenStack container\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the OpenStack logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default `3600`\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"Your OpenStack auth url\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for your OpenStack account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accessKey","bucketName","name","url","user"]},"fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail":{"properties":{"address":{"type":"string","description":"The address of the Papertrail endpoint\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Papertrail endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port associated with the address where the Papertrail endpoint can be accessed\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name","port"]},"fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3":{"properties":{"acl":{"type":"string","description":"The AWS [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl) to use for objects uploaded to the S3 bucket. Options are: `private`, `public-read`, `public-read-write`, `aws-exec-read`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"domain":{"type":"string","description":"If you created the S3 bucket outside of `us-east-1`, then specify the corresponding bucket endpoint. Example: `s3-us-west-2.amazonaws.com`\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the S3 logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default `3600`\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"redundancy":{"type":"string","description":"The S3 storage class (redundancy level). Should be one of: `standard`, `reduced_redundancy`, `standard_ia`, or `onezone_ia`\n","language":{"python":{"mapCase":false}}},"s3AccessKey":{"type":"string","description":"AWS Access Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This key will be not be encrypted. Not required if `iam_role` is provided. You can provide this key via an environment variable, `FASTLY_S3_ACCESS_KEY`\n","language":{"python":{"mapCase":false}}},"s3IamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to S3. Not required if `access_key` and `secret_key` are provided. You can provide this value via an environment variable, `FASTLY_S3_IAM_ROLE`\n","language":{"python":{"mapCase":false}}},"s3SecretKey":{"type":"string","description":"AWS Secret Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This secret will be not be encrypted. Not required if `iam_role` is provided. You can provide this secret via an environment variable, `FASTLY_S3_SECRET_KEY`\n","language":{"python":{"mapCase":false}}},"serverSideEncryption":{"type":"string","description":"Specify what type of server side encryption should be used. Can be either `AES256` or `aws:kms`\n","language":{"python":{"mapCase":false}}},"serverSideEncryptionKmsKeyId":{"type":"string","description":"Optional server-side KMS Key Id. Must be set if server*side*encryption is set to `aws:kms`\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr":{"properties":{"name":{"type":"string","description":"The unique name of the Scalyr logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The token to use for authentication (https://www.scalyr.com/keys)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp":{"properties":{"address":{"type":"string","description":"The SFTP address to stream logs to\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the SFTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"The password for the server. If both `password` and `secret_key` are passed, `secret_key` will be preferred\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port the SFTP service listens on. (Default: `22`)\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The SSH private key for the server. If both `password` and `secret_key` are passed, `secret_key` will be preferred\n","language":{"python":{"mapCase":false}}},"sshKnownHosts":{"type":"string","description":"A list of host keys for all hosts we can connect to over SFTP\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for the server\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name","path","sshKnownHosts","user"]},"fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk":{"properties":{"name":{"type":"string","description":"A unique name to identify the Splunk endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SPLUNK_CA_CERT`\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format.\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format.\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The Splunk token to be used for authentication\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The Splunk URL to stream logs to\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default: `false`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic":{"properties":{"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Sumologic endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The URL to Sumologic collector endpoint\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","url"]},"fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog":{"properties":{"address":{"type":"string","description":"A hostname or IPv4 address of the Syslog endpoint\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Syslog endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port associated with the address where the Syslog endpoint can be accessed. Default `514`\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CA_CERT`\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CLIENT_CERT`\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format. You can provide this key via an environment variable, `FASTLY_SYSLOG_CLIENT_KEY`\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"Whether to prepend each message with a specific token\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default `false`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name"]},"fastly:index/ServiceComputePackage:ServiceComputePackage":{"properties":{"filename":{"type":"string","description":"The path to the Wasm deployment package within your local filesystem\n","language":{"python":{"mapCase":false}}},"sourceCodeHash":{"type":"string","language":{"python":{"mapCase":false}}}},"type":"object","required":["filename"],"language":{"nodejs":{"requiredOutputs":["filename","sourceCodeHash"]}}},"fastly:index/ServiceVclAcl:ServiceVclAcl":{"properties":{"aclId":{"type":"string","description":"The ID of the ACL\n","language":{"python":{"mapCase":false}}},"forceDestroy":{"type":"boolean","description":"Allow the ACL to be deleted, even if it contains entries. Defaults to false.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this ACL. It is important to note that changing this attribute will delete and recreate the ACL, and discard the current items in the ACL\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["aclId","name"]}}},"fastly:index/ServiceVclBackend:ServiceVclBackend":{"properties":{"address":{"type":"string","description":"An IPv4, hostname, or IPv6 address for the Backend\n","language":{"python":{"mapCase":false}}},"autoLoadbalance":{"type":"boolean","description":"Denotes if this Backend should be included in the pool of backends that requests are load balanced against. Default `false`\n","language":{"python":{"mapCase":false}}},"betweenBytesTimeout":{"type":"integer","description":"How long to wait between bytes in milliseconds. Default `10000`\n","language":{"python":{"mapCase":false}}},"connectTimeout":{"type":"integer","description":"How long to wait for a timeout in milliseconds. Default `1000`\n","language":{"python":{"mapCase":false}}},"errorThreshold":{"type":"integer","description":"Number of errors to allow before the Backend is marked as down. Default `0`\n","language":{"python":{"mapCase":false}}},"firstByteTimeout":{"type":"integer","description":"How long to wait for the first bytes in milliseconds. Default `15000`\n","language":{"python":{"mapCase":false}}},"healthcheck":{"type":"string","description":"Name of a defined `healthcheck` to assign to this backend\n","language":{"python":{"mapCase":false}}},"maxConn":{"type":"integer","description":"Maximum number of connections for this Backend. Default `200`\n","language":{"python":{"mapCase":false}}},"maxTlsVersion":{"type":"string","description":"Maximum allowed TLS version on SSL connections to this backend.\n","language":{"python":{"mapCase":false}}},"minTlsVersion":{"type":"string","description":"Minimum allowed TLS version on SSL connections to this backend.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"Name for this Backend. Must be unique to this Service. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"overrideHost":{"type":"string","description":"The hostname to override the Host header\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port number on which the Backend responds. Default `80`\n","language":{"python":{"mapCase":false}}},"requestCondition":{"type":"string","description":"Name of a condition, which if met, will select this backend during a request.\n","language":{"python":{"mapCase":false}}},"shield":{"type":"string","description":"The POP of the shield designated to reduce inbound load. Valid values for `shield` are included in the `GET /datacenters` API response\n","language":{"python":{"mapCase":false}}},"sslCaCert":{"type":"string","description":"CA certificate attached to origin.\n","language":{"python":{"mapCase":false}}},"sslCertHostname":{"type":"string","description":"Overrides ssl_hostname, but only for cert verification. Does not affect SNI at all\n","language":{"python":{"mapCase":false}}},"sslCheckCert":{"type":"boolean","description":"Be strict about checking SSL certs. Default `true`\n","language":{"python":{"mapCase":false}}},"sslCiphers":{"type":"string","description":"Cipher list consisting of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used.\n","language":{"python":{"mapCase":false}}},"sslClientCert":{"type":"string","description":"Client certificate attached to origin. Used when connecting to the backend\n","language":{"python":{"mapCase":false}}},"sslClientKey":{"type":"string","description":"Client key attached to origin. Used when connecting to the backend\n","language":{"python":{"mapCase":false}}},"sslHostname":{"type":"string","description":"Used for both SNI during the TLS handshake and to validate the cert\n","deprecationMessage":"Use ssl_cert_hostname and ssl_sni_hostname instead.","language":{"python":{"mapCase":false}}},"sslSniHostname":{"type":"string","description":"Overrides ssl_hostname, but only for SNI in the handshake. Does not affect cert validation at all\n","language":{"python":{"mapCase":false}}},"useSsl":{"type":"boolean","description":"Whether or not to use SSL to reach the Backend. Default `false`\n","language":{"python":{"mapCase":false}}},"weight":{"type":"integer","description":"The [portion of traffic](https://docs.fastly.com/en/guides/load-balancing-configuration#how-weight-affects-load-balancing) to send to this Backend. Each Backend receives weight / total of the traffic. Default `100`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name"]},"fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting":{"properties":{"action":{"type":"string","description":"One of cache, pass, or restart, as defined on Fastly's documentation under \"[Caching action descriptions](https://docs.fastly.com/en/guides/controlling-caching#caching-action-descriptions)\"\n","language":{"python":{"mapCase":false}}},"cacheCondition":{"type":"string","description":"Name of already defined `condition` used to test whether this settings object should be used. This `condition` must be of type `CACHE`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"Unique name for this Cache Setting. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"staleTtl":{"type":"integer","description":"Max \"Time To Live\" for stale (unreachable) objects\n","language":{"python":{"mapCase":false}}},"ttl":{"type":"integer","description":"The Time-To-Live (TTL) for the object\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"]},"fastly:index/ServiceVclCondition:ServiceVclCondition":{"properties":{"name":{"type":"string","description":"The unique name for the condition. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"priority":{"type":"integer","description":"A number used to determine the order in which multiple conditions execute. Lower numbers execute first. Default `10`\n","language":{"python":{"mapCase":false}}},"statement":{"type":"string","description":"The statement used to determine if the condition is met\n","language":{"python":{"mapCase":false}}},"type":{"type":"string","description":"Type of condition, either `REQUEST` (req), `RESPONSE` (req, resp), or `CACHE` (req, beresp)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","statement","type"]},"fastly:index/ServiceVclDictionary:ServiceVclDictionary":{"properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary\n","language":{"python":{"mapCase":false}}},"forceDestroy":{"type":"boolean","description":"Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this dictionary. It is important to note that changing this attribute will delete and recreate the dictionary, and discard the current items in the dictionary\n","language":{"python":{"mapCase":false}}},"writeOnly":{"type":"boolean","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["dictionaryId","name"]}}},"fastly:index/ServiceVclDirector:ServiceVclDirector":{"properties":{"backends":{"type":"array","items":{"type":"string"},"description":"Names of defined backends to map the director to. Example: `[ \"origin1\", \"origin2\" ]`\n","language":{"python":{"mapCase":false}}},"comment":{"type":"string","description":"An optional comment about the Director\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"quorum":{"type":"integer","description":"Percentage of capacity that needs to be up for the director itself to be considered up. Default `75`\n","language":{"python":{"mapCase":false}}},"retries":{"type":"integer","description":"How many backends to search if it fails. Default `5`\n","language":{"python":{"mapCase":false}}},"shield":{"type":"string","description":"Selected POP to serve as a \"shield\" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response\n","language":{"python":{"mapCase":false}}},"type":{"type":"integer","description":"Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["backends","name"]},"fastly:index/ServiceVclDomain:ServiceVclDomain":{"properties":{"comment":{"type":"string","description":"An optional comment about the Domain.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The domain that this Service will respond to. It is important to note that changing this attribute will delete and recreate the resource.\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"]},"fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet":{"properties":{"name":{"type":"string","description":"A name that is unique across \"regular\" and \"dynamic\" VCL Snippet configuration blocks. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"priority":{"type":"integer","description":"Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to `100`\n","language":{"python":{"mapCase":false}}},"snippetId":{"type":"string","description":"The ID of the dynamic snippet\n","language":{"python":{"mapCase":false}}},"type":{"type":"string","description":"The location in generated VCL where the snippet should be placed (can be one of `init`, `recv`, `hash`, `hit`, `miss`, `pass`, `fetch`, `error`, `deliver`, `log` or `none`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","type"],"language":{"nodejs":{"requiredOutputs":["name","snippetId","type"]}}},"fastly:index/ServiceVclGzip:ServiceVclGzip":{"properties":{"cacheCondition":{"type":"string","description":"Name of already defined `condition` controlling when this gzip configuration applies. This `condition` must be of type `CACHE`. For detailed information about Conditionals, see [Fastly's Documentation on Conditionals](https://docs.fastly.com/en/guides/using-conditions)\n","language":{"python":{"mapCase":false}}},"contentTypes":{"type":"array","items":{"type":"string"},"description":"The content-type for each type of content you wish to have dynamically gzip'ed. Example: `[\"text/html\", \"text/css\"]`\n","language":{"python":{"mapCase":false}}},"extensions":{"type":"array","items":{"type":"string"},"description":"File extensions for each file type to dynamically gzip. Example: `[\"css\", \"js\"]`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A name to refer to this gzip condition. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"]},"fastly:index/ServiceVclHeader:ServiceVclHeader":{"properties":{"action":{"type":"string","description":"The Header manipulation action to take; must be one of `set`, `append`, `delete`, `regex`, or `regex_repeat`\n","language":{"python":{"mapCase":false}}},"cacheCondition":{"type":"string","description":"Name of already defined `condition` to apply. This `condition` must be of type `CACHE`\n","language":{"python":{"mapCase":false}}},"destination":{"type":"string","description":"The name of the header that is going to be affected by the Action\n","language":{"python":{"mapCase":false}}},"ignoreIfSet":{"type":"boolean","description":"Don't add the header if it is already. (Only applies to `set` action.). Default `false`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"Unique name for this header attribute. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"priority":{"type":"integer","description":"Lower priorities execute first. Default: `100`\n","language":{"python":{"mapCase":false}}},"regex":{"type":"string","description":"Regular expression to use (Only applies to `regex` and `regex_repeat` actions.)\n","language":{"python":{"mapCase":false}}},"requestCondition":{"type":"string","description":"Name of already defined `condition` to apply. This `condition` must be of type `REQUEST`\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"Name of already defined `condition` to apply. This `condition` must be of type `RESPONSE`. For detailed information about Conditionals, see [Fastly's Documentation on Conditionals](https://docs.fastly.com/en/guides/using-conditions)\n","language":{"python":{"mapCase":false}}},"source":{"type":"string","description":"Variable to be used as a source for the header content (Does not apply to `delete` action.)\n","language":{"python":{"mapCase":false}}},"substitution":{"type":"string","description":"Value to substitute in place of regular expression. (Only applies to `regex` and `regex_repeat`.)\n","language":{"python":{"mapCase":false}}},"type":{"type":"string","description":"The Request type on which to apply the selected Action; must be one of `request`, `fetch`, `cache` or `response`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["action","destination","name","type"],"language":{"nodejs":{"requiredOutputs":["action","destination","name","regex","source","substitution","type"]}}},"fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck":{"properties":{"checkInterval":{"type":"integer","description":"How often to run the Healthcheck in milliseconds. Default `5000`\n","language":{"python":{"mapCase":false}}},"expectedResponse":{"type":"integer","description":"The status code expected from the host. Default `200`\n","language":{"python":{"mapCase":false}}},"host":{"type":"string","description":"The Host header to send for this Healthcheck\n","language":{"python":{"mapCase":false}}},"httpVersion":{"type":"string","description":"Whether to use version 1.0 or 1.1 HTTP. Default `1.1`\n","language":{"python":{"mapCase":false}}},"initial":{"type":"integer","description":"When loading a config, the initial number of probes to be seen as OK. Default `3`\n","language":{"python":{"mapCase":false}}},"method":{"type":"string","description":"Which HTTP method to use. Default `HEAD`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to check\n","language":{"python":{"mapCase":false}}},"threshold":{"type":"integer","description":"How many Healthchecks must succeed to be considered healthy. Default `3`\n","language":{"python":{"mapCase":false}}},"timeout":{"type":"integer","description":"Timeout in milliseconds. Default `500`\n","language":{"python":{"mapCase":false}}},"window":{"type":"integer","description":"The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["host","name","path"]},"fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery":{"properties":{"dataset":{"type":"string","description":"The ID of your BigQuery dataset\n","language":{"python":{"mapCase":false}}},"email":{"type":"string","description":"The email for the service account with write access to your BigQuery dataset. If not provided, this will be pulled from a `FASTLY_BQ_EMAIL` environment variable\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"The logging format desired.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this BigQuery logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"projectId":{"type":"string","description":"The ID of your GCP project\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"Name of a condition to apply this logging.\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The secret key associated with the service account that has write access to your BigQuery table. If not provided, this will be pulled from the `FASTLY_BQ_SECRET_KEY` environment variable. Typical format for this is a private key in a string with newlines\n","language":{"python":{"mapCase":false}}},"table":{"type":"string","description":"The ID of your BigQuery table\n","language":{"python":{"mapCase":false}}},"template":{"type":"string","description":"BigQuery table name suffix template\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["dataset","email","name","projectId","secretKey","table"]},"fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage":{"properties":{"accountName":{"type":"string","description":"The unique Azure Blob Storage namespace in which your data objects are stored\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"container":{"type":"string","description":"The name of the Azure Blob Storage container in which to store logs\n","language":{"python":{"mapCase":false}}},"fileMaxBytes":{"type":"integer","description":"Maximum size of an uploaded log file, if non-zero.\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting (default: `%h %l %u %t \"%r\" %\u003es %b`)\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify the Azure Blob Storage endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload logs to. Must end with a trailing slash. If this field is left empty, the files will be saved in the container's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred in seconds. Default `3600`\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply\n","language":{"python":{"mapCase":false}}},"sasToken":{"type":"string","description":"The Azure shared access signature providing write access to the blob service objects. Be sure to update your token before it expires or the logging functionality will not work\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accountName","container","name","sasToken"]},"fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile":{"properties":{"accessKey":{"type":"string","description":"Your Cloud File account access key\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of your Cloud Files container\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Rackspace Cloud Files logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload logs to\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region to stream logs to. One of: DFW (Dallas), ORD (Chicago), IAD (Northern Virginia), LON (London), SYD (Sydney), HKG (Hong Kong)\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for your Cloud Files account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accessKey","bucketName","name","user"]},"fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Datadog logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The API key from your Datadog account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean":{"properties":{"accessKey":{"type":"string","description":"Your DigitalOcean Spaces account access key\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of the DigitalOcean Space\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"domain":{"type":"string","description":"The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the DigitalOcean Spaces logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload logs to\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"Your DigitalOcean Spaces account secret key\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accessKey","bucketName","name","secretKey"]},"fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n","language":{"python":{"mapCase":false}}},"index":{"type":"string","description":"The name of the Elasticsearch index to send documents (logs) to\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Elasticsearch logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"BasicAuth password for Elasticsearch\n","language":{"python":{"mapCase":false}}},"pipeline":{"type":"string","description":"The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"requestMaxBytes":{"type":"integer","description":"The maximum number of logs sent in one request. Defaults to `0` for unbounded\n","language":{"python":{"mapCase":false}}},"requestMaxEntries":{"type":"integer","description":"The maximum number of bytes sent in one request. Defaults to `0` for unbounded\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name (CN) or a Subject Alternative Name (SAN)\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The Elasticsearch URL to stream logs to\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"BasicAuth username for Elasticsearch\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["index","name","url"]},"fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp":{"properties":{"address":{"type":"string","description":"The FTP address to stream logs to\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the FTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"The password for the server (for anonymous use an email address)\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default `3600`)\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port number. Default: `21`\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for the server (can be `anonymous`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name","password","path","user"]},"fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc":{"properties":{"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this GCS endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds (Default 3600)\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"Name of a condition to apply this logging.\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The secret key associated with the target gcs bucket on your account. You may optionally provide this secret via an environment variable, `FASTLY_GCS_SECRET_KEY`. A typical format for the key is PEM format, containing actual newline characters where required\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The `client_email` field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GCS_EMAIL`.\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub":{"properties":{"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Google Cloud Pub/Sub logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"projectId":{"type":"string","description":"The ID of your Google Cloud Platform project\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"Your Google Cloud Platform account secret key. The `private_key` field in your service account authentication JSON. You may optionally provide this secret via an environment variable, `FASTLY_GOOGLE_PUBSUB_SECRET_KEY`.\n","language":{"python":{"mapCase":false}}},"topic":{"type":"string","description":"The Google Cloud Pub/Sub topic to which logs will be published\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"Your Google Cloud Platform service account email address. The `client_email` field in your service account authentication JSON. You may optionally provide this via an environment variable, `FASTLY_GOOGLE_PUBSUB_EMAIL`.\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","projectId","secretKey","topic","user"]},"fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Heroku logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The token to use for authentication (https://www.heroku.com/docs/customer-token-authentication-token/)\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The URL to stream logs to\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb":{"properties":{"dataset":{"type":"string","description":"The Honeycomb Dataset you want to log to\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache style log formatting. Your log must produce valid JSON that Honeycomb can ingest.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Honeycomb logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The Write Key from the Account page of your Honeycomb account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["dataset","name","token"]},"fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp":{"properties":{"contentType":{"type":"string","description":"Value of the `Content-Type` header sent with the request\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n","language":{"python":{"mapCase":false}}},"headerName":{"type":"string","description":"Custom header sent with the request\n","language":{"python":{"mapCase":false}}},"headerValue":{"type":"string","description":"Value of the custom header sent with the request\n","language":{"python":{"mapCase":false}}},"jsonFormat":{"type":"string","description":"Formats log entries as JSON. Can be either disabled (`0`), array of json (`1`), or newline delimited json (`2`)\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"method":{"type":"string","description":"HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the HTTPS logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed\n","language":{"python":{"mapCase":false}}},"requestMaxBytes":{"type":"integer","description":"The maximum number of bytes sent in one request\n","language":{"python":{"mapCase":false}}},"requestMaxEntries":{"type":"integer","description":"The maximum number of logs sent in one request\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"URL that log data will be sent to. Must use the https protocol\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","url"]},"fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka":{"properties":{"authMethod":{"type":"string","description":"SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n","language":{"python":{"mapCase":false}}},"brokers":{"type":"string","description":"A comma-separated list of IP addresses or hostnames of Kafka brokers\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. One of: `gzip`, `snappy`, `lz4`\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Kafka logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"parseLogKeyvals":{"type":"boolean","description":"Enables parsing of key=value tuples from the beginning of a logline, turning them into record headers\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"SASL Pass\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"requestMaxBytes":{"type":"integer","description":"Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n","language":{"python":{"mapCase":false}}},"requiredAcks":{"type":"string","description":"The Number of acknowledgements a leader must receive before a write is considered successful. One of: `1` (default) One server needs to respond. `0` No servers need to respond. `-1`\tWait for all in-sync replicas to respond\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n","language":{"python":{"mapCase":false}}},"topic":{"type":"string","description":"The Kafka topic to send logs to\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Can be either `true` or `false`\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"SASL User\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["brokers","name","topic"]},"fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese":{"properties":{"accessKey":{"type":"string","description":"The AWS access key to be used to write to the stream\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"iamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to Kinesis. Not required if `access_key` and `secret_key` are provided.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Kinesis logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The AWS region the stream resides in. (Default: `us-east-1`)\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The AWS secret access key to authenticate with\n","language":{"python":{"mapCase":false}}},"topic":{"type":"string","description":"The Kinesis stream name\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","topic"]},"fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Logentries logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port number configured in Logentries\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"Use token based authentication (https://logentries.com/doc/input-token/)\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Loggly logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The token to use for authentication (https://www.loggly.com/docs/customer-token-authentication-token/).\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle":{"properties":{"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Log Shuttle logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The data authentication token associated with this endpoint\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"Your Log Shuttle endpoint URL\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic":{"properties":{"format":{"type":"string","description":"Apache style log formatting. Your log must produce valid JSON that New Relic Logs can ingest.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the New Relic logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region that log data will be sent to. Default: `US`\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The Insert API key from the Account page of your New Relic account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack":{"properties":{"accessKey":{"type":"string","description":"Your OpenStack account access key\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of your OpenStack container\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the OpenStack logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default `3600`\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"Your OpenStack auth url\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for your OpenStack account\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["accessKey","bucketName","name","url","user"]},"fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail":{"properties":{"address":{"type":"string","description":"The address of the Papertrail endpoint\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"A Fastly [log format string](https://docs.fastly.com/en/guides/custom-log-formats)\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. The logging call gets placed by default in `vcl_log` if `format_version` is set to `2` and in `vcl_deliver` if `format_version` is set to `1`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Papertrail endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed. If not set, endpoints with `format_version` of 2 are placed in `vcl_log` and those with `format_version` of 1 are placed in `vcl_deliver`\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port associated with the address where the Papertrail endpoint can be accessed\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name","port"]},"fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3":{"properties":{"acl":{"type":"string","description":"The AWS [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl) to use for objects uploaded to the S3 bucket. Options are: `private`, `public-read`, `public-read-write`, `aws-exec-read`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n","language":{"python":{"mapCase":false}}},"bucketName":{"type":"string","description":"The name of the bucket in which to store the logs\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"domain":{"type":"string","description":"If you created the S3 bucket outside of `us-east-1`, then specify the corresponding bucket endpoint. Example: `s3-us-west-2.amazonaws.com`\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2).\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the S3 logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"Path to store the files. Must end with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently the logs should be transferred, in seconds. Default `3600`\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"redundancy":{"type":"string","description":"The S3 storage class (redundancy level). Should be one of: `standard`, `reduced_redundancy`, `standard_ia`, or `onezone_ia`\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n","language":{"python":{"mapCase":false}}},"s3AccessKey":{"type":"string","description":"AWS Access Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This key will be not be encrypted. Not required if `iam_role` is provided. You can provide this key via an environment variable, `FASTLY_S3_ACCESS_KEY`\n","language":{"python":{"mapCase":false}}},"s3IamRole":{"type":"string","description":"The Amazon Resource Name (ARN) for the IAM role granting Fastly access to S3. Not required if `access_key` and `secret_key` are provided. You can provide this value via an environment variable, `FASTLY_S3_IAM_ROLE`\n","language":{"python":{"mapCase":false}}},"s3SecretKey":{"type":"string","description":"AWS Secret Key of an account with the required permissions to post logs. It is **strongly** recommended you create a separate IAM user with permissions to only operate on this Bucket. This secret will be not be encrypted. Not required if `iam_role` is provided. You can provide this secret via an environment variable, `FASTLY_S3_SECRET_KEY`\n","language":{"python":{"mapCase":false}}},"serverSideEncryption":{"type":"string","description":"Specify what type of server side encryption should be used. Can be either `AES256` or `aws:kms`\n","language":{"python":{"mapCase":false}}},"serverSideEncryptionKmsKeyId":{"type":"string","description":"Optional server-side KMS Key Id. Must be set if server*side*encryption is set to `aws:kms`\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["bucketName","name"]},"fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr":{"properties":{"format":{"type":"string","description":"Apache style log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the Scalyr logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"region":{"type":"string","description":"The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of an existing condition in the configured endpoint, or leave blank to always execute.\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The token to use for authentication (https://www.scalyr.com/keys)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token"]},"fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp":{"properties":{"address":{"type":"string","description":"The SFTP address to stream logs to\n","language":{"python":{"mapCase":false}}},"compressionCodec":{"type":"string","description":"The codec used for compression of your logs. Valid values are zstd, snappy, and gzip. If the specified codec is \"gzip\", gzip*level will default to 3. To specify a different level, leave compression*codec blank and explicitly set the level using gzip*level. Specifying both compression*codec and gzip_level in the same API request will result in an error.\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting.\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n","language":{"python":{"mapCase":false}}},"gzipLevel":{"type":"integer","description":"Level of Gzip compression from `0-9`. `0` means no compression. `1` is the fastest and the least compressed version, `9` is the slowest and the most compressed version. Default `0`\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The unique name of the SFTP logging endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"password":{"type":"string","description":"The password for the server. If both `password` and `secret_key` are passed, `secret_key` will be preferred\n","language":{"python":{"mapCase":false}}},"path":{"type":"string","description":"The path to upload log files to. If the path ends in `/` then it is treated as a directory\n","language":{"python":{"mapCase":false}}},"period":{"type":"integer","description":"How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port the SFTP service listens on. (Default: `22`)\n","language":{"python":{"mapCase":false}}},"publicKey":{"type":"string","description":"A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply.\n","language":{"python":{"mapCase":false}}},"secretKey":{"type":"string","description":"The SSH private key for the server. If both `password` and `secret_key` are passed, `secret_key` will be preferred\n","language":{"python":{"mapCase":false}}},"sshKnownHosts":{"type":"string","description":"A list of host keys for all hosts we can connect to over SFTP\n","language":{"python":{"mapCase":false}}},"timestampFormat":{"type":"string","description":"The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n","language":{"python":{"mapCase":false}}},"user":{"type":"string","description":"The username for the server\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name","path","sshKnownHosts","user"]},"fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting (default: `%h %l %u %t \"%r\" %\u003es %b`)\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify the Splunk endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"The name of the condition to apply\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SPLUNK_CA_CERT`\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format.\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format.\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"The Splunk token to be used for authentication\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The Splunk URL to stream logs to\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default: `false`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","token","url"]},"fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic":{"properties":{"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Sumologic endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n","language":{"python":{"mapCase":false}}},"url":{"type":"string","description":"The URL to Sumologic collector endpoint\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name","url"]},"fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog":{"properties":{"address":{"type":"string","description":"A hostname or IPv4 address of the Syslog endpoint\n","language":{"python":{"mapCase":false}}},"format":{"type":"string","description":"Apache-style string or VCL variables to use for log formatting\n","language":{"python":{"mapCase":false}}},"formatVersion":{"type":"integer","description":"The version of the custom logging format. Can be either 1 or 2. (Default: 2)\n","language":{"python":{"mapCase":false}}},"messageType":{"type":"string","description":"How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Syslog endpoint. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"placement":{"type":"string","description":"Where in the generated VCL the logging call should be placed.\n","language":{"python":{"mapCase":false}}},"port":{"type":"integer","description":"The port associated with the address where the Syslog endpoint can be accessed. Default `514`\n","language":{"python":{"mapCase":false}}},"responseCondition":{"type":"string","description":"Name of blockAttributes condition to apply this logging.\n","language":{"python":{"mapCase":false}}},"tlsCaCert":{"type":"string","description":"A secure certificate to authenticate the server with. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CA_CERT`\n","language":{"python":{"mapCase":false}}},"tlsClientCert":{"type":"string","description":"The client certificate used to make authenticated requests. Must be in PEM format. You can provide this certificate via an environment variable, `FASTLY_SYSLOG_CLIENT_CERT`\n","language":{"python":{"mapCase":false}}},"tlsClientKey":{"type":"string","description":"The client private key used to make authenticated requests. Must be in PEM format. You can provide this key via an environment variable, `FASTLY_SYSLOG_CLIENT_KEY`\n","language":{"python":{"mapCase":false}}},"tlsHostname":{"type":"string","description":"Used during the TLS handshake to validate the certificate\n","language":{"python":{"mapCase":false}}},"token":{"type":"string","description":"Whether to prepend each message with a specific token\n","language":{"python":{"mapCase":false}}},"useTls":{"type":"boolean","description":"Whether to use TLS for secure logging. Default `false`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["address","name"]},"fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting":{"properties":{"action":{"type":"string","description":"Allows you to terminate request handling and immediately perform an action. When set it can be `lookup` or `pass` (Ignore the cache completely)\n","language":{"python":{"mapCase":false}}},"bypassBusyWait":{"type":"boolean","description":"Disable collapsed forwarding, so you don't wait for other objects to origin\n","language":{"python":{"mapCase":false}}},"defaultHost":{"type":"string","description":"Sets the host header\n","language":{"python":{"mapCase":false}}},"forceMiss":{"type":"boolean","description":"Force a cache miss for the request. If specified, can be `true` or `false`\n","language":{"python":{"mapCase":false}}},"forceSsl":{"type":"boolean","description":"Forces the request to use SSL (Redirects a non-SSL request to SSL)\n","language":{"python":{"mapCase":false}}},"geoHeaders":{"type":"boolean","description":"Injects Fastly-Geo-Country, Fastly-Geo-City, and Fastly-Geo-Region into the request headers\n","deprecationMessage":"'geo_headers' attribute has been deprecated and will be removed in the next major version release","language":{"python":{"mapCase":false}}},"hashKeys":{"type":"string","description":"Comma separated list of varnish request object fields that should be in the hash key\n","language":{"python":{"mapCase":false}}},"maxStaleAge":{"type":"integer","description":"How old an object is allowed to be to serve `stale-if-error` or `stale-while-revalidate`, in seconds\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"Unique name to refer to this Request Setting. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"requestCondition":{"type":"string","description":"Name of already defined `condition` to determine if this request setting should be applied\n","language":{"python":{"mapCase":false}}},"timerSupport":{"type":"boolean","description":"Injects the X-Timer info into the request for viewing origin fetch durations\n","language":{"python":{"mapCase":false}}},"xff":{"type":"string","description":"X-Forwarded-For, should be `clear`, `leave`, `append`, `append_all`, or `overwrite`. Default `append`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"]},"fastly:index/ServiceVclResponseObject:ServiceVclResponseObject":{"properties":{"cacheCondition":{"type":"string","description":"Name of already defined `condition` to check after we have retrieved an object. If the condition passes then deliver this Request Object instead. This `condition` must be of type `CACHE`. For detailed information about Conditionals, see [Fastly's Documentation on Conditionals](https://docs.fastly.com/en/guides/using-conditions)\n","language":{"python":{"mapCase":false}}},"content":{"type":"string","description":"The content to deliver for the response object\n","language":{"python":{"mapCase":false}}},"contentType":{"type":"string","description":"The MIME type of the content\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name to identify this Response Object. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"requestCondition":{"type":"string","description":"Name of already defined `condition` to be checked during the request phase. If the condition passes then this object will be delivered. This `condition` must be of type `REQUEST`\n","language":{"python":{"mapCase":false}}},"response":{"type":"string","description":"The HTTP Response. Default `OK`\n","language":{"python":{"mapCase":false}}},"status":{"type":"integer","description":"The HTTP Status Code. Default `200`\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["name"]},"fastly:index/ServiceVclSnippet:ServiceVclSnippet":{"properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A name that is unique across \"regular\" and \"dynamic\" VCL Snippet configuration blocks. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}},"priority":{"type":"integer","description":"Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to `100`\n","language":{"python":{"mapCase":false}}},"type":{"type":"string","description":"The location in generated VCL where the snippet should be placed (can be one of `init`, `recv`, `hash`, `hit`, `miss`, `pass`, `fetch`, `error`, `deliver`, `log` or `none`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["content","name","type"]},"fastly:index/ServiceVclVcl:ServiceVclVcl":{"properties":{"content":{"type":"string","description":"The custom VCL code to upload\n","language":{"python":{"mapCase":false}}},"main":{"type":"boolean","description":"If `true`, use this block as the main configuration. If `false`, use this block as an includable library. Only a single VCL block can be marked as the main block. Default is `false`\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"A unique name for this configuration block. It is important to note that changing this attribute will delete and recreate the resource\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["content","name"]},"fastly:index/ServiceVclWaf:ServiceVclWaf":{"properties":{"disabled":{"type":"boolean","description":"A flag used to completely disable a Web Application Firewall. This is intended to only be used in an emergency\n","language":{"python":{"mapCase":false}}},"prefetchCondition":{"type":"string","description":"The `condition` to determine which requests will be run past your Fastly WAF. This `condition` must be of type `PREFETCH`. For detailed information about Conditionals, see [Fastly's Documentation on Conditionals](https://docs.fastly.com/en/guides/using-conditions)\n","language":{"python":{"mapCase":false}}},"responseObject":{"type":"string","description":"The name of the response object used by the Web Application Firewall\n","language":{"python":{"mapCase":false}}},"wafId":{"type":"string","description":"The ID of the WAF\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["responseObject"],"language":{"nodejs":{"requiredOutputs":["responseObject","wafId"]}}},"fastly:index/ServiceWafConfigurationRule:ServiceWafConfigurationRule":{"properties":{"modsecRuleId":{"type":"integer","description":"The Web Application Firewall rule's modsecurity ID\n","language":{"python":{"mapCase":false}}},"revision":{"type":"integer","description":"The Web Application Firewall rule's revision. The latest revision will be used if this is not provided\n","language":{"python":{"mapCase":false}}},"status":{"type":"string","description":"The Web Application Firewall rule's status. Allowed values are (`log`, `block` and `score`)\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["modsecRuleId","status"],"language":{"nodejs":{"requiredOutputs":["modsecRuleId","revision","status"]}}},"fastly:index/ServiceWafConfigurationRuleExclusion:ServiceWafConfigurationRuleExclusion":{"properties":{"condition":{"type":"string","description":"A conditional expression in VCL used to determine if the condition is met\n","language":{"python":{"mapCase":false}}},"exclusionType":{"type":"string","description":"The type of rule exclusion. Values are `rule` to exclude the specified rule(s), or `waf` to disable the Web Application Firewall\n","language":{"python":{"mapCase":false}}},"modsecRuleIds":{"type":"array","items":{"type":"integer"},"description":"Set of modsecurity IDs to be excluded. No rules should be provided when `exclusion_type` is `waf`. The rules need to be configured on the Web Application Firewall to be excluded\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","description":"The name of rule exclusion\n","language":{"python":{"mapCase":false}}},"number":{"type":"integer","description":"The numeric ID assigned to the WAF Rule Exclusion\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["condition","exclusionType","name"],"language":{"nodejs":{"requiredOutputs":["condition","exclusionType","name","number"]}}},"fastly:index/TlsSubscriptionManagedDnsChallenge:TlsSubscriptionManagedDnsChallenge":{"properties":{"recordName":{"type":"string","description":"The name of the DNS record to add. For example `example.com`. Best accessed through a `for` expression to filter the relevant record.\n","language":{"python":{"mapCase":false}}},"recordType":{"type":"string","description":"The type of DNS record to add, e.g. `A`, or `CNAME`.\n","language":{"python":{"mapCase":false}}},"recordValue":{"type":"string","description":"The value to which the DNS record should point, e.g. `xxxxx.fastly-validations.com`.\n","language":{"python":{"mapCase":false}}}},"type":"object","language":{"nodejs":{"requiredOutputs":["recordName","recordType","recordValue"]}}},"fastly:index/TlsSubscriptionManagedHttpChallenge:TlsSubscriptionManagedHttpChallenge":{"properties":{"recordName":{"type":"string","description":"The name of the DNS record to add. For example `example.com`. Best accessed through a `for` expression to filter the relevant record.\n","language":{"python":{"mapCase":false}}},"recordType":{"type":"string","description":"The type of DNS record to add, e.g. `A`, or `CNAME`.\n","language":{"python":{"mapCase":false}}},"recordValues":{"type":"array","items":{"type":"string"},"description":"A list with the value(s) to which the DNS record should point.\n","language":{"python":{"mapCase":false}}}},"type":"object","language":{"nodejs":{"requiredOutputs":["recordName","recordType","recordValues"]}}},"fastly:index/getDatacentersPop:getDatacentersPop":{"properties":{"code":{"type":"string","language":{"python":{"mapCase":false}}},"group":{"type":"string","language":{"python":{"mapCase":false}}},"name":{"type":"string","language":{"python":{"mapCase":false}}},"shield":{"type":"string","language":{"python":{"mapCase":false}}}},"type":"object","required":["code","group","name","shield"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getServicesDetail:getServicesDetail":{"properties":{"comment":{"type":"string","language":{"python":{"mapCase":false}}},"createdAt":{"type":"string","language":{"python":{"mapCase":false}}},"customerId":{"type":"string","language":{"python":{"mapCase":false}}},"id":{"type":"string","description":"The ID of this resource.\n","language":{"python":{"mapCase":false}}},"name":{"type":"string","language":{"python":{"mapCase":false}}},"type":{"type":"string","language":{"python":{"mapCase":false}}},"updatedAt":{"type":"string","language":{"python":{"mapCase":false}}},"version":{"type":"integer","language":{"python":{"mapCase":false}}}},"type":"object","required":["comment","createdAt","customerId","id","name","type","updatedAt","version"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getTlsConfigurationDnsRecord:getTlsConfigurationDnsRecord":{"properties":{"recordType":{"type":"string","language":{"python":{"mapCase":false}}},"recordValue":{"type":"string","language":{"python":{"mapCase":false}}},"region":{"type":"string","language":{"python":{"mapCase":false}}}},"type":"object","required":["recordType","recordValue","region"],"language":{"nodejs":{"requiredInputs":[]}}},"fastly:index/getWafRulesRule:getWafRulesRule":{"properties":{"latestRevisionNumber":{"type":"integer","description":"The rule's latest revision.\n","language":{"python":{"mapCase":false}}},"modsecRuleId":{"type":"integer","description":"The rule's modsecurity ID.\n","language":{"python":{"mapCase":false}}},"type":{"type":"string","description":"The rule's type.\n","language":{"python":{"mapCase":false}}}},"type":"object","required":["latestRevisionNumber","modsecRuleId","type"],"language":{"nodejs":{"requiredInputs":[]}}}},"provider":{"description":"The provider type for the fastly package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"apiKey":{"type":"string","description":"Fastly API Key from https://app.fastly.com/#account\n"},"baseUrl":{"type":"string","description":"Fastly API URL\n"},"forceHttp2":{"type":"boolean","description":"Set this to `true` to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to\n`api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS\nhandshakes. Default: `false`\n"},"noAuth":{"type":"boolean","description":"Set to `true` if your configuration only consumes data sources that do not require authentication, such as\n`fastly_ip_ranges`\n"}},"inputProperties":{"apiKey":{"type":"string","description":"Fastly API Key from https://app.fastly.com/#account\n"},"baseUrl":{"type":"string","description":"Fastly API URL\n"},"forceHttp2":{"type":"boolean","description":"Set this to `true` to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to\n`api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS\nhandshakes. Default: `false`\n"},"noAuth":{"type":"boolean","description":"Set to `true` if your configuration only consumes data sources that do not require authentication, such as\n`fastly_ip_ranges`\n"}}},"resources":{"fastly:index/serviceACLEntries:ServiceACLEntries":{"description":"\n\n\n## Import\n\nThis is an example of the import command being applied to the resource named `fastly_service_acl_entries.entries` The resource ID is a combined value of the `service_id` and `acl_id` separated by a forward slash.\n\n```sh\n $ pulumi import fastly:index/serviceACLEntries:ServiceACLEntries entries xxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx\n```\n\n If Terraform is already managing remote acl entries against a resource being imported then the user will be asked to remove it from the existing Terraform state. The following is an example of the Terraform state command to remove the resource named `fastly_service_acl_entries.entries` from the Terraform state file. $ terraform state rm fastly_service_acl_entries.entries ","properties":{"aclId":{"type":"string","description":"The ID of the ACL that the items belong to\n"},"entries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry"},"description":"ACL Entries\n"},"manageEntries":{"type":"boolean","description":"Whether to reapply changes if the state of the entries drifts, i.e. if entries are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the Service that the ACL belongs to\n"}},"required":["aclId","serviceId"],"inputProperties":{"aclId":{"type":"string","description":"The ID of the ACL that the items belong to\n"},"entries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry"},"description":"ACL Entries\n"},"manageEntries":{"type":"boolean","description":"Whether to reapply changes if the state of the entries drifts, i.e. if entries are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the Service that the ACL belongs to\n"}},"requiredInputs":["aclId","serviceId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceACLEntries resources.\n","properties":{"aclId":{"type":"string","description":"The ID of the ACL that the items belong to\n"},"entries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceACLEntriesEntry:ServiceACLEntriesEntry"},"description":"ACL Entries\n"},"manageEntries":{"type":"boolean","description":"Whether to reapply changes if the state of the entries drifts, i.e. if entries are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the Service that the ACL belongs to\n"}},"type":"object"}},"fastly:index/serviceAuthorization:ServiceAuthorization":{"description":"Configures authorization with granular permissions to services. Users can be granted rights for services on different levels.\n\nThe Service Authorization resource requires a user id, service id and an optional permission.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {});\n//...\nconst user = new fastly.User(\"user\", {});\n// ...\nconst auth = new fastly.ServiceAuthorization(\"auth\", {\n serviceId: demo.id,\n userId: user.id,\n permission: \"purge_all\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\")\n#...\nuser = fastly.User(\"user\")\n# ...\nauth = fastly.ServiceAuthorization(\"auth\",\n service_id=demo.id,\n user_id=user.id,\n permission=\"purge_all\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n });\n //...\n var user = new Fastly.User(\"user\", new Fastly.UserArgs\n {\n });\n // ...\n var auth = new Fastly.ServiceAuthorization(\"auth\", new Fastly.ServiceAuthorizationArgs\n {\n ServiceId = demo.Id,\n UserId = user.Id,\n Permission = \"purge_all\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.NewServiceVcl(ctx, \"demo\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := fastly.NewUser(ctx, \"user\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceAuthorization(ctx, \"auth\", \u0026fastly.ServiceAuthorizationArgs{\n\t\t\tServiceId: demo.ID(),\n\t\t\tUserId: user.ID(),\n\t\t\tPermission: pulumi.String(\"purge_all\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Fastly Service Authorization can be imported using their user ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx\n```\n\n ","properties":{"permission":{"type":"string","description":"The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`.\n"},"serviceId":{"type":"string","description":"The ID of the service to grant permissions for.\n"},"userId":{"type":"string","description":"The ID of the user which will receive the granted permissions.\n"}},"required":["permission","serviceId","userId"],"inputProperties":{"permission":{"type":"string","description":"The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`.\n"},"serviceId":{"type":"string","description":"The ID of the service to grant permissions for.\n"},"userId":{"type":"string","description":"The ID of the user which will receive the granted permissions.\n"}},"requiredInputs":["permission","serviceId","userId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAuthorization resources.\n","properties":{"permission":{"type":"string","description":"The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`.\n"},"serviceId":{"type":"string","description":"The ID of the service to grant permissions for.\n"},"userId":{"type":"string","description":"The ID of the user which will receive the granted permissions.\n"}},"type":"object"}},"fastly:index/serviceCompute:ServiceCompute":{"description":"\n\n\n## Import\n\nFastly Services can be imported using their service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceCompute:ServiceCompute demo xxxxxxxxxxxxxxxxxxxx\n```\n\n By default, either the active version will be imported, or the latest version if no version is active. Alternatively, a specific version of the service can be selected by appending an `@` followed by the version number to the service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceCompute:ServiceCompute demo xxxxxxxxxxxxxxxxxxxx@2\n```\n\n ","properties":{"activate":{"type":"boolean","description":"Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service\n"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeBackend:ServiceComputeBackend"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider\n"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`\n"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDomain:ServiceComputeDomain"},"description":"A set of Domain names to serve as entry points for your Service\n"},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub"}},"loggingHeroku":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create\n"},"package":{"$ref":"#/types/fastly:index/ServiceComputePackage:ServiceComputePackage","description":"The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/)\n"},"versionComment":{"type":"string","description":"Description field for the version\n"}},"required":["activeVersion","clonedVersion","domains","name","package"],"inputProperties":{"activate":{"type":"boolean","description":"Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeBackend:ServiceComputeBackend"}},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`\n"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDomain:ServiceComputeDomain"},"description":"A set of Domain names to serve as entry points for your Service\n"},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub"}},"loggingHeroku":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create\n"},"package":{"$ref":"#/types/fastly:index/ServiceComputePackage:ServiceComputePackage","description":"The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/)\n"},"versionComment":{"type":"string","description":"Description field for the version\n"}},"requiredInputs":["domains","package"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceCompute resources.\n","properties":{"activate":{"type":"boolean","description":"Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service\n"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeBackend:ServiceComputeBackend"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider\n"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`\n"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeDomain:ServiceComputeDomain"},"description":"A set of Domain names to serve as entry points for your Service\n"},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n"},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDatadog:ServiceComputeLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub"}},"loggingHeroku":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHeroku:ServiceComputeLoggingHeroku"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHoneycomb:ServiceComputeLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLoggly:ServiceComputeLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingLogshuttle:ServiceComputeLoggingLogshuttle"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingNewrelic:ServiceComputeLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingPapertrail:ServiceComputeLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingScalyr:ServiceComputeLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create\n"},"package":{"$ref":"#/types/fastly:index/ServiceComputePackage:ServiceComputePackage","description":"The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/)\n"},"versionComment":{"type":"string","description":"Description field for the version\n"}},"type":"object"}},"fastly:index/serviceDictionaryItems:ServiceDictionaryItems":{"description":"\n\n\n## Import\n\nThis is an example of the import command being applied to the resource named `fastly_service_dictionary_items.items` The resource ID is a combined value of the `service_id` and `dictionary_id` separated by a forward slash.\n\n```sh\n $ pulumi import fastly:index/serviceDictionaryItems:ServiceDictionaryItems items xxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx\n```\n\n If Terraform is already managing remote dictionary items against a resource being imported then the user will be asked to remove it from the existing Terraform state.\n\n The following is an example of the Terraform state command to remove the resource named `fastly_service_dictionary_items.items` from the Terraform state file. $ terraform state rm fastly_service_dictionary_items.items ","properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary that the items belong to\n"},"items":{"type":"object","additionalProperties":{"$ref":"pulumi.json#/Any"},"description":"A map representing an entry in the dictionary, (key/value)\n"},"manageItems":{"type":"boolean","description":"Whether to reapply changes if the state of the items drifts, i.e. if items are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dictionary belongs to\n"}},"required":["dictionaryId","serviceId"],"inputProperties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary that the items belong to\n"},"items":{"type":"object","additionalProperties":{"$ref":"pulumi.json#/Any"},"description":"A map representing an entry in the dictionary, (key/value)\n"},"manageItems":{"type":"boolean","description":"Whether to reapply changes if the state of the items drifts, i.e. if items are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dictionary belongs to\n"}},"requiredInputs":["dictionaryId","serviceId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceDictionaryItems resources.\n","properties":{"dictionaryId":{"type":"string","description":"The ID of the dictionary that the items belong to\n"},"items":{"type":"object","additionalProperties":{"$ref":"pulumi.json#/Any"},"description":"A map representing an entry in the dictionary, (key/value)\n"},"manageItems":{"type":"boolean","description":"Whether to reapply changes if the state of the items drifts, i.e. if items are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dictionary belongs to\n"}},"type":"object"}},"fastly:index/serviceDynamicSnippetContent:ServiceDynamicSnippetContent":{"description":"\n\n\n## Import\n\nThis is an example of the import command being applied to the resource named `fastly_service_dynamic_snippet_content.content` The resource ID is a combined value of the `service_id` and `snippet_id` separated by a forward slash.\n\n```sh\n $ pulumi import fastly:index/serviceDynamicSnippetContent:ServiceDynamicSnippetContent content xxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx\n```\n\n If Terraform is already managing remote content against a resource being imported then the user will be asked to remove it from the existing Terraform state. The following is an example of the Terraform state command to remove the resource named `fastly_service_dynamic_snippet_content.content` from the Terraform state file. $ terraform state rm fastly_service_dynamic_snippet_content.content ","properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"manageSnippets":{"type":"boolean","description":"Whether to reapply changes if the state of the snippets drifts, i.e. if snippets are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dynamic snippet belongs to\n"},"snippetId":{"type":"string","description":"The ID of the dynamic snippet that the content belong to\n"}},"required":["content","serviceId","snippetId"],"inputProperties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"manageSnippets":{"type":"boolean","description":"Whether to reapply changes if the state of the snippets drifts, i.e. if snippets are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dynamic snippet belongs to\n"},"snippetId":{"type":"string","description":"The ID of the dynamic snippet that the content belong to\n"}},"requiredInputs":["content","serviceId","snippetId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceDynamicSnippetContent resources.\n","properties":{"content":{"type":"string","description":"The VCL code that specifies exactly what the snippet does\n"},"manageSnippets":{"type":"boolean","description":"Whether to reapply changes if the state of the snippets drifts, i.e. if snippets are managed externally\n"},"serviceId":{"type":"string","description":"The ID of the service that the dynamic snippet belongs to\n"},"snippetId":{"type":"string","description":"The ID of the dynamic snippet that the content belong to\n"}},"type":"object"}},"fastly:index/serviceVcl:ServiceVcl":{"description":"Provides a Fastly Service, representing the configuration for a website, app,\nAPI, or anything else to be served through Fastly. A Service encompasses Domains\nand Backends.\n\nThe Service resource requires a domain name that is correctly set up to direct\ntraffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname]\non their documentation site for guidance.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n port=80,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n name: \"AWS S3 hosting\",\n overrideHost: \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n gzips: [{\n contentTypes: [\n \"text/html\",\n \"text/css\",\n ],\n extensions: [\n \"css\",\n \"js\",\n ],\n name: \"file extensions and content types\",\n }],\n headers: [{\n action: \"delete\",\n destination: \"http.x-amz-request-id\",\n name: \"remove x-amz-request-id\",\n type: \"cache\",\n }],\n});\nconst website = new aws.s3.BucketV2(\"website\", {\n acl: \"public-read\",\n websites: [{\n errorDocument: \"error.html\",\n indexDocument: \"index.html\",\n }],\n});\n```\n\nBasic usage with [custom\nVCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as fs from \"fs\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n vcls: [\n {\n content: fs.readFileSync(`./my_custom_main.vcl`, \"utf-8\"),\n main: true,\n name: \"my_custom_main_vcl\",\n },\n {\n content: fs.readFileSync(`./my_custom_library.vcl`, \"utf-8\"),\n name: \"my_custom_library_vcl\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n port=80,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True,\n vcls=[\n fastly.ServiceVclVclArgs(\n content=(lambda path: open(path).read())(f\"{path['module']}/my_custom_main.vcl\"),\n main=True,\n name=\"my_custom_main_vcl\",\n ),\n fastly.ServiceVclVclArgs(\n content=(lambda path: open(path).read())(f\"{path['module']}/my_custom_library.vcl\"),\n name=\"my_custom_library_vcl\",\n ),\n ])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n Vcls = \n {\n new Fastly.Inputs.ServiceVclVclArgs\n {\n Content = File.ReadAllText($\"{path.Module}/my_custom_main.vcl\"),\n Main = true,\n Name = \"my_custom_main_vcl\",\n },\n new Fastly.Inputs.ServiceVclVclArgs\n {\n Content = File.ReadAllText($\"{path.Module}/my_custom_library.vcl\"),\n Name = \"my_custom_library_vcl\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tVcls: ServiceVclVclArray{\n\t\t\t\t\u0026ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/my_custom_main.vcl\")),\n\t\t\t\t\tMain: pulumi.Bool(true),\n\t\t\t\t\tName: pulumi.String(\"my_custom_main_vcl\"),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/my_custom_library.vcl\")),\n\t\t\t\t\tName: pulumi.String(\"my_custom_library_vcl\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with [custom Director](https://developer.fastly.com/reference/api/load-balancing/directors/director/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [\n {\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n },\n {\n address: \"127.0.0.2\",\n name: \"origin2\",\n port: 80,\n },\n ],\n directors: [{\n backends: [\n \"origin1\",\n \"origin2\",\n ],\n name: \"mydirector\",\n quorum: 0,\n type: 3,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[\n fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"origin1\",\n port=80,\n ),\n fastly.ServiceVclBackendArgs(\n address=\"127.0.0.2\",\n name=\"origin2\",\n port=80,\n ),\n ],\n directors=[fastly.ServiceVclDirectorArgs(\n backends=[\n \"origin1\",\n \"origin2\",\n ],\n name=\"mydirector\",\n quorum=0,\n type=3,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.2\",\n Name = \"origin2\",\n Port = 80,\n },\n },\n Directors = \n {\n new Fastly.Inputs.ServiceVclDirectorArgs\n {\n Backends = \n {\n \"origin1\",\n \"origin2\",\n },\n Name = \"mydirector\",\n Quorum = 0,\n Type = 3,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"origin1\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.2\"),\n\t\t\t\t\tName: pulumi.String(\"origin2\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDirectors: ServiceVclDirectorArray{\n\t\t\t\t\u0026ServiceVclDirectorArgs{\n\t\t\t\t\tBackends: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"origin1\"),\n\t\t\t\t\t\tpulumi.String(\"origin2\"),\n\t\t\t\t\t},\n\t\t\t\t\tName: pulumi.String(\"mydirector\"),\n\t\t\t\t\tQuorum: pulumi.Int(0),\n\t\t\t\t\tType: pulumi.Int(3),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with [Web Application Firewall](https://developer.fastly.com/reference/api/waf/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n statement: \"req.backend.is_origin\",\n type: \"PREFETCH\",\n },\n // This condition will always be false\n // adding it to the response object created below\n // prevents Fastly from returning a 403 on all of your traffic.\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n domains: [{\n comment: \"demo\",\n name: \"example.com\",\n }],\n forceDestroy: true,\n responseObjects: [{\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n contentType: \"text/html\",\n name: \"WAF_Response\",\n requestCondition: \"WAF_always_false\",\n response: \"Forbidden\",\n status: 403,\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"origin1\",\n port=80,\n )],\n conditions=[\n fastly.ServiceVclConditionArgs(\n name=\"WAF_Prefetch\",\n statement=\"req.backend.is_origin\",\n type=\"PREFETCH\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"example.com\",\n )],\n force_destroy=True,\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n content_type=\"text/html\",\n name=\"WAF_Response\",\n request_condition=\"WAF_always_false\",\n response=\"Forbidden\",\n status=403,\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = \n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Statement = \"req.backend.is_origin\",\n Type = \"PREFETCH\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"example.com\",\n },\n },\n ForceDestroy = true,\n ResponseObjects = \n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n ContentType = \"text/html\",\n Name = \"WAF_Response\",\n RequestCondition = \"WAF_always_false\",\n Response = \"Forbidden\",\n Status = 403,\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"origin1\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tConditions: ServiceVclConditionArray{\n\t\t\t\t\u0026ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t\tStatement: pulumi.String(\"false\"),\n\t\t\t\t\tType: pulumi.String(\"REQUEST\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tResponseObjects: ServiceVclResponseObjectArray{\n\t\t\t\t\u0026ServiceVclResponseObjectArgs{\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026ServiceVclWafArgs{\n\t\t\t\tPrefetchCondition: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\tResponseObject: pulumi.String(\"WAF_Response\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Note:** For an AWS S3 Bucket, the Backend address is\n`\u003cdomain\u003e.s3-website-\u003cregion\u003e.amazonaws.com`. The `override_host` attribute\nshould be set to `\u003cbucket_name\u003e.s3-website-\u003cregion\u003e.amazonaws.com` in the `backend` block. See the\nFastly documentation on [Amazon S3][fastly-s3].\n\n[fastly-s3]: https://docs.fastly.com/en/guides/amazon-s3\n[fastly-cname]: https://docs.fastly.com/en/guides/adding-cname-records\n[fastly-conditionals]: https://docs.fastly.com/en/guides/using-conditions\n[fastly-sumologic]: https://developer.fastly.com/reference/api/logging/sumologic/\n[fastly-gcs]: https://developer.fastly.com/reference/api/logging/gcs/\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFastly Services can be imported using their service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx\n```\n\n By default, either the active version will be imported, or the latest version if no version is active. Alternatively, a specific version of the service can be selected by appending an `@` followed by the version number to the service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx@2\n```\n\n ","properties":{"acls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclAcl:ServiceVclAcl"}},"activate":{"type":"boolean","description":"Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service\n"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclBackend:ServiceVclBackend"}},"cacheSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider\n"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCondition:ServiceVclCondition"}},"defaultHost":{"type":"string","description":"The default hostname\n"},"defaultTtl":{"type":"integer","description":"The default Time-to-live (TTL) for requests\n"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDictionary:ServiceVclDictionary"}},"directors":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDirector:ServiceVclDirector"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDomain:ServiceVclDomain"},"description":"A set of Domain names to serve as entry points for your Service\n"},"dynamicsnippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet"}},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n"},"gzips":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclGzip:ServiceVclGzip"}},"headers":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHeader:ServiceVclHeader"}},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck"}},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub"}},"loggingHerokus":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create\n"},"requestSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting"}},"responseObjects":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclResponseObject:ServiceVclResponseObject"}},"snippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclSnippet:ServiceVclSnippet"}},"staleIfError":{"type":"boolean","description":"Enables serving a stale object if there is an error\n"},"staleIfErrorTtl":{"type":"integer","description":"The default time-to-live (TTL) for serving the stale object for the version\n"},"vcls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclVcl:ServiceVclVcl"}},"versionComment":{"type":"string","description":"Description field for the version\n"},"waf":{"$ref":"#/types/fastly:index/ServiceVclWaf:ServiceVclWaf"}},"required":["activeVersion","clonedVersion","domains","name"],"inputProperties":{"acls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclAcl:ServiceVclAcl"}},"activate":{"type":"boolean","description":"Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclBackend:ServiceVclBackend"}},"cacheSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting"}},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCondition:ServiceVclCondition"}},"defaultHost":{"type":"string","description":"The default hostname\n"},"defaultTtl":{"type":"integer","description":"The default Time-to-live (TTL) for requests\n"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDictionary:ServiceVclDictionary"}},"directors":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDirector:ServiceVclDirector"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDomain:ServiceVclDomain"},"description":"A set of Domain names to serve as entry points for your Service\n"},"dynamicsnippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet"}},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n"},"gzips":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclGzip:ServiceVclGzip"}},"headers":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHeader:ServiceVclHeader"}},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck"}},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub"}},"loggingHerokus":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create\n"},"requestSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting"}},"responseObjects":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclResponseObject:ServiceVclResponseObject"}},"snippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclSnippet:ServiceVclSnippet"}},"staleIfError":{"type":"boolean","description":"Enables serving a stale object if there is an error\n"},"staleIfErrorTtl":{"type":"integer","description":"The default time-to-live (TTL) for serving the stale object for the version\n"},"vcls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclVcl:ServiceVclVcl"}},"versionComment":{"type":"string","description":"Description field for the version\n"},"waf":{"$ref":"#/types/fastly:index/ServiceVclWaf:ServiceVclWaf"}},"requiredInputs":["domains"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceVcl resources.\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclAcl:ServiceVclAcl"}},"activate":{"type":"boolean","description":"Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"activeVersion":{"type":"integer","description":"The currently active version of your Fastly Service\n"},"backends":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclBackend:ServiceVclBackend"}},"cacheSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting"}},"clonedVersion":{"type":"integer","description":"The latest cloned version by the provider\n"},"comment":{"type":"string","description":"Description field for the service. Default `Managed by Terraform`\n"},"conditions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclCondition:ServiceVclCondition"}},"defaultHost":{"type":"string","description":"The default hostname\n"},"defaultTtl":{"type":"integer","description":"The default Time-to-live (TTL) for requests\n"},"dictionaries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDictionary:ServiceVclDictionary"}},"directors":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDirector:ServiceVclDirector"}},"domains":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDomain:ServiceVclDomain"},"description":"A set of Domain names to serve as entry points for your Service\n"},"dynamicsnippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet"}},"forceDestroy":{"type":"boolean","description":"Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n"},"gzips":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclGzip:ServiceVclGzip"}},"headers":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHeader:ServiceVclHeader"}},"healthchecks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck"}},"loggingBigqueries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery"}},"loggingBlobstorages":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage"}},"loggingCloudfiles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile"}},"loggingDatadogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog"}},"loggingDigitaloceans":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean"}},"loggingElasticsearches":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch"}},"loggingFtps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp"}},"loggingGcs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc"}},"loggingGooglepubsubs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub"}},"loggingHerokus":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus"}},"loggingHoneycombs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb"}},"loggingHttps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp"}},"loggingKafkas":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka"}},"loggingKineses":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese"}},"loggingLogentries":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry"}},"loggingLogglies":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly"}},"loggingLogshuttles":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle"}},"loggingNewrelics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic"}},"loggingOpenstacks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack"}},"loggingPapertrails":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail"}},"loggingS3s":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3"}},"loggingScalyrs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr"}},"loggingSftps":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp"}},"loggingSplunks":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk"}},"loggingSumologics":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic"}},"loggingSyslogs":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog"}},"name":{"type":"string","description":"The unique name for the Service to create\n"},"requestSettings":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting"}},"responseObjects":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclResponseObject:ServiceVclResponseObject"}},"snippets":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclSnippet:ServiceVclSnippet"}},"staleIfError":{"type":"boolean","description":"Enables serving a stale object if there is an error\n"},"staleIfErrorTtl":{"type":"integer","description":"The default time-to-live (TTL) for serving the stale object for the version\n"},"vcls":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceVclVcl:ServiceVclVcl"}},"versionComment":{"type":"string","description":"Description field for the version\n"},"waf":{"$ref":"#/types/fastly:index/ServiceVclWaf:ServiceVclWaf"}},"type":"object"}},"fastly:index/serviceWafConfiguration:ServiceWafConfiguration":{"description":"Defines a set of Web Application Firewall configuration options that can be used to populate a service WAF. This resource will configure rules, thresholds and other settings for a WAF.\n\n\n\u003e **Warning:** This provider will take precedence over any changes you make in the UI or API. Such changes are likely to be reversed if you run the provider again.\n\n\n## Adding a WAF to an existing service\n\n\u003e **Warning:** A two-phase change is required when adding a WAF to an existing service\n\nWhen adding a `waf` to an existing `fastly.ServiceVcl` and at the same time adding a `fastly.ServiceWafConfiguration`\nresource with `waf_id = fastly_service_vcl.demo.waf[0].waf_id` might result with the in the following error:\n\n\u003e fastly_service_vcl.demo.waf is empty list of object\n\nFor this scenario, it's recommended to split the changes into two distinct steps:\n\n1. Add the `waf` block to the `fastly.ServiceVcl` and apply the changes\n2. Add the `fastly.ServiceWafConfiguration` to the HCL and apply the changes\n\n\n## Import\n\nThis is an example of the import command being applied to the resource named `fastly_service_waf_configuration.waf` The resource ID should be the WAF ID.\n\n```sh\n $ pulumi import fastly:index/serviceWafConfiguration:ServiceWafConfiguration waf xxxxxxxxxxxxxxxxxxxx\n```\n\n ","properties":{"activate":{"type":"boolean","description":"Conditionally prevents a new firewall version from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"active":{"type":"boolean","description":"Whether a specific firewall version is currently deployed\n"},"allowedHttpVersions":{"type":"string","description":"Allowed HTTP versions\n"},"allowedMethods":{"type":"string","description":"A space-separated list of HTTP method names\n"},"allowedRequestContentType":{"type":"string","description":"Allowed request content types\n"},"allowedRequestContentTypeCharset":{"type":"string","description":"Allowed request content type charset\n"},"argLength":{"type":"integer","description":"The maximum number of arguments allowed\n"},"argNameLength":{"type":"integer","description":"The maximum allowed argument name length\n"},"clonedVersion":{"type":"integer","description":"The latest cloned firewall version by the provider\n"},"combinedFileSizes":{"type":"integer","description":"The maximum allowed size of all files\n"},"criticalAnomalyScore":{"type":"integer","description":"Score value to add for critical anomalies\n"},"crsValidateUtf8Encoding":{"type":"boolean","description":"CRS validate UTF8 encoding\n"},"errorAnomalyScore":{"type":"integer","description":"Score value to add for error anomalies\n"},"highRiskCountryCodes":{"type":"string","description":"A space-separated list of country codes in ISO 3166-1 (two-letter) format\n"},"httpViolationScoreThreshold":{"type":"integer","description":"HTTP violation threshold\n"},"inboundAnomalyScoreThreshold":{"type":"integer","description":"Inbound anomaly threshold\n"},"lfiScoreThreshold":{"type":"integer","description":"Local file inclusion attack threshold\n"},"maxFileSize":{"type":"integer","description":"The maximum allowed file size, in bytes\n"},"maxNumArgs":{"type":"integer","description":"The maximum number of arguments allowed\n"},"noticeAnomalyScore":{"type":"integer","description":"Score value to add for notice anomalies\n"},"number":{"type":"integer","description":"The WAF firewall version\n"},"paranoiaLevel":{"type":"integer","description":"The configured paranoia level\n"},"phpInjectionScoreThreshold":{"type":"integer","description":"PHP injection threshold\n"},"rceScoreThreshold":{"type":"integer","description":"Remote code execution threshold\n"},"restrictedExtensions":{"type":"string","description":"A space-separated list of allowed file extensions\n"},"restrictedHeaders":{"type":"string","description":"A space-separated list of allowed header names\n"},"rfiScoreThreshold":{"type":"integer","description":"Remote file inclusion attack threshold\n"},"ruleExclusions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceWafConfigurationRuleExclusion:ServiceWafConfigurationRuleExclusion"}},"rules":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceWafConfigurationRule:ServiceWafConfigurationRule"}},"sessionFixationScoreThreshold":{"type":"integer","description":"Session fixation attack threshold\n"},"sqlInjectionScoreThreshold":{"type":"integer","description":"SQL injection attack threshold\n"},"totalArgLength":{"type":"integer","description":"The maximum size of argument names and values\n"},"wafId":{"type":"string","description":"The ID of the Web Application Firewall that the configuration belongs to\n"},"warningAnomalyScore":{"type":"integer","description":"Score value to add for warning anomalies\n"},"xssScoreThreshold":{"type":"integer","description":"XSS attack threshold\n"}},"required":["active","allowedHttpVersions","allowedMethods","allowedRequestContentType","allowedRequestContentTypeCharset","argLength","argNameLength","clonedVersion","combinedFileSizes","criticalAnomalyScore","crsValidateUtf8Encoding","errorAnomalyScore","highRiskCountryCodes","httpViolationScoreThreshold","inboundAnomalyScoreThreshold","lfiScoreThreshold","maxFileSize","maxNumArgs","noticeAnomalyScore","number","paranoiaLevel","phpInjectionScoreThreshold","rceScoreThreshold","restrictedExtensions","restrictedHeaders","rfiScoreThreshold","sessionFixationScoreThreshold","sqlInjectionScoreThreshold","totalArgLength","wafId","warningAnomalyScore","xssScoreThreshold"],"inputProperties":{"activate":{"type":"boolean","description":"Conditionally prevents a new firewall version from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"allowedHttpVersions":{"type":"string","description":"Allowed HTTP versions\n"},"allowedMethods":{"type":"string","description":"A space-separated list of HTTP method names\n"},"allowedRequestContentType":{"type":"string","description":"Allowed request content types\n"},"allowedRequestContentTypeCharset":{"type":"string","description":"Allowed request content type charset\n"},"argLength":{"type":"integer","description":"The maximum number of arguments allowed\n"},"argNameLength":{"type":"integer","description":"The maximum allowed argument name length\n"},"combinedFileSizes":{"type":"integer","description":"The maximum allowed size of all files\n"},"criticalAnomalyScore":{"type":"integer","description":"Score value to add for critical anomalies\n"},"crsValidateUtf8Encoding":{"type":"boolean","description":"CRS validate UTF8 encoding\n"},"errorAnomalyScore":{"type":"integer","description":"Score value to add for error anomalies\n"},"highRiskCountryCodes":{"type":"string","description":"A space-separated list of country codes in ISO 3166-1 (two-letter) format\n"},"httpViolationScoreThreshold":{"type":"integer","description":"HTTP violation threshold\n"},"inboundAnomalyScoreThreshold":{"type":"integer","description":"Inbound anomaly threshold\n"},"lfiScoreThreshold":{"type":"integer","description":"Local file inclusion attack threshold\n"},"maxFileSize":{"type":"integer","description":"The maximum allowed file size, in bytes\n"},"maxNumArgs":{"type":"integer","description":"The maximum number of arguments allowed\n"},"noticeAnomalyScore":{"type":"integer","description":"Score value to add for notice anomalies\n"},"paranoiaLevel":{"type":"integer","description":"The configured paranoia level\n"},"phpInjectionScoreThreshold":{"type":"integer","description":"PHP injection threshold\n"},"rceScoreThreshold":{"type":"integer","description":"Remote code execution threshold\n"},"restrictedExtensions":{"type":"string","description":"A space-separated list of allowed file extensions\n"},"restrictedHeaders":{"type":"string","description":"A space-separated list of allowed header names\n"},"rfiScoreThreshold":{"type":"integer","description":"Remote file inclusion attack threshold\n"},"ruleExclusions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceWafConfigurationRuleExclusion:ServiceWafConfigurationRuleExclusion"}},"rules":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceWafConfigurationRule:ServiceWafConfigurationRule"}},"sessionFixationScoreThreshold":{"type":"integer","description":"Session fixation attack threshold\n"},"sqlInjectionScoreThreshold":{"type":"integer","description":"SQL injection attack threshold\n"},"totalArgLength":{"type":"integer","description":"The maximum size of argument names and values\n"},"wafId":{"type":"string","description":"The ID of the Web Application Firewall that the configuration belongs to\n"},"warningAnomalyScore":{"type":"integer","description":"Score value to add for warning anomalies\n"},"xssScoreThreshold":{"type":"integer","description":"XSS attack threshold\n"}},"requiredInputs":["wafId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceWafConfiguration resources.\n","properties":{"activate":{"type":"boolean","description":"Conditionally prevents a new firewall version from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true`\n"},"active":{"type":"boolean","description":"Whether a specific firewall version is currently deployed\n"},"allowedHttpVersions":{"type":"string","description":"Allowed HTTP versions\n"},"allowedMethods":{"type":"string","description":"A space-separated list of HTTP method names\n"},"allowedRequestContentType":{"type":"string","description":"Allowed request content types\n"},"allowedRequestContentTypeCharset":{"type":"string","description":"Allowed request content type charset\n"},"argLength":{"type":"integer","description":"The maximum number of arguments allowed\n"},"argNameLength":{"type":"integer","description":"The maximum allowed argument name length\n"},"clonedVersion":{"type":"integer","description":"The latest cloned firewall version by the provider\n"},"combinedFileSizes":{"type":"integer","description":"The maximum allowed size of all files\n"},"criticalAnomalyScore":{"type":"integer","description":"Score value to add for critical anomalies\n"},"crsValidateUtf8Encoding":{"type":"boolean","description":"CRS validate UTF8 encoding\n"},"errorAnomalyScore":{"type":"integer","description":"Score value to add for error anomalies\n"},"highRiskCountryCodes":{"type":"string","description":"A space-separated list of country codes in ISO 3166-1 (two-letter) format\n"},"httpViolationScoreThreshold":{"type":"integer","description":"HTTP violation threshold\n"},"inboundAnomalyScoreThreshold":{"type":"integer","description":"Inbound anomaly threshold\n"},"lfiScoreThreshold":{"type":"integer","description":"Local file inclusion attack threshold\n"},"maxFileSize":{"type":"integer","description":"The maximum allowed file size, in bytes\n"},"maxNumArgs":{"type":"integer","description":"The maximum number of arguments allowed\n"},"noticeAnomalyScore":{"type":"integer","description":"Score value to add for notice anomalies\n"},"number":{"type":"integer","description":"The WAF firewall version\n"},"paranoiaLevel":{"type":"integer","description":"The configured paranoia level\n"},"phpInjectionScoreThreshold":{"type":"integer","description":"PHP injection threshold\n"},"rceScoreThreshold":{"type":"integer","description":"Remote code execution threshold\n"},"restrictedExtensions":{"type":"string","description":"A space-separated list of allowed file extensions\n"},"restrictedHeaders":{"type":"string","description":"A space-separated list of allowed header names\n"},"rfiScoreThreshold":{"type":"integer","description":"Remote file inclusion attack threshold\n"},"ruleExclusions":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceWafConfigurationRuleExclusion:ServiceWafConfigurationRuleExclusion"}},"rules":{"type":"array","items":{"$ref":"#/types/fastly:index/ServiceWafConfigurationRule:ServiceWafConfigurationRule"}},"sessionFixationScoreThreshold":{"type":"integer","description":"Session fixation attack threshold\n"},"sqlInjectionScoreThreshold":{"type":"integer","description":"SQL injection attack threshold\n"},"totalArgLength":{"type":"integer","description":"The maximum size of argument names and values\n"},"wafId":{"type":"string","description":"The ID of the Web Application Firewall that the configuration belongs to\n"},"warningAnomalyScore":{"type":"integer","description":"Score value to add for warning anomalies\n"},"xssScoreThreshold":{"type":"integer","description":"XSS attack threshold\n"}},"type":"object"}},"fastly:index/tlsActivation:TlsActivation":{"description":"Enables TLS on a domain using a specified custom TLS certificate.\n\n\u003e **Note:** The Fastly service must be provisioned _prior_ to enabling TLS on it.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoServiceVcl = new fastly.ServiceVcl(\"demoServiceVcl\", {\n domains: [{\n name: \"example.com\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n }],\n forceDestroy: true,\n});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demoTlsPrivateKey\", {keyPem: \"...\"});\nconst demoTlsCertificate = new fastly.TlsCertificate(\"demoTlsCertificate\", {certificateBody: \"...\"}, {\n dependsOn: [demoTlsPrivateKey],\n});\nconst test = new fastly.TlsActivation(\"test\", {\n certificateId: demoTlsCertificate.id,\n domain: \"example.com\",\n}, {\n dependsOn: [demoServiceVcl],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_service_vcl = fastly.ServiceVcl(\"demoServiceVcl\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n )],\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n )],\n force_destroy=True)\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demoTlsPrivateKey\", key_pem=\"...\")\ndemo_tls_certificate = fastly.TlsCertificate(\"demoTlsCertificate\", certificate_body=\"...\",\nopts=pulumi.ResourceOptions(depends_on=[demo_tls_private_key]))\ntest = fastly.TlsActivation(\"test\",\n certificate_id=demo_tls_certificate.id,\n domain=\"example.com\",\n opts=pulumi.ResourceOptions(depends_on=[demo_service_vcl]))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoServiceVcl = new Fastly.ServiceVcl(\"demoServiceVcl\", new Fastly.ServiceVclArgs\n {\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n },\n },\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n },\n },\n ForceDestroy = true,\n });\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = \"...\",\n });\n var demoTlsCertificate = new Fastly.TlsCertificate(\"demoTlsCertificate\", new Fastly.TlsCertificateArgs\n {\n CertificateBody = \"...\",\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n demoTlsPrivateKey,\n },\n });\n var test = new Fastly.TlsActivation(\"test\", new Fastly.TlsActivationArgs\n {\n CertificateId = demoTlsCertificate.Id,\n Domain = \"example.com\",\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n demoServiceVcl,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoServiceVcl, err := fastly.NewServiceVcl(ctx, \"demoServiceVcl\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"demoTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: pulumi.String(\"...\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsCertificate, err := fastly.NewTlsCertificate(ctx, \"demoTlsCertificate\", \u0026fastly.TlsCertificateArgs{\n\t\t\tCertificateBody: pulumi.String(\"...\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemoTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"test\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: demoTlsCertificate.ID(),\n\t\t\tDomain: pulumi.String(\"example.com\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemoServiceVcl,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Warning:** Updating the `fastly.TlsPrivateKey`/`fastly.TlsCertificate` resources should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the `fastly.TlsActivation` can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA TLS activation can be imported using its ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsActivation:TlsActivation demo xxxxxxxx\n```\n\n ","properties":{"certificateId":{"type":"string","description":"ID of certificate to use. Must have the `domain` specified in the certificate's Subject Alternative Names.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic, or use the default one if missing.\n"},"createdAt":{"type":"string","description":"Time-stamp (GMT) when TLS was enabled.\n"},"domain":{"type":"string","description":"Domain to enable TLS on. Must be assigned to an existing Fastly Service.\n"}},"required":["certificateId","configurationId","createdAt","domain"],"inputProperties":{"certificateId":{"type":"string","description":"ID of certificate to use. Must have the `domain` specified in the certificate's Subject Alternative Names.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic, or use the default one if missing.\n"},"domain":{"type":"string","description":"Domain to enable TLS on. Must be assigned to an existing Fastly Service.\n"}},"requiredInputs":["certificateId","domain"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsActivation resources.\n","properties":{"certificateId":{"type":"string","description":"ID of certificate to use. Must have the `domain` specified in the certificate's Subject Alternative Names.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic, or use the default one if missing.\n"},"createdAt":{"type":"string","description":"Time-stamp (GMT) when TLS was enabled.\n"},"domain":{"type":"string","description":"Domain to enable TLS on. Must be assigned to an existing Fastly Service.\n"}},"type":"object"}},"fastly:index/tlsCertificate:TlsCertificate":{"description":"Uploads a custom TLS certificate to Fastly to be used to terminate TLS traffic.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst keyPrivateKey = new tls.PrivateKey(\"keyPrivateKey\", {algorithm: \"RSA\"});\nconst cert = new tls.SelfSignedCert(\"cert\", {\n keyAlgorithm: keyPrivateKey.algorithm,\n privateKeyPem: keyPrivateKey.privateKeyPem,\n subjects: [{\n commonName: \"example.com\",\n }],\n isCaCertificate: true,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n dnsNames: [\"example.com\"],\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"keyTlsPrivateKey\", {keyPem: keyPrivateKey.privateKeyPem});\nconst example = new fastly.TlsCertificate(\"example\", {certificateBody: cert.certPem}, {\n dependsOn: [keyTlsPrivateKey],\n});\n// The private key has to be present before the certificate can be uploaded\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nkey_private_key = tls.PrivateKey(\"keyPrivateKey\", algorithm=\"RSA\")\ncert = tls.SelfSignedCert(\"cert\",\n key_algorithm=key_private_key.algorithm,\n private_key_pem=key_private_key.private_key_pem,\n subjects=[tls.SelfSignedCertSubjectArgs(\n common_name=\"example.com\",\n )],\n is_ca_certificate=True,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ],\n dns_names=[\"example.com\"])\nkey_tls_private_key = fastly.TlsPrivateKey(\"keyTlsPrivateKey\", key_pem=key_private_key.private_key_pem)\nexample = fastly.TlsCertificate(\"example\", certificate_body=cert.cert_pem,\nopts=pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n# The private key has to be present before the certificate can be uploaded\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var cert = new Tls.SelfSignedCert(\"cert\", new Tls.SelfSignedCertArgs\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n DnsNames = \n {\n \"example.com\",\n },\n });\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n var example = new Fastly.TlsCertificate(\"example\", new Fastly.TlsCertificateArgs\n {\n CertificateBody = cert.CertPem,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n keyTlsPrivateKey,\n },\n });\n // The private key has to be present before the certificate can be uploaded\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyPrivateKey, err := tls.NewPrivateKey(ctx, \"keyPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcert, err := tls.NewSelfSignedCert(ctx, \"cert\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: keyPrivateKey.Algorithm,\n\t\t\tPrivateKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t\tSubjects: SelfSignedCertSubjectArray{\n\t\t\t\t\u0026SelfSignedCertSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate: pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"keyTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsCertificate(ctx, \"example\", \u0026fastly.TlsCertificateArgs{\n\t\t\tCertificateBody: cert.CertPem,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Warning:** Updating the `fastly.TlsPrivateKey`/`fastly.TlsCertificate` resources should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the `fastly.TlsActivation` can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsCertificate:TlsCertificate demo xxxxxxxxxxx\n```\n\n ","properties":{"certificateBody":{"type":"string","description":"PEM-formatted certificate, optionally including any intermediary certificates.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in the certificate's Subject Alternative Names (SAN) list.\n"},"issuedTo":{"type":"string","description":"The hostname for which a certificate was issued.\n"},"issuer":{"type":"string","description":"The certificate authority that issued the certificate.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"serialNumber":{"type":"string","description":"A value assigned by the issuer that is unique to a certificate.\n"},"signatureAlgorithm":{"type":"string","description":"The algorithm used to sign the certificate.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"required":["certificateBody","createdAt","domains","issuedTo","issuer","name","replace","serialNumber","signatureAlgorithm","updatedAt"],"inputProperties":{"certificateBody":{"type":"string","description":"PEM-formatted certificate, optionally including any intermediary certificates.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"}},"requiredInputs":["certificateBody"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsCertificate resources.\n","properties":{"certificateBody":{"type":"string","description":"PEM-formatted certificate, optionally including any intermediary certificates.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in the certificate's Subject Alternative Names (SAN) list.\n"},"issuedTo":{"type":"string","description":"The hostname for which a certificate was issued.\n"},"issuer":{"type":"string","description":"The certificate authority that issued the certificate.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"serialNumber":{"type":"string","description":"A value assigned by the issuer that is unique to a certificate.\n"},"signatureAlgorithm":{"type":"string","description":"The algorithm used to sign the certificate.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"type":"object"}},"fastly:index/tlsPlatformCertificate:TlsPlatformCertificate":{"description":"Uploads a TLS certificate to the Fastly Platform TLS service.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage with self-signed CA:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst caKey = new tls.PrivateKey(\"caKey\", {algorithm: \"RSA\"});\nconst keyPrivateKey = new tls.PrivateKey(\"keyPrivateKey\", {algorithm: \"RSA\"});\nconst ca = new tls.SelfSignedCert(\"ca\", {\n keyAlgorithm: caKey.algorithm,\n privateKeyPem: caKey.privateKeyPem,\n subjects: [{\n commonName: \"Example CA\",\n }],\n isCaCertificate: true,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n});\nconst example = new tls.CertRequest(\"example\", {\n keyAlgorithm: keyPrivateKey.algorithm,\n privateKeyPem: keyPrivateKey.privateKeyPem,\n subjects: [{\n commonName: \"example.com\",\n }],\n dnsNames: [\n \"example.com\",\n \"www.example.com\",\n ],\n});\nconst certLocallySignedCert = new tls.LocallySignedCert(\"certLocallySignedCert\", {\n certRequestPem: example.certRequestPem,\n caKeyAlgorithm: caKey.algorithm,\n caPrivateKeyPem: caKey.privateKeyPem,\n caCertPem: ca.certPem,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n});\nconst config = fastly.getTlsConfiguration({\n tlsService: \"PLATFORM\",\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"keyTlsPrivateKey\", {keyPem: keyPrivateKey.privateKeyPem});\nconst certTlsPlatformCertificate = new fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", {\n certificateBody: certLocallySignedCert.certPem,\n intermediatesBlob: ca.certPem,\n configurationId: config.then(config =\u003e config.id),\n allowUntrustedRoot: true,\n}, {\n dependsOn: [keyTlsPrivateKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nca_key = tls.PrivateKey(\"caKey\", algorithm=\"RSA\")\nkey_private_key = tls.PrivateKey(\"keyPrivateKey\", algorithm=\"RSA\")\nca = tls.SelfSignedCert(\"ca\",\n key_algorithm=ca_key.algorithm,\n private_key_pem=ca_key.private_key_pem,\n subjects=[tls.SelfSignedCertSubjectArgs(\n common_name=\"Example CA\",\n )],\n is_ca_certificate=True,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ])\nexample = tls.CertRequest(\"example\",\n key_algorithm=key_private_key.algorithm,\n private_key_pem=key_private_key.private_key_pem,\n subjects=[tls.CertRequestSubjectArgs(\n common_name=\"example.com\",\n )],\n dns_names=[\n \"example.com\",\n \"www.example.com\",\n ])\ncert_locally_signed_cert = tls.LocallySignedCert(\"certLocallySignedCert\",\n cert_request_pem=example.cert_request_pem,\n ca_key_algorithm=ca_key.algorithm,\n ca_private_key_pem=ca_key.private_key_pem,\n ca_cert_pem=ca.cert_pem,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ])\nconfig = fastly.get_tls_configuration(tls_service=\"PLATFORM\")\nkey_tls_private_key = fastly.TlsPrivateKey(\"keyTlsPrivateKey\", key_pem=key_private_key.private_key_pem)\ncert_tls_platform_certificate = fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\",\n certificate_body=cert_locally_signed_cert.cert_pem,\n intermediates_blob=ca.cert_pem,\n configuration_id=config.id,\n allow_untrusted_root=True,\n opts=pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var caKey = new Tls.PrivateKey(\"caKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var ca = new Tls.SelfSignedCert(\"ca\", new Tls.SelfSignedCertArgs\n {\n KeyAlgorithm = caKey.Algorithm,\n PrivateKeyPem = caKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"Example CA\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n var example = new Tls.CertRequest(\"example\", new Tls.CertRequestArgs\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.CertRequestSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n DnsNames = \n {\n \"example.com\",\n \"www.example.com\",\n },\n });\n var certLocallySignedCert = new Tls.LocallySignedCert(\"certLocallySignedCert\", new Tls.LocallySignedCertArgs\n {\n CertRequestPem = example.CertRequestPem,\n CaKeyAlgorithm = caKey.Algorithm,\n CaPrivateKeyPem = caKey.PrivateKeyPem,\n CaCertPem = ca.CertPem,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n var config = Output.Create(Fastly.GetTlsConfiguration.InvokeAsync(new Fastly.GetTlsConfigurationArgs\n {\n TlsService = \"PLATFORM\",\n }));\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n var certTlsPlatformCertificate = new Fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", new Fastly.TlsPlatformCertificateArgs\n {\n CertificateBody = certLocallySignedCert.CertPem,\n IntermediatesBlob = ca.CertPem,\n ConfigurationId = config.Apply(config =\u003e config.Id),\n AllowUntrustedRoot = true,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n keyTlsPrivateKey,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcaKey, err := tls.NewPrivateKey(ctx, \"caKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyPrivateKey, err := tls.NewPrivateKey(ctx, \"keyPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tca, err := tls.NewSelfSignedCert(ctx, \"ca\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: caKey.Algorithm,\n\t\t\tPrivateKeyPem: caKey.PrivateKeyPem,\n\t\t\tSubjects: SelfSignedCertSubjectArray{\n\t\t\t\t\u0026SelfSignedCertSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"Example CA\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate: pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := tls.NewCertRequest(ctx, \"example\", \u0026tls.CertRequestArgs{\n\t\t\tKeyAlgorithm: keyPrivateKey.Algorithm,\n\t\t\tPrivateKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t\tSubjects: CertRequestSubjectArray{\n\t\t\t\t\u0026CertRequestSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\tpulumi.String(\"www.example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcertLocallySignedCert, err := tls.NewLocallySignedCert(ctx, \"certLocallySignedCert\", \u0026tls.LocallySignedCertArgs{\n\t\t\tCertRequestPem: example.CertRequestPem,\n\t\t\tCaKeyAlgorithm: caKey.Algorithm,\n\t\t\tCaPrivateKeyPem: caKey.PrivateKeyPem,\n\t\t\tCaCertPem: ca.CertPem,\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconfig, err := fastly.GetTlsConfiguration(ctx, \u0026GetTlsConfigurationArgs{\n\t\t\tTlsService: pulumi.StringRef(\"PLATFORM\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"keyTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPlatformCertificate(ctx, \"certTlsPlatformCertificate\", \u0026fastly.TlsPlatformCertificateArgs{\n\t\t\tCertificateBody: certLocallySignedCert.CertPem,\n\t\t\tIntermediatesBlob: ca.CertPem,\n\t\t\tConfigurationId: pulumi.String(config.Id),\n\t\t\tAllowUntrustedRoot: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsPlatformCertificate:TlsPlatformCertificate demo xxxxxxxxxxx\n```\n\n ","properties":{"allowUntrustedRoot":{"type":"boolean","description":"Disable checking whether the root of the certificate chain is trusted. Useful for development purposes to allow use of self-signed CAs. Defaults to false. Write-only on create.\n"},"certificateBody":{"type":"string","description":"PEM-formatted certificate.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in any certificate's Subject Alternative Names (SAN) list.\n"},"intermediatesBlob":{"type":"string","description":"PEM-formatted certificate chain from the `certificate_body` to its root.\n"},"notAfter":{"type":"string","description":"Timestamp (GMT) when the certificate will expire.\n"},"notBefore":{"type":"string","description":"Timestamp (GMT) when the certificate will become valid.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"required":["certificateBody","configurationId","createdAt","domains","intermediatesBlob","notAfter","notBefore","replace","updatedAt"],"inputProperties":{"allowUntrustedRoot":{"type":"boolean","description":"Disable checking whether the root of the certificate chain is trusted. Useful for development purposes to allow use of self-signed CAs. Defaults to false. Write-only on create.\n"},"certificateBody":{"type":"string","description":"PEM-formatted certificate.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic.\n"},"intermediatesBlob":{"type":"string","description":"PEM-formatted certificate chain from the `certificate_body` to its root.\n"}},"requiredInputs":["certificateBody","configurationId","intermediatesBlob"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsPlatformCertificate resources.\n","properties":{"allowUntrustedRoot":{"type":"boolean","description":"Disable checking whether the root of the certificate chain is trusted. Useful for development purposes to allow use of self-signed CAs. Defaults to false. Write-only on create.\n"},"certificateBody":{"type":"string","description":"PEM-formatted certificate.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration to be used to terminate TLS traffic.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"All the domains (including wildcard domains) that are listed in any certificate's Subject Alternative Names (SAN) list.\n"},"intermediatesBlob":{"type":"string","description":"PEM-formatted certificate chain from the `certificate_body` to its root.\n"},"notAfter":{"type":"string","description":"Timestamp (GMT) when the certificate will expire.\n"},"notBefore":{"type":"string","description":"Timestamp (GMT) when the certificate will become valid.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"type":"object"}},"fastly:index/tlsPrivateKey:TlsPrivateKey":{"description":"Uploads a Custom TLS Private Key to Fastly. This can be combined with a `fastly.TlsCertificate` resource to provide a TLS Certificate able to be applied to a Fastly Service.\n\nThe Private Key resource requires a key in PEM format, and a name to identify it.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst demoPrivateKey = new tls.PrivateKey(\"demoPrivateKey\", {algorithm: \"RSA\"});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demoTlsPrivateKey\", {keyPem: demoPrivateKey.privateKeyPem});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\ndemo_private_key = tls.PrivateKey(\"demoPrivateKey\", algorithm=\"RSA\")\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demoTlsPrivateKey\", key_pem=demo_private_key.private_key_pem)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoPrivateKey = new Tls.PrivateKey(\"demoPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = demoPrivateKey.PrivateKeyPem,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoPrivateKey, err := tls.NewPrivateKey(ctx, \"demoPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPrivateKey(ctx, \"demoTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: demoPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Private Key can be imported using its ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsPrivateKey:TlsPrivateKey demo xxxxxxxxxxx\n```\n\n ","properties":{"createdAt":{"type":"string","description":"Time-stamp (GMT) when the private key was created.\n"},"keyLength":{"type":"integer","description":"The key length used to generate the private key.\n"},"keyPem":{"type":"string","description":"Private key in PEM format.\n"},"keyType":{"type":"string","description":"The algorithm used to generate the private key. Must be RSA.\n"},"name":{"type":"string","description":"Customisable name of the private key.\n"},"publicKeySha1":{"type":"string","description":"Useful for safely identifying the key.\n"},"replace":{"type":"boolean","description":"Whether Fastly recommends replacing this private key.\n"}},"required":["createdAt","keyLength","keyPem","keyType","name","publicKeySha1","replace"],"inputProperties":{"keyPem":{"type":"string","description":"Private key in PEM format.\n"},"name":{"type":"string","description":"Customisable name of the private key.\n"}},"requiredInputs":["keyPem"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsPrivateKey resources.\n","properties":{"createdAt":{"type":"string","description":"Time-stamp (GMT) when the private key was created.\n"},"keyLength":{"type":"integer","description":"The key length used to generate the private key.\n"},"keyPem":{"type":"string","description":"Private key in PEM format.\n"},"keyType":{"type":"string","description":"The algorithm used to generate the private key. Must be RSA.\n"},"name":{"type":"string","description":"Customisable name of the private key.\n"},"publicKeySha1":{"type":"string","description":"Useful for safely identifying the key.\n"},"replace":{"type":"boolean","description":"Whether Fastly recommends replacing this private key.\n"}},"type":"object"}},"fastly:index/tlsSubscription:TlsSubscription":{"description":"Enables TLS on a domain using a certificate managed by Fastly.\n\nDNS records need to be modified on the domain being secured, in order to respond to the ACME domain ownership challenge.\n\nThere are two options for doing this: the `managed_dns_challenges`, which is the default method; and the `managed_http_challenges`, which points production traffic to Fastly.\n\n\u003e See the [Fastly documentation](https://docs.fastly.com/en/guides/serving-https-traffic-using-fastly-managed-certificates#verifying-domain-ownership) for more information on verifying domain ownership.\n\nThe example below demonstrates usage with AWS Route53 to configure DNS, and the `fastly.TlsSubscriptionValidation` resource to wait for validation to complete.\n\n\n## Import\n\nA subscription can be imported using its Fastly subscription ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsSubscription:TlsSubscription demo xxxxxxxxxxx\n```\n\n ","properties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for your subscription. Valid values are `lets-encrypt` or `globalsign`.\n"},"certificateId":{"type":"string","description":"The certificate ID associated with the subscription.\n"},"commonName":{"type":"string","description":"The common name associated with the subscription generated by Fastly TLS. If you do not pass a common name on create, we will default to the first TLS domain included. If provided, the domain chosen as the common name must be included in TLS domains.\n"},"configurationId":{"type":"string","description":"The ID of the set of TLS configuration options that apply to the enabled domains on this subscription.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the subscription was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"forceDestroy":{"type":"boolean","description":"Always delete subscription, even when active domains are present. Defaults to false.\n"},"forceUpdate":{"type":"boolean","description":"Always update subscription, even when active domains are present. Defaults to false.\n"},"managedDnsChallenge":{"type":"object","additionalProperties":{"type":"string"},"description":"The details required to configure DNS to respond to ACME DNS challenge in order to verify domain ownership.\n","deprecationMessage":"Use 'managed_dns_challenges' attribute instead"},"managedDnsChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedDnsChallenge:TlsSubscriptionManagedDnsChallenge"},"description":"A list of options for configuring DNS to respond to ACME DNS challenge in order to verify domain ownership.\n"},"managedHttpChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedHttpChallenge:TlsSubscriptionManagedHttpChallenge"},"description":"A list of options for configuring DNS to respond to ACME HTTP challenge in order to verify domain ownership. Best accessed through a `for` expression to filter the relevant record.\n"},"state":{"type":"string","description":"The current state of the subscription. The list of possible states are: `pending`, `processing`, `issued`, and `renewing`.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the subscription was updated.\n"}},"required":["certificateAuthority","certificateId","commonName","configurationId","createdAt","domains","managedDnsChallenge","managedDnsChallenges","managedHttpChallenges","state","updatedAt"],"inputProperties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for your subscription. Valid values are `lets-encrypt` or `globalsign`.\n"},"commonName":{"type":"string","description":"The common name associated with the subscription generated by Fastly TLS. If you do not pass a common name on create, we will default to the first TLS domain included. If provided, the domain chosen as the common name must be included in TLS domains.\n"},"configurationId":{"type":"string","description":"The ID of the set of TLS configuration options that apply to the enabled domains on this subscription.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"forceDestroy":{"type":"boolean","description":"Always delete subscription, even when active domains are present. Defaults to false.\n"},"forceUpdate":{"type":"boolean","description":"Always update subscription, even when active domains are present. Defaults to false.\n"}},"requiredInputs":["certificateAuthority","domains"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsSubscription resources.\n","properties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for your subscription. Valid values are `lets-encrypt` or `globalsign`.\n"},"certificateId":{"type":"string","description":"The certificate ID associated with the subscription.\n"},"commonName":{"type":"string","description":"The common name associated with the subscription generated by Fastly TLS. If you do not pass a common name on create, we will default to the first TLS domain included. If provided, the domain chosen as the common name must be included in TLS domains.\n"},"configurationId":{"type":"string","description":"The ID of the set of TLS configuration options that apply to the enabled domains on this subscription.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the subscription was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"forceDestroy":{"type":"boolean","description":"Always delete subscription, even when active domains are present. Defaults to false.\n"},"forceUpdate":{"type":"boolean","description":"Always update subscription, even when active domains are present. Defaults to false.\n"},"managedDnsChallenge":{"type":"object","additionalProperties":{"type":"string"},"description":"The details required to configure DNS to respond to ACME DNS challenge in order to verify domain ownership.\n","deprecationMessage":"Use 'managed_dns_challenges' attribute instead"},"managedDnsChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedDnsChallenge:TlsSubscriptionManagedDnsChallenge"},"description":"A list of options for configuring DNS to respond to ACME DNS challenge in order to verify domain ownership.\n"},"managedHttpChallenges":{"type":"array","items":{"$ref":"#/types/fastly:index/TlsSubscriptionManagedHttpChallenge:TlsSubscriptionManagedHttpChallenge"},"description":"A list of options for configuring DNS to respond to ACME HTTP challenge in order to verify domain ownership. Best accessed through a `for` expression to filter the relevant record.\n"},"state":{"type":"string","description":"The current state of the subscription. The list of possible states are: `pending`, `processing`, `issued`, and `renewing`.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the subscription was updated.\n"}},"type":"object"}},"fastly:index/tlsSubscriptionValidation:TlsSubscriptionValidation":{"description":"This resource represents a successful validation of a Fastly TLS Subscription in concert with other resources.\n\nMost commonly, this resource is used together with a resource for a DNS record and `fastly.TlsSubscription` to request a DNS validated certificate, deploy the required validation records and wait for validation to complete.\n\n\u003e **Warning:** This resource implements a part of the validation workflow. It does not represent a real-world entity in Fastly, therefore changing or deleting this resource on its own has no immediate effect.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nDNS Validation with AWS Route53:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst domainName = \"example.com\";\nconst exampleServiceVcl = new fastly.ServiceVcl(\"exampleServiceVcl\", {\n domains: [{\n name: domainName,\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n }],\n forceDestroy: true,\n});\nconst exampleTlsSubscription = new fastly.TlsSubscription(\"exampleTlsSubscription\", {\n domains: exampleServiceVcl.domains.apply(domains =\u003e domains.map(domain =\u003e domain.name)),\n certificateAuthority: \"lets-encrypt\",\n});\nconst demo = aws.route53.getZone({\n name: domainName,\n privateZone: false,\n});\n// Set up DNS record for managed DNS domain validation method\nconst domainValidation = new aws.route53.Record(\"domainValidation\", {\n name: exampleTlsSubscription.managedDnsChallenge.recordName,\n type: exampleTlsSubscription.managedDnsChallenge.recordType,\n zoneId: demo.then(demo =\u003e demo.id),\n allowOverwrite: true,\n records: [exampleTlsSubscription.managedDnsChallenge.recordValue],\n ttl: 60,\n});\n// Resource that other resources can depend on if they require the certificate to be issued\nconst exampleTlsSubscriptionValidation = new fastly.TlsSubscriptionValidation(\"exampleTlsSubscriptionValidation\", {subscriptionId: exampleTlsSubscription.id}, {\n dependsOn: [domainValidation],\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\n\ndomain_name = \"example.com\"\nexample_service_vcl = fastly.ServiceVcl(\"exampleServiceVcl\",\n domains=[fastly.ServiceVclDomainArgs(\n name=domain_name,\n )],\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n )],\n force_destroy=True)\nexample_tls_subscription = fastly.TlsSubscription(\"exampleTlsSubscription\",\n domains=example_service_vcl.domains.apply(lambda domains: [domain.name for domain in domains]),\n certificate_authority=\"lets-encrypt\")\ndemo = aws.route53.get_zone(name=domain_name,\n private_zone=False)\n# Set up DNS record for managed DNS domain validation method\ndomain_validation = aws.route53.Record(\"domainValidation\",\n name=example_tls_subscription.managed_dns_challenge[\"recordName\"],\n type=aws.route53/recordtype.RecordType(example_tls_subscription.managed_dns_challenge[\"recordType\"]),\n zone_id=demo.id,\n allow_overwrite=True,\n records=[example_tls_subscription.managed_dns_challenge[\"recordValue\"]],\n ttl=60)\n# Resource that other resources can depend on if they require the certificate to be issued\nexample_tls_subscription_validation = fastly.TlsSubscriptionValidation(\"exampleTlsSubscriptionValidation\", subscription_id=example_tls_subscription.id,\nopts=pulumi.ResourceOptions(depends_on=[domain_validation]))\n```\n{{% /example %}}\n{{% /examples %}}","properties":{"subscriptionId":{"type":"string","description":"The ID of the TLS Subscription that should be validated.\n"}},"required":["subscriptionId"],"inputProperties":{"subscriptionId":{"type":"string","description":"The ID of the TLS Subscription that should be validated.\n"}},"requiredInputs":["subscriptionId"],"stateInputs":{"description":"Input properties used for looking up and filtering TlsSubscriptionValidation resources.\n","properties":{"subscriptionId":{"type":"string","description":"The ID of the TLS Subscription that should be validated.\n"}},"type":"object"}},"fastly:index/user:User":{"description":"Provides a Fastly User, representing the configuration for a user account for interacting with Fastly.\n\nThe User resource requires a login and name, and optionally a role.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.User(\"demo\", {\n login: \"demo@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.User(\"demo\", login=\"demo@example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.User(\"demo\", new Fastly.UserArgs\n {\n Login = \"demo@example.com\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewUser(ctx, \"demo\", \u0026fastly.UserArgs{\n\t\t\tLogin: pulumi.String(\"demo@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Fastly User can be imported using their user ID, e.g.\n\n```sh\n $ pulumi import fastly:index/user:User demo xxxxxxxxxxxxxxxxxxxx\n```\n\n ","properties":{"login":{"type":"string","description":"The email address, which is the login name, of the User\n"},"name":{"type":"string","description":"The real life name of the user\n"},"role":{"type":"string","description":"The role of this user. Can be `user` (the default), `billing`, `engineer`, or `superuser`. For detailed information on the abilities granted to each role, see [Fastly's Documentation on User roles](https://docs.fastly.com/en/guides/configuring-user-roles-and-permissions#user-roles-and-what-they-can-do)\n"}},"required":["login","name"],"inputProperties":{"login":{"type":"string","description":"The email address, which is the login name, of the User\n"},"name":{"type":"string","description":"The real life name of the user\n"},"role":{"type":"string","description":"The role of this user. Can be `user` (the default), `billing`, `engineer`, or `superuser`. For detailed information on the abilities granted to each role, see [Fastly's Documentation on User roles](https://docs.fastly.com/en/guides/configuring-user-roles-and-permissions#user-roles-and-what-they-can-do)\n"}},"requiredInputs":["login"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"login":{"type":"string","description":"The email address, which is the login name, of the User\n"},"name":{"type":"string","description":"The real life name of the user\n"},"role":{"type":"string","description":"The role of this user. Can be `user` (the default), `billing`, `engineer`, or `superuser`. For detailed information on the abilities granted to each role, see [Fastly's Documentation on User roles](https://docs.fastly.com/en/guides/configuring-user-roles-and-permissions#user-roles-and-what-they-can-do)\n"}},"type":"object"}}},"functions":{"fastly:index/getDatacenters:getDatacenters":{"description":"Use this data source to get the list of the [Fastly datacenters](https://developer.fastly.com/reference/api/utils/pops/).\n","outputs":{"description":"A collection of values returned by getDatacenters.\n","properties":{"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"pops":{"type":"array","items":{"$ref":"#/types/fastly:index/getDatacentersPop:getDatacentersPop"},"description":"A list of all Fastly POPs.\n"}},"type":"object","required":["pops","id"]}},"fastly:index/getFastlyIpRanges:getFastlyIpRanges":{"description":"Use this data source to get the [IP ranges](https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges) of Fastly edge nodes.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst fastly = fastly.getFastlyIpRanges({});\nconst fromFastly = new aws.ec2.SecurityGroup(\"fromFastly\", {ingress: [{\n fromPort: 443,\n toPort: 443,\n protocol: \"tcp\",\n cidrBlocks: fastly.then(fastly =\u003e fastly.cidrBlocks),\n ipv6CidrBlocks: fastly.then(fastly =\u003e fastly.ipv6CidrBlocks),\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\n\nfastly = fastly.get_fastly_ip_ranges()\nfrom_fastly = aws.ec2.SecurityGroup(\"fromFastly\", ingress=[aws.ec2.SecurityGroupIngressArgs(\n from_port=443,\n to_port=443,\n protocol=\"tcp\",\n cidr_blocks=fastly.cidr_blocks,\n ipv6_cidr_blocks=fastly.ipv6_cidr_blocks,\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var fastly = Output.Create(Fastly.GetFastlyIpRanges.InvokeAsync());\n var fromFastly = new Aws.Ec2.SecurityGroup(\"fromFastly\", new Aws.Ec2.SecurityGroupArgs\n {\n Ingress = \n {\n new Aws.Ec2.Inputs.SecurityGroupIngressArgs\n {\n FromPort = 443,\n ToPort = 443,\n Protocol = \"tcp\",\n CidrBlocks = fastly.Apply(fastly =\u003e fastly.CidrBlocks),\n Ipv6CidrBlocks = fastly.Apply(fastly =\u003e fastly.Ipv6CidrBlocks),\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfastly, err := fastly.GetFastlyIpRanges(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewSecurityGroup(ctx, \"fromFastly\", \u0026ec2.SecurityGroupArgs{\n\t\t\tIngress: ec2.SecurityGroupIngressArray{\n\t\t\t\t\u0026ec2.SecurityGroupIngressArgs{\n\t\t\t\t\tFromPort: pulumi.Int(443),\n\t\t\t\t\tToPort: pulumi.Int(443),\n\t\t\t\t\tProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\tCidrBlocks: interface{}(fastly.CidrBlocks),\n\t\t\t\t\tIpv6CidrBlocks: interface{}(fastly.Ipv6CidrBlocks),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n[1]: https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges\n{{% /example %}}\n{{% /examples %}}","outputs":{"description":"A collection of values returned by getFastlyIpRanges.\n","properties":{"cidrBlocks":{"type":"array","items":{"type":"string"},"description":"The lexically ordered list of ipv4 CIDR blocks.\n"},"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ipv6CidrBlocks":{"type":"array","items":{"type":"string"},"description":"The lexically ordered list of ipv6 CIDR blocks.\n"}},"type":"object","required":["cidrBlocks","ipv6CidrBlocks","id"]}},"fastly:index/getServices:getServices":{"description":"Use this data source to get the list of the [Fastly services](https://developer.fastly.com/reference/api/services/service/).\n","outputs":{"description":"A collection of values returned by getServices.\n","properties":{"details":{"type":"array","items":{"$ref":"#/types/fastly:index/getServicesDetail:getServicesDetail"},"description":"A detailed list of Fastly services in your account. This is limited to the services the API token can read.\n"},"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ids":{"type":"array","items":{"type":"string"},"description":"A list of service IDs in your account. This is limited to the services the API token can read.\n"}},"type":"object","required":["details","ids","id"]}},"fastly:index/getTlsActivation:getTlsActivation":{"description":"Use this data source to get information on a TLS activation, including the certificate used, and the domain on which TLS was enabled.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsActivation({\n domain: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_activation(domain=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsActivation.InvokeAsync(new Fastly.GetTlsActivationArgs\n {\n Domain = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsActivation(ctx, \u0026GetTlsActivationArgs{\n\t\t\tDomain: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking getTlsActivation.\n","properties":{"certificateId":{"type":"string","description":"ID of the TLS Certificate used.\n"},"configurationId":{"type":"string","description":"ID of the TLS Configuration used.\n"},"domain":{"type":"string","description":"Domain that TLS was enabled on.\n"},"id":{"type":"string","description":"Fastly Activation ID. Conflicts with all other filters.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsActivation.\n","properties":{"certificateId":{"type":"string","description":"ID of the TLS Certificate used.\n"},"configurationId":{"type":"string","description":"ID of the TLS Configuration used.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when TLS was enabled.\n"},"domain":{"type":"string","description":"Domain that TLS was enabled on.\n"},"id":{"type":"string","description":"Fastly Activation ID. Conflicts with all other filters.\n"}},"type":"object","required":["certificateId","configurationId","createdAt","domain","id"]}},"fastly:index/getTlsActivationIds:getTlsActivationIds":{"description":"Use this data source to get the list of TLS Activation identifiers in Fastly.\n","inputs":{"description":"A collection of arguments for invoking getTlsActivationIds.\n","properties":{"certificateId":{"type":"string","description":"ID of TLS certificate used to filter activations\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsActivationIds.\n","properties":{"certificateId":{"type":"string","description":"ID of TLS certificate used to filter activations\n"},"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ids":{"type":"array","items":{"type":"string"},"description":"List of IDs of the TLS Activations.\n"}},"type":"object","required":["ids","id"]}},"fastly:index/getTlsCertificate:getTlsCertificate":{"description":"Use this data source to get information of a TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsCertificate({\n name: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_certificate(name=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsCertificate.InvokeAsync(new Fastly.GetTlsCertificateArgs\n {\n Name = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsCertificate(ctx, \u0026GetTlsCertificateArgs{\n\t\t\tName: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking getTlsCertificate.\n","properties":{"domains":{"type":"array","items":{"type":"string"},"description":"Domains that are listed in any certificates' Subject Alternative Names (SAN) list.\n"},"id":{"type":"string","description":"Unique ID assigned to certificate by Fastly\n"},"issuedTo":{"type":"string","description":"The hostname for which a certificate was issued.\n"},"issuer":{"type":"string","description":"The certificate authority that issued the certificate.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsCertificate.\n","properties":{"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created\n"},"domains":{"type":"array","items":{"type":"string"},"description":"Domains that are listed in any certificates' Subject Alternative Names (SAN) list.\n"},"id":{"type":"string","description":"Unique ID assigned to certificate by Fastly\n"},"issuedTo":{"type":"string","description":"The hostname for which a certificate was issued.\n"},"issuer":{"type":"string","description":"The certificate authority that issued the certificate.\n"},"name":{"type":"string","description":"Human-readable name used to identify the certificate. Defaults to the certificate's Common Name or first Subject Alternative Name entry.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation\n"},"serialNumber":{"type":"string","description":"A value assigned by the issuer that is unique to a certificate\n"},"signatureAlgorithm":{"type":"string","description":"The algorithm used to sign the certificate\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated\n"}},"type":"object","required":["createdAt","domains","id","issuedTo","issuer","name","replace","serialNumber","signatureAlgorithm","updatedAt"]}},"fastly:index/getTlsCertificateIds:getTlsCertificateIds":{"description":"Use this data source to get the IDs of available TLS certificates for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsCertificateIds = fastly.getTlsCertificateIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {certificateId: exampleTlsCertificateIds.then(exampleTlsCertificateIds =\u003e exampleTlsCertificateIds.ids?[0])});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_certificate_ids = fastly.get_tls_certificate_ids()\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", certificate_id=example_tls_certificate_ids.ids[0])\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsCertificateIds = Output.Create(Fastly.GetTlsCertificateIds.InvokeAsync());\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n CertificateId = exampleTlsCertificateIds.Apply(exampleTlsCertificateIds =\u003e exampleTlsCertificateIds.Ids?[0]),\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsCertificateIds, err := fastly.GetTlsCertificateIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: pulumi.String(exampleTlsCertificateIds.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","outputs":{"description":"A collection of values returned by getTlsCertificateIds.\n","properties":{"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ids":{"type":"array","items":{"type":"string"},"description":"List of IDs corresponding to Custom TLS certificates.\n"}},"type":"object","required":["ids","id"]}},"fastly:index/getTlsConfiguration:getTlsConfiguration":{"description":"Use this data source to get the ID of a TLS configuration for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsConfiguration = fastly.getTlsConfiguration({\n \"default\": true,\n});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {configurationId: exampleTlsConfiguration.then(exampleTlsConfiguration =\u003e exampleTlsConfiguration.id)});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_configuration = fastly.get_tls_configuration(default=True)\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", configuration_id=example_tls_configuration.id)\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsConfiguration = Output.Create(Fastly.GetTlsConfiguration.InvokeAsync(new Fastly.GetTlsConfigurationArgs\n {\n Default = true,\n }));\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n ConfigurationId = exampleTlsConfiguration.Apply(exampleTlsConfiguration =\u003e exampleTlsConfiguration.Id),\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsConfiguration, err := fastly.GetTlsConfiguration(ctx, \u0026GetTlsConfigurationArgs{\n\t\t\tDefault: pulumi.BoolRef(true),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.String(exampleTlsConfiguration.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking getTlsConfiguration.\n","properties":{"default":{"type":"boolean","description":"Signifies whether Fastly will use this configuration as a default when creating a new TLS activation.\n"},"httpProtocols":{"type":"array","items":{"type":"string"},"description":"HTTP protocols available on the TLS configuration.\n"},"id":{"type":"string","description":"ID of the TLS configuration obtained from the Fastly API or another data source. Conflicts with all the other filters.\n"},"name":{"type":"string","description":"Custom name of the TLS configuration.\n"},"tlsProtocols":{"type":"array","items":{"type":"string"},"description":"TLS protocols available on the TLS configuration.\n"},"tlsService":{"type":"string","description":"Whether the configuration should support the `PLATFORM` or `CUSTOM` TLS service.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsConfiguration.\n","properties":{"createdAt":{"type":"string","description":"Timestamp (GMT) when the configuration was created.\n"},"default":{"type":"boolean","description":"Signifies whether Fastly will use this configuration as a default when creating a new TLS activation.\n"},"dnsRecords":{"type":"array","items":{"$ref":"#/types/fastly:index/getTlsConfigurationDnsRecord:getTlsConfigurationDnsRecord"},"description":"The available DNS addresses that can be used to enable TLS for a domain. DNS must be configured for a domain for TLS handshakes to succeed. If enabling TLS on an apex domain (e.g. `example.com`) you must create four A records (or four AAAA records for IPv6 support) using the displayed global A record's IP addresses with your DNS provider. For subdomains and wildcard domains (e.g. `www.example.com` or `*.example.com`) you will need to create a relevant CNAME record.\n"},"httpProtocols":{"type":"array","items":{"type":"string"},"description":"HTTP protocols available on the TLS configuration.\n"},"id":{"type":"string","description":"ID of the TLS configuration obtained from the Fastly API or another data source. Conflicts with all the other filters.\n"},"name":{"type":"string","description":"Custom name of the TLS configuration.\n"},"tlsProtocols":{"type":"array","items":{"type":"string"},"description":"TLS protocols available on the TLS configuration.\n"},"tlsService":{"type":"string","description":"Whether the configuration should support the `PLATFORM` or `CUSTOM` TLS service.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the configuration was last updated.\n"}},"type":"object","required":["createdAt","default","dnsRecords","httpProtocols","id","name","tlsProtocols","tlsService","updatedAt"]}},"fastly:index/getTlsConfigurationIds:getTlsConfigurationIds":{"description":"Use this data source to get the IDs of available TLS configurations for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsConfigurationIds = fastly.getTlsConfigurationIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {configurationId: data.fastly_tls_configuration.example.ids[0]});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_configuration_ids = fastly.get_tls_configuration_ids()\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", configuration_id=data[\"fastly_tls_configuration\"][\"example\"][\"ids\"])\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsConfigurationIds = Output.Create(Fastly.GetTlsConfigurationIds.InvokeAsync());\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n ConfigurationId = data.Fastly_tls_configuration.Example.Ids[0],\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsConfigurationIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.Any(data.Fastly_tls_configuration.Example.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","outputs":{"description":"A collection of values returned by getTlsConfigurationIds.\n","properties":{"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ids":{"type":"array","items":{"type":"string"},"description":"List of IDs corresponding to available TLS configurations.\n"}},"type":"object","required":["ids","id"]}},"fastly:index/getTlsDomain:getTlsDomain":{"description":"Use this data source to get the IDs of activations, certificates and subscriptions associated with a domain.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst domain = pulumi.output(fastly.getTlsDomain({\n domain: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndomain = fastly.get_tls_domain(domain=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var domain = Output.Create(Fastly.GetTlsDomain.InvokeAsync(new Fastly.GetTlsDomainArgs\n {\n Domain = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsDomain(ctx, \u0026GetTlsDomainArgs{\n\t\t\tDomain: \"example.com\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking getTlsDomain.\n","properties":{"domain":{"type":"string","description":"Domain name to look up activations, certificates and subscriptions for.\n"}},"type":"object","required":["domain"]},"outputs":{"description":"A collection of values returned by getTlsDomain.\n","properties":{"domain":{"type":"string","description":"Domain name to look up activations, certificates and subscriptions for.\n"},"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"tlsActivationIds":{"type":"array","items":{"type":"string"},"description":"IDs of the activations associated with the domain.\n"},"tlsCertificateIds":{"type":"array","items":{"type":"string"},"description":"IDs of the certificates associated with the domain.\n"},"tlsSubscriptionIds":{"type":"array","items":{"type":"string"},"description":"IDs of the subscriptions associated with the domain.\n"}},"type":"object","required":["domain","tlsActivationIds","tlsCertificateIds","tlsSubscriptionIds","id"]}},"fastly:index/getTlsPlatformCertificate:getTlsPlatformCertificate":{"description":"Use this data source to get information of a Platform TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsPlatformCertificate({\n domains: [\"example.com\"],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_platform_certificate(domains=[\"example.com\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsPlatformCertificate.InvokeAsync(new Fastly.GetTlsPlatformCertificateArgs\n {\n Domains = \n {\n \"example.com\",\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsPlatformCertificate(ctx, \u0026GetTlsPlatformCertificateArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking getTlsPlatformCertificate.\n","properties":{"domains":{"type":"array","items":{"type":"string"},"description":"Domains that are listed in any certificate's Subject Alternative Names (SAN) list.\n"},"id":{"type":"string","description":"Unique ID assigned to certificate by Fastly. Conflicts with all the other filters.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsPlatformCertificate.\n","properties":{"configurationId":{"type":"string","description":"ID of TLS configuration used to terminate TLS traffic.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when the certificate was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"Domains that are listed in any certificate's Subject Alternative Names (SAN) list.\n"},"id":{"type":"string","description":"Unique ID assigned to certificate by Fastly. Conflicts with all the other filters.\n"},"notAfter":{"type":"string","description":"Timestamp (GMT) when the certificate will expire.\n"},"notBefore":{"type":"string","description":"Timestamp (GMT) when the certificate will become valid.\n"},"replace":{"type":"boolean","description":"A recommendation from Fastly indicating the key associated with this certificate is in need of rotation.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when the certificate was last updated.\n"}},"type":"object","required":["configurationId","createdAt","domains","id","notAfter","notBefore","replace","updatedAt"]}},"fastly:index/getTlsPlatformCertificateIds:getTlsPlatformCertificateIds":{"description":"Use this data source to get the IDs of available Platform TLS Certificates for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsPlatformCertificateIds = fastly.getTlsPlatformCertificateIds({});\nconst exampleTlsPlatformCertificate = exampleTlsPlatformCertificateIds.then(exampleTlsPlatformCertificateIds =\u003e fastly.getTlsPlatformCertificate({\n id: exampleTlsPlatformCertificateIds.ids?[0],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_platform_certificate_ids = fastly.get_tls_platform_certificate_ids()\nexample_tls_platform_certificate = fastly.get_tls_platform_certificate(id=example_tls_platform_certificate_ids.ids[0])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsPlatformCertificateIds = Output.Create(Fastly.GetTlsPlatformCertificateIds.InvokeAsync());\n var exampleTlsPlatformCertificate = exampleTlsPlatformCertificateIds.Apply(exampleTlsPlatformCertificateIds =\u003e Output.Create(Fastly.GetTlsPlatformCertificate.InvokeAsync(new Fastly.GetTlsPlatformCertificateArgs\n {\n Id = exampleTlsPlatformCertificateIds.Ids?[0],\n })));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsPlatformCertificateIds, err := fastly.GetTlsPlatformCertificateIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPlatformCertificate(ctx, \u0026GetTlsPlatformCertificateArgs{\n\t\t\tId: pulumi.StringRef(exampleTlsPlatformCertificateIds.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","outputs":{"description":"A collection of values returned by getTlsPlatformCertificateIds.\n","properties":{"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ids":{"type":"array","items":{"type":"string"},"description":"List of IDs corresponding to Platform TLS certificates.\n"}},"type":"object","required":["ids","id"]}},"fastly:index/getTlsPrivateKey:getTlsPrivateKey":{"description":"Use this data source to get information on a TLS Private Key uploaded to Fastly.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\n of filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\n with any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search\n is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKey({\n name: \"demo-private-key\",\n});\nexport const privateKeyNeedsReplacing = demo.then(demo =\u003e demo.replace);\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key(name=\"demo-private-key\")\npulumi.export(\"privateKeyNeedsReplacing\", demo.replace)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = Output.Create(Fastly.GetTlsPrivateKey.InvokeAsync(new Fastly.GetTlsPrivateKeyArgs\n {\n Name = \"demo-private-key\",\n }));\n this.PrivateKeyNeedsReplacing = demo.Apply(demo =\u003e demo.Replace);\n }\n\n [Output(\"privateKeyNeedsReplacing\")]\n public Output\u003cstring\u003e PrivateKeyNeedsReplacing { get; set; }\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.LookupTlsPrivateKey(ctx, \u0026GetTlsPrivateKeyArgs{\n\t\t\tName: pulumi.StringRef(\"demo-private-key\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"privateKeyNeedsReplacing\", demo.Replace)\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking getTlsPrivateKey.\n","properties":{"createdAt":{"type":"string","description":"Timestamp (GMT) when the private key was created.\n"},"id":{"type":"string","description":"Fastly private key ID. Conflicts with all the other filters\n"},"keyLength":{"type":"integer","description":"The key length used to generate the private key.\n"},"keyType":{"type":"string","description":"The algorithm used to generate the private key. Must be RSA.\n"},"name":{"type":"string","description":"The human-readable name assigned to the private key when uploaded.\n"},"publicKeySha1":{"type":"string","description":"A hash of the associated public key, useful for safely identifying it.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsPrivateKey.\n","properties":{"createdAt":{"type":"string","description":"Timestamp (GMT) when the private key was created.\n"},"id":{"type":"string","description":"Fastly private key ID. Conflicts with all the other filters\n"},"keyLength":{"type":"integer","description":"The key length used to generate the private key.\n"},"keyType":{"type":"string","description":"The algorithm used to generate the private key. Must be RSA.\n"},"name":{"type":"string","description":"The human-readable name assigned to the private key when uploaded.\n"},"publicKeySha1":{"type":"string","description":"A hash of the associated public key, useful for safely identifying it.\n"},"replace":{"type":"boolean","description":"Whether Fastly recommends replacing this private key.\n"}},"type":"object","required":["createdAt","id","keyLength","keyType","name","publicKeySha1","replace"]}},"fastly:index/getTlsPrivateKeyIds:getTlsPrivateKeyIds":{"description":"Use this data source to get the list of TLS private key identifiers in Fastly.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKeyIds({});\nconst example = fastly.getTlsPrivateKey({\n id: fastly_tls_private_key_ids.demo.ids[0],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key_ids()\nexample = fastly.get_tls_private_key(id=fastly_tls_private_key_ids[\"demo\"][\"ids\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = Output.Create(Fastly.GetTlsPrivateKeyIds.InvokeAsync());\n var example = Output.Create(Fastly.GetTlsPrivateKey.InvokeAsync(new Fastly.GetTlsPrivateKeyArgs\n {\n Id = fastly_tls_private_key_ids.Demo.Ids[0],\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsPrivateKeyIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPrivateKey(ctx, \u0026GetTlsPrivateKeyArgs{\n\t\t\tId: pulumi.StringRef(fastly_tls_private_key_ids.Demo.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","outputs":{"description":"A collection of values returned by getTlsPrivateKeyIds.\n","properties":{"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ids":{"type":"array","items":{"type":"string"},"description":"List of IDs of the TLS private keys.\n"}},"type":"object","required":["ids","id"]}},"fastly:index/getTlsSubscription:getTlsSubscription":{"description":"Use this data source to get information about a TLS subscription.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsSubscription({\n domains: [\"example.com\"],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_subscription(domains=[\"example.com\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsSubscription.InvokeAsync(new Fastly.GetTlsSubscriptionArgs\n {\n Domains = \n {\n \"example.com\",\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsSubscription(ctx, \u0026GetTlsSubscriptionArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking getTlsSubscription.\n","properties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for the subscription.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration used to terminate TLS traffic.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"id":{"type":"string","description":"ID of TLS subscription. Conflicts with all the other filters.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTlsSubscription.\n","properties":{"certificateAuthority":{"type":"string","description":"The entity that issues and certifies the TLS certificates for the subscription.\n"},"commonName":{"type":"string","description":"The common name associated with the subscription generated by Fastly TLS.\n"},"configurationId":{"type":"string","description":"ID of TLS configuration used to terminate TLS traffic.\n"},"createdAt":{"type":"string","description":"Timestamp (GMT) when subscription was created.\n"},"domains":{"type":"array","items":{"type":"string"},"description":"List of domains on which to enable TLS.\n"},"id":{"type":"string","description":"ID of TLS subscription. Conflicts with all the other filters.\n"},"state":{"type":"string","description":"The current state of the subscription. The list of possible states are: `pending`, `processing`, `issued`, and `renewing`.\n"},"updatedAt":{"type":"string","description":"Timestamp (GMT) when subscription was last updated.\n"}},"type":"object","required":["certificateAuthority","commonName","configurationId","createdAt","domains","id","state","updatedAt"]}},"fastly:index/getTlsSubscriptionIds:getTlsSubscriptionIds":{"description":"Use this data source to get the list of IDs of TLS Subscriptions in Fastly.\n","outputs":{"description":"A collection of values returned by getTlsSubscriptionIds.\n","properties":{"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"ids":{"type":"array","items":{"type":"string"},"description":"IDs of available TLS subscriptions.\n"}},"type":"object","required":["ids","id"]}},"fastly:index/getWafRules:getWafRules":{"inputs":{"description":"A collection of arguments for invoking getWafRules.\n","properties":{"excludeModsecRuleIds":{"type":"array","items":{"type":"integer"},"description":"Exclusion filter by WAF rule's ModSecurity ID.\n"},"modsecRuleIds":{"type":"array","items":{"type":"integer"},"description":"A list of modsecurity rules IDs to be used as filters for the data set.\n"},"publishers":{"type":"array","items":{"type":"string"},"description":"Inclusion filter by WAF rule's publishers.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"Inclusion filter by WAF rule's tags.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getWafRules.\n","properties":{"excludeModsecRuleIds":{"type":"array","items":{"type":"integer"},"description":"A list of modsecurity rules IDs to be excluded from the data set.\n"},"id":{"type":"string","description":"The provider-assigned unique ID for this managed resource.\n"},"modsecRuleIds":{"type":"array","items":{"type":"integer"},"description":"A list of modsecurity rules IDs to be used as filters for the data set.\n"},"publishers":{"type":"array","items":{"type":"string"},"description":"A list of publishers to be used as filters for the data set.\n"},"rules":{"type":"array","items":{"$ref":"#/types/fastly:index/getWafRulesRule:getWafRulesRule"},"description":"The list of rules that results from any given combination of filters.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to be used as filters for the data set.\n"}},"type":"object","required":["rules","id"]}}},"language":{"csharp":{"compatibility":"tfbridge20","namespaces":{"fastly":"Fastly"},"packageReferences":{"Pulumi":"3.*"}},"go":{"generateExtraInputTypes":true,"generateResourceContainerTypes":true,"importBasePath":"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly"},"nodejs":{"compatibility":"tfbridge20","dependencies":{"@pulumi/pulumi":"^3.0.0"},"devDependencies":{"@types/mime":"^2.0.0","@types/node":"^10.0.0"},"disableUnionOutputTypes":true,"packageDescription":"A Pulumi package for creating and managing fastly cloud resources.","packageName":"","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/fastly/terraform-provider-fastly)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi/pulumi-fastly` repo](https://github.com/pulumi/pulumi-fastly/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`fastly/terraform-provider-fastly` repo](https://github.com/fastly/terraform-provider-fastly/issues).","typescriptVersion":""},"python":{"compatibility":"tfbridge20","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/fastly/terraform-provider-fastly)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi/pulumi-fastly` repo](https://github.com/pulumi/pulumi-fastly/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`fastly/terraform-provider-fastly` repo](https://github.com/fastly/terraform-provider-fastly/issues).","requires":{"pulumi":"\u003e=3.0.0,\u003c4.0.0"}}}} \ No newline at end of file diff --git a/provider/cmd/pulumi-resource-fastly/schema.json b/provider/cmd/pulumi-resource-fastly/schema.json index dc39bae0..3ccb2e4c 100644 --- a/provider/cmd/pulumi-resource-fastly/schema.json +++ b/provider/cmd/pulumi-resource-fastly/schema.json @@ -28,7 +28,7 @@ }, "noAuth": { "type": "boolean", - "description": "Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges`\n" + "description": "Set to `true` if your configuration only consumes data sources that do not require authentication, such as\n`fastly_ip_ranges`\n" } } }, @@ -371,81 +371,6 @@ } } }, - "fastly:index/ServiceComputeDirector:ServiceComputeDirector": { - "properties": { - "backends": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Names of defined backends to map the director to. Example: `[ \"origin1\", \"origin2\" ]`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "comment": { - "type": "string", - "description": "An optional comment about the Director\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "name": { - "type": "string", - "description": "Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "quorum": { - "type": "integer", - "description": "Percentage of capacity that needs to be up for the director itself to be considered up. Default `75`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "retries": { - "type": "integer", - "description": "How many backends to search if it fails. Default `5`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "shield": { - "type": "string", - "description": "Selected POP to serve as a \"shield\" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "type": { - "type": "integer", - "description": "Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1`\n", - "language": { - "python": { - "mapCase": false - } - } - } - }, - "type": "object", - "required": [ - "backends", - "name" - ] - }, "fastly:index/ServiceComputeDomain:ServiceComputeDomain": { "properties": { "comment": { @@ -472,115 +397,6 @@ "name" ] }, - "fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck": { - "properties": { - "checkInterval": { - "type": "integer", - "description": "How often to run the Healthcheck in milliseconds. Default `5000`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "expectedResponse": { - "type": "integer", - "description": "The status code expected from the host. Default `200`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "host": { - "type": "string", - "description": "The Host header to send for this Healthcheck\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "httpVersion": { - "type": "string", - "description": "Whether to use version 1.0 or 1.1 HTTP. Default `1.1`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "initial": { - "type": "integer", - "description": "When loading a config, the initial number of probes to be seen as OK. Default `3`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "method": { - "type": "string", - "description": "Which HTTP method to use. Default `HEAD`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "name": { - "type": "string", - "description": "A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "path": { - "type": "string", - "description": "The path to check\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "threshold": { - "type": "integer", - "description": "How many Healthchecks must succeed to be considered healthy. Default `3`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "timeout": { - "type": "integer", - "description": "Timeout in milliseconds. Default `500`\n", - "language": { - "python": { - "mapCase": false - } - } - }, - "window": { - "type": "integer", - "description": "The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5`\n", - "language": { - "python": { - "mapCase": false - } - } - } - }, - "type": "object", - "required": [ - "host", - "name", - "path" - ] - }, "fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery": { "properties": { "dataset": { @@ -7253,6 +7069,91 @@ } } }, + "fastly:index/getServicesDetail:getServicesDetail": { + "properties": { + "comment": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "createdAt": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "customerId": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "id": { + "type": "string", + "description": "The ID of this resource.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "name": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "type": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "updatedAt": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "version": { + "type": "integer", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "comment", + "createdAt", + "customerId", + "id", + "name", + "type", + "updatedAt", + "version" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "fastly:index/getTlsConfigurationDnsRecord:getTlsConfigurationDnsRecord": { "properties": { "recordType": { @@ -7352,7 +7253,7 @@ }, "noAuth": { "type": "boolean", - "description": "Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges`\n" + "description": "Set to `true` if your configuration only consumes data sources that do not require authentication, such as\n`fastly_ip_ranges`\n" } }, "inputProperties": { @@ -7370,7 +7271,7 @@ }, "noAuth": { "type": "boolean", - "description": "Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges`\n" + "description": "Set to `true` if your configuration only consumes data sources that do not require authentication, such as\n`fastly_ip_ranges`\n" } } }, @@ -7453,6 +7354,65 @@ "type": "object" } }, + "fastly:index/serviceAuthorization:ServiceAuthorization": { + "description": "Configures authorization with granular permissions to services. Users can be granted rights for services on different levels.\n\nThe Service Authorization resource requires a user id, service id and an optional permission.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {});\n//...\nconst user = new fastly.User(\"user\", {});\n// ...\nconst auth = new fastly.ServiceAuthorization(\"auth\", {\n serviceId: demo.id,\n userId: user.id,\n permission: \"purge_all\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\")\n#...\nuser = fastly.User(\"user\")\n# ...\nauth = fastly.ServiceAuthorization(\"auth\",\n service_id=demo.id,\n user_id=user.id,\n permission=\"purge_all\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n });\n //...\n var user = new Fastly.User(\"user\", new Fastly.UserArgs\n {\n });\n // ...\n var auth = new Fastly.ServiceAuthorization(\"auth\", new Fastly.ServiceAuthorizationArgs\n {\n ServiceId = demo.Id,\n UserId = user.Id,\n Permission = \"purge_all\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.NewServiceVcl(ctx, \"demo\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := fastly.NewUser(ctx, \"user\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceAuthorization(ctx, \"auth\", \u0026fastly.ServiceAuthorizationArgs{\n\t\t\tServiceId: demo.ID(),\n\t\t\tUserId: user.ID(),\n\t\t\tPermission: pulumi.String(\"purge_all\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Fastly Service Authorization can be imported using their user ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx\n```\n\n ", + "properties": { + "permission": { + "type": "string", + "description": "The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`.\n" + }, + "serviceId": { + "type": "string", + "description": "The ID of the service to grant permissions for.\n" + }, + "userId": { + "type": "string", + "description": "The ID of the user which will receive the granted permissions.\n" + } + }, + "required": [ + "permission", + "serviceId", + "userId" + ], + "inputProperties": { + "permission": { + "type": "string", + "description": "The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`.\n" + }, + "serviceId": { + "type": "string", + "description": "The ID of the service to grant permissions for.\n" + }, + "userId": { + "type": "string", + "description": "The ID of the user which will receive the granted permissions.\n" + } + }, + "requiredInputs": [ + "permission", + "serviceId", + "userId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ServiceAuthorization resources.\n", + "properties": { + "permission": { + "type": "string", + "description": "The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`.\n" + }, + "serviceId": { + "type": "string", + "description": "The ID of the service to grant permissions for.\n" + }, + "userId": { + "type": "string", + "description": "The ID of the user which will receive the granted permissions.\n" + } + }, + "type": "object" + } + }, "fastly:index/serviceCompute:ServiceCompute": { "description": "\n\n\n## Import\n\nFastly Services can be imported using their service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceCompute:ServiceCompute demo xxxxxxxxxxxxxxxxxxxx\n```\n\n By default, either the active version will be imported, or the latest version if no version is active. Alternatively, a specific version of the service can be selected by appending an `@` followed by the version number to the service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceCompute:ServiceCompute demo xxxxxxxxxxxxxxxxxxxx@2\n```\n\n ", "properties": { @@ -7478,26 +7438,12 @@ "type": "string", "description": "Description field for the service. Default `Managed by Terraform`\n" }, - "defaultHost": { - "type": "string", - "description": "The default hostname\n" - }, - "defaultTtl": { - "type": "integer", - "description": "The default Time-to-live (TTL) for requests\n" - }, "dictionaries": { "type": "array", "items": { "$ref": "#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary" } }, - "directors": { - "type": "array", - "items": { - "$ref": "#/types/fastly:index/ServiceComputeDirector:ServiceComputeDirector" - } - }, "domains": { "type": "array", "items": { @@ -7509,12 +7455,6 @@ "type": "boolean", "description": "Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n" }, - "healthchecks": { - "type": "array", - "items": { - "$ref": "#/types/fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck" - } - }, "loggingBigqueries": { "type": "array", "items": { @@ -7679,14 +7619,6 @@ "$ref": "#/types/fastly:index/ServiceComputePackage:ServiceComputePackage", "description": "The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/)\n" }, - "staleIfError": { - "type": "boolean", - "description": "Enables serving a stale object if there is an error\n" - }, - "staleIfErrorTtl": { - "type": "integer", - "description": "The default time-to-live (TTL) for serving the stale object for the version\n" - }, "versionComment": { "type": "string", "description": "Description field for the version\n" @@ -7714,26 +7646,12 @@ "type": "string", "description": "Description field for the service. Default `Managed by Terraform`\n" }, - "defaultHost": { - "type": "string", - "description": "The default hostname\n" - }, - "defaultTtl": { - "type": "integer", - "description": "The default Time-to-live (TTL) for requests\n" - }, "dictionaries": { "type": "array", "items": { "$ref": "#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary" } }, - "directors": { - "type": "array", - "items": { - "$ref": "#/types/fastly:index/ServiceComputeDirector:ServiceComputeDirector" - } - }, "domains": { "type": "array", "items": { @@ -7745,12 +7663,6 @@ "type": "boolean", "description": "Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n" }, - "healthchecks": { - "type": "array", - "items": { - "$ref": "#/types/fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck" - } - }, "loggingBigqueries": { "type": "array", "items": { @@ -7915,14 +7827,6 @@ "$ref": "#/types/fastly:index/ServiceComputePackage:ServiceComputePackage", "description": "The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/)\n" }, - "staleIfError": { - "type": "boolean", - "description": "Enables serving a stale object if there is an error\n" - }, - "staleIfErrorTtl": { - "type": "integer", - "description": "The default time-to-live (TTL) for serving the stale object for the version\n" - }, "versionComment": { "type": "string", "description": "Description field for the version\n" @@ -7957,26 +7861,12 @@ "type": "string", "description": "Description field for the service. Default `Managed by Terraform`\n" }, - "defaultHost": { - "type": "string", - "description": "The default hostname\n" - }, - "defaultTtl": { - "type": "integer", - "description": "The default Time-to-live (TTL) for requests\n" - }, "dictionaries": { "type": "array", "items": { "$ref": "#/types/fastly:index/ServiceComputeDictionary:ServiceComputeDictionary" } }, - "directors": { - "type": "array", - "items": { - "$ref": "#/types/fastly:index/ServiceComputeDirector:ServiceComputeDirector" - } - }, "domains": { "type": "array", "items": { @@ -7988,12 +7878,6 @@ "type": "boolean", "description": "Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false`\n" }, - "healthchecks": { - "type": "array", - "items": { - "$ref": "#/types/fastly:index/ServiceComputeHealthcheck:ServiceComputeHealthcheck" - } - }, "loggingBigqueries": { "type": "array", "items": { @@ -8158,14 +8042,6 @@ "$ref": "#/types/fastly:index/ServiceComputePackage:ServiceComputePackage", "description": "The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/)\n" }, - "staleIfError": { - "type": "boolean", - "description": "Enables serving a stale object if there is an error\n" - }, - "staleIfErrorTtl": { - "type": "integer", - "description": "The default time-to-live (TTL) for serving the stale object for the version\n" - }, "versionComment": { "type": "string", "description": "Description field for the version\n" @@ -8324,7 +8200,7 @@ } }, "fastly:index/serviceVcl:ServiceVcl": { - "description": "Provides a Fastly Service, representing the configuration for a website, app,\nAPI, or anything else to be served through Fastly. A Service encompasses Domains\nand Backends.\n\nThe Service resource requires a domain name that is correctly set up to direct\ntraffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname]\non their documentation site for guidance.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n port=80,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n name: \"AWS S3 hosting\",\n overrideHost: \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n gzips: [{\n contentTypes: [\n \"text/html\",\n \"text/css\",\n ],\n extensions: [\n \"css\",\n \"js\",\n ],\n name: \"file extensions and content types\",\n }],\n headers: [{\n action: \"delete\",\n destination: \"http.x-amz-request-id\",\n name: \"remove x-amz-request-id\",\n type: \"cache\",\n }],\n});\nconst website = new aws.s3.Bucket(\"website\", {\n acl: \"public-read\",\n website: {\n errorDocument: \"error.html\",\n indexDocument: \"index.html\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n name=\"AWS S3 hosting\",\n override_host=\"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n port=80,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True,\n gzips=[fastly.ServiceVclGzipArgs(\n content_types=[\n \"text/html\",\n \"text/css\",\n ],\n extensions=[\n \"css\",\n \"js\",\n ],\n name=\"file extensions and content types\",\n )],\n headers=[fastly.ServiceVclHeaderArgs(\n action=\"delete\",\n destination=\"http.x-amz-request-id\",\n name=\"remove x-amz-request-id\",\n type=\"cache\",\n )])\nwebsite = aws.s3.Bucket(\"website\",\n acl=\"public-read\",\n website=aws.s3.BucketWebsiteArgs(\n error_document=\"error.html\",\n index_document=\"index.html\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n Name = \"AWS S3 hosting\",\n OverrideHost = \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n Port = 80,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n Gzips = \n {\n new Fastly.Inputs.ServiceVclGzipArgs\n {\n ContentTypes = \n {\n \"text/html\",\n \"text/css\",\n },\n Extensions = \n {\n \"css\",\n \"js\",\n },\n Name = \"file extensions and content types\",\n },\n },\n Headers = \n {\n new Fastly.Inputs.ServiceVclHeaderArgs\n {\n Action = \"delete\",\n Destination = \"http.x-amz-request-id\",\n Name = \"remove x-amz-request-id\",\n Type = \"cache\",\n },\n },\n });\n var website = new Aws.S3.Bucket(\"website\", new Aws.S3.BucketArgs\n {\n Acl = \"public-read\",\n Website = new Aws.S3.Inputs.BucketWebsiteArgs\n {\n ErrorDocument = \"error.html\",\n IndexDocument = \"index.html\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3\"\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"demo.notexample.com.s3-website-us-west-2.amazonaws.com\"),\n\t\t\t\t\tName: pulumi.String(\"AWS S3 hosting\"),\n\t\t\t\t\tOverrideHost: pulumi.String(\"demo.notexample.com.s3-website-us-west-2.amazonaws.com\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tGzips: ServiceVclGzipArray{\n\t\t\t\t\u0026ServiceVclGzipArgs{\n\t\t\t\t\tContentTypes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"text/html\"),\n\t\t\t\t\t\tpulumi.String(\"text/css\"),\n\t\t\t\t\t},\n\t\t\t\t\tExtensions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"css\"),\n\t\t\t\t\t\tpulumi.String(\"js\"),\n\t\t\t\t\t},\n\t\t\t\t\tName: pulumi.String(\"file extensions and content types\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tHeaders: ServiceVclHeaderArray{\n\t\t\t\t\u0026ServiceVclHeaderArgs{\n\t\t\t\t\tAction: pulumi.String(\"delete\"),\n\t\t\t\t\tDestination: pulumi.String(\"http.x-amz-request-id\"),\n\t\t\t\t\tName: pulumi.String(\"remove x-amz-request-id\"),\n\t\t\t\t\tType: pulumi.String(\"cache\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = s3.NewBucket(ctx, \"website\", \u0026s3.BucketArgs{\n\t\t\tAcl: pulumi.String(\"public-read\"),\n\t\t\tWebsite: \u0026s3.BucketWebsiteArgs{\n\t\t\t\tErrorDocument: pulumi.String(\"error.html\"),\n\t\t\t\tIndexDocument: pulumi.String(\"index.html\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with [custom\nVCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as fs from \"fs\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n vcls: [\n {\n content: fs.readFileSync(`./my_custom_main.vcl`, \"utf-8\"),\n main: true,\n name: \"my_custom_main_vcl\",\n },\n {\n content: fs.readFileSync(`./my_custom_library.vcl`, \"utf-8\"),\n name: \"my_custom_library_vcl\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n port=80,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True,\n vcls=[\n fastly.ServiceVclVclArgs(\n content=(lambda path: open(path).read())(f\"{path['module']}/my_custom_main.vcl\"),\n main=True,\n name=\"my_custom_main_vcl\",\n ),\n fastly.ServiceVclVclArgs(\n content=(lambda path: open(path).read())(f\"{path['module']}/my_custom_library.vcl\"),\n name=\"my_custom_library_vcl\",\n ),\n ])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n Vcls = \n {\n new Fastly.Inputs.ServiceVclVclArgs\n {\n Content = File.ReadAllText($\"{path.Module}/my_custom_main.vcl\"),\n Main = true,\n Name = \"my_custom_main_vcl\",\n },\n new Fastly.Inputs.ServiceVclVclArgs\n {\n Content = File.ReadAllText($\"{path.Module}/my_custom_library.vcl\"),\n Name = \"my_custom_library_vcl\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tVcls: ServiceVclVclArray{\n\t\t\t\t\u0026ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/my_custom_main.vcl\")),\n\t\t\t\t\tMain: pulumi.Bool(true),\n\t\t\t\t\tName: pulumi.String(\"my_custom_main_vcl\"),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/my_custom_library.vcl\")),\n\t\t\t\t\tName: pulumi.String(\"my_custom_library_vcl\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with [custom Director](https://developer.fastly.com/reference/api/load-balancing/directors/director/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [\n {\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n },\n {\n address: \"127.0.0.2\",\n name: \"origin2\",\n port: 80,\n },\n ],\n directors: [{\n backends: [\n \"origin1\",\n \"origin2\",\n ],\n name: \"mydirector\",\n quorum: 0,\n type: 3,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[\n fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"origin1\",\n port=80,\n ),\n fastly.ServiceVclBackendArgs(\n address=\"127.0.0.2\",\n name=\"origin2\",\n port=80,\n ),\n ],\n directors=[fastly.ServiceVclDirectorArgs(\n backends=[\n \"origin1\",\n \"origin2\",\n ],\n name=\"mydirector\",\n quorum=0,\n type=3,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.2\",\n Name = \"origin2\",\n Port = 80,\n },\n },\n Directors = \n {\n new Fastly.Inputs.ServiceVclDirectorArgs\n {\n Backends = \n {\n \"origin1\",\n \"origin2\",\n },\n Name = \"mydirector\",\n Quorum = 0,\n Type = 3,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"origin1\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.2\"),\n\t\t\t\t\tName: pulumi.String(\"origin2\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDirectors: ServiceVclDirectorArray{\n\t\t\t\t\u0026ServiceVclDirectorArgs{\n\t\t\t\t\tBackends: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"origin1\"),\n\t\t\t\t\t\tpulumi.String(\"origin2\"),\n\t\t\t\t\t},\n\t\t\t\t\tName: pulumi.String(\"mydirector\"),\n\t\t\t\t\tQuorum: pulumi.Int(0),\n\t\t\t\t\tType: pulumi.Int(3),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with [Web Application Firewall](https://developer.fastly.com/reference/api/waf/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n statement: \"req.backend.is_origin\",\n type: \"PREFETCH\",\n },\n // This condition will always be false\n // adding it to the response object created below\n // prevents Fastly from returning a 403 on all of your traffic.\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n domains: [{\n comment: \"demo\",\n name: \"example.com\",\n }],\n forceDestroy: true,\n responseObjects: [{\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n contentType: \"text/html\",\n name: \"WAF_Response\",\n requestCondition: \"WAF_always_false\",\n response: \"Forbidden\",\n status: 403,\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"origin1\",\n port=80,\n )],\n conditions=[\n fastly.ServiceVclConditionArgs(\n name=\"WAF_Prefetch\",\n statement=\"req.backend.is_origin\",\n type=\"PREFETCH\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"example.com\",\n )],\n force_destroy=True,\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n content_type=\"text/html\",\n name=\"WAF_Response\",\n request_condition=\"WAF_always_false\",\n response=\"Forbidden\",\n status=403,\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = \n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Statement = \"req.backend.is_origin\",\n Type = \"PREFETCH\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"example.com\",\n },\n },\n ForceDestroy = true,\n ResponseObjects = \n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n ContentType = \"text/html\",\n Name = \"WAF_Response\",\n RequestCondition = \"WAF_always_false\",\n Response = \"Forbidden\",\n Status = 403,\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"origin1\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tConditions: ServiceVclConditionArray{\n\t\t\t\t\u0026ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t\tStatement: pulumi.String(\"false\"),\n\t\t\t\t\tType: pulumi.String(\"REQUEST\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tResponseObjects: ServiceVclResponseObjectArray{\n\t\t\t\t\u0026ServiceVclResponseObjectArgs{\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026ServiceVclWafArgs{\n\t\t\t\tPrefetchCondition: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\tResponseObject: pulumi.String(\"WAF_Response\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Note:** For an AWS S3 Bucket, the Backend address is\n`\u003cdomain\u003e.s3-website-\u003cregion\u003e.amazonaws.com`. The `override_host` attribute\nshould be set to `\u003cbucket_name\u003e.s3-website-\u003cregion\u003e.amazonaws.com` in the `backend` block. See the\nFastly documentation on [Amazon S3][fastly-s3].\n\n[fastly-s3]: https://docs.fastly.com/en/guides/amazon-s3\n[fastly-cname]: https://docs.fastly.com/en/guides/adding-cname-records\n[fastly-conditionals]: https://docs.fastly.com/en/guides/using-conditions\n[fastly-sumologic]: https://developer.fastly.com/reference/api/logging/sumologic/\n[fastly-gcs]: https://developer.fastly.com/reference/api/logging/gcs/\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFastly Services can be imported using their service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx\n```\n\n By default, either the active version will be imported, or the latest version if no version is active. Alternatively, a specific version of the service can be selected by appending an `@` followed by the version number to the service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx@2\n```\n\n ", + "description": "Provides a Fastly Service, representing the configuration for a website, app,\nAPI, or anything else to be served through Fastly. A Service encompasses Domains\nand Backends.\n\nThe Service resource requires a domain name that is correctly set up to direct\ntraffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname]\non their documentation site for guidance.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n port=80,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n name: \"AWS S3 hosting\",\n overrideHost: \"demo.notexample.com.s3-website-us-west-2.amazonaws.com\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n gzips: [{\n contentTypes: [\n \"text/html\",\n \"text/css\",\n ],\n extensions: [\n \"css\",\n \"js\",\n ],\n name: \"file extensions and content types\",\n }],\n headers: [{\n action: \"delete\",\n destination: \"http.x-amz-request-id\",\n name: \"remove x-amz-request-id\",\n type: \"cache\",\n }],\n});\nconst website = new aws.s3.BucketV2(\"website\", {\n acl: \"public-read\",\n websites: [{\n errorDocument: \"error.html\",\n indexDocument: \"index.html\",\n }],\n});\n```\n\nBasic usage with [custom\nVCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as fs from \"fs\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n port: 80,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n vcls: [\n {\n content: fs.readFileSync(`./my_custom_main.vcl`, \"utf-8\"),\n main: true,\n name: \"my_custom_main_vcl\",\n },\n {\n content: fs.readFileSync(`./my_custom_library.vcl`, \"utf-8\"),\n name: \"my_custom_library_vcl\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n port=80,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True,\n vcls=[\n fastly.ServiceVclVclArgs(\n content=(lambda path: open(path).read())(f\"{path['module']}/my_custom_main.vcl\"),\n main=True,\n name=\"my_custom_main_vcl\",\n ),\n fastly.ServiceVclVclArgs(\n content=(lambda path: open(path).read())(f\"{path['module']}/my_custom_library.vcl\"),\n name=\"my_custom_library_vcl\",\n ),\n ])\n```\n```csharp\nusing System.IO;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n Vcls = \n {\n new Fastly.Inputs.ServiceVclVclArgs\n {\n Content = File.ReadAllText($\"{path.Module}/my_custom_main.vcl\"),\n Main = true,\n Name = \"my_custom_main_vcl\",\n },\n new Fastly.Inputs.ServiceVclVclArgs\n {\n Content = File.ReadAllText($\"{path.Module}/my_custom_library.vcl\"),\n Name = \"my_custom_library_vcl\",\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tVcls: ServiceVclVclArray{\n\t\t\t\t\u0026ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/my_custom_main.vcl\")),\n\t\t\t\t\tMain: pulumi.Bool(true),\n\t\t\t\t\tName: pulumi.String(\"my_custom_main_vcl\"),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v%v\", path.Module, \"/my_custom_library.vcl\")),\n\t\t\t\t\tName: pulumi.String(\"my_custom_library_vcl\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with [custom Director](https://developer.fastly.com/reference/api/load-balancing/directors/director/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [\n {\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n },\n {\n address: \"127.0.0.2\",\n name: \"origin2\",\n port: 80,\n },\n ],\n directors: [{\n backends: [\n \"origin1\",\n \"origin2\",\n ],\n name: \"mydirector\",\n quorum: 0,\n type: 3,\n }],\n domains: [{\n comment: \"demo\",\n name: \"demo.notexample.com\",\n }],\n forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[\n fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"origin1\",\n port=80,\n ),\n fastly.ServiceVclBackendArgs(\n address=\"127.0.0.2\",\n name=\"origin2\",\n port=80,\n ),\n ],\n directors=[fastly.ServiceVclDirectorArgs(\n backends=[\n \"origin1\",\n \"origin2\",\n ],\n name=\"mydirector\",\n quorum=0,\n type=3,\n )],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"demo.notexample.com\",\n )],\n force_destroy=True)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.2\",\n Name = \"origin2\",\n Port = 80,\n },\n },\n Directors = \n {\n new Fastly.Inputs.ServiceVclDirectorArgs\n {\n Backends = \n {\n \"origin1\",\n \"origin2\",\n },\n Name = \"mydirector\",\n Quorum = 0,\n Type = 3,\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"origin1\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.2\"),\n\t\t\t\t\tName: pulumi.String(\"origin2\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDirectors: ServiceVclDirectorArray{\n\t\t\t\t\u0026ServiceVclDirectorArgs{\n\t\t\t\t\tBackends: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"origin1\"),\n\t\t\t\t\t\tpulumi.String(\"origin2\"),\n\t\t\t\t\t},\n\t\t\t\t\tName: pulumi.String(\"mydirector\"),\n\t\t\t\t\tQuorum: pulumi.Int(0),\n\t\t\t\t\tType: pulumi.Int(3),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"demo.notexample.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\nBasic usage with [Web Application Firewall](https://developer.fastly.com/reference/api/waf/):\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n statement: \"req.backend.is_origin\",\n type: \"PREFETCH\",\n },\n // This condition will always be false\n // adding it to the response object created below\n // prevents Fastly from returning a 403 on all of your traffic.\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n domains: [{\n comment: \"demo\",\n name: \"example.com\",\n }],\n forceDestroy: true,\n responseObjects: [{\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n contentType: \"text/html\",\n name: \"WAF_Response\",\n requestCondition: \"WAF_always_false\",\n response: \"Forbidden\",\n status: 403,\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"origin1\",\n port=80,\n )],\n conditions=[\n fastly.ServiceVclConditionArgs(\n name=\"WAF_Prefetch\",\n statement=\"req.backend.is_origin\",\n type=\"PREFETCH\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n domains=[fastly.ServiceVclDomainArgs(\n comment=\"demo\",\n name=\"example.com\",\n )],\n force_destroy=True,\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n content_type=\"text/html\",\n name=\"WAF_Response\",\n request_condition=\"WAF_always_false\",\n response=\"Forbidden\",\n status=403,\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.ServiceVcl(\"demo\", new Fastly.ServiceVclArgs\n {\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = \n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Statement = \"req.backend.is_origin\",\n Type = \"PREFETCH\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"example.com\",\n },\n },\n ForceDestroy = true,\n ResponseObjects = \n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n ContentType = \"text/html\",\n Name = \"WAF_Response\",\n RequestCondition = \"WAF_always_false\",\n Response = \"Forbidden\",\n Status = 403,\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewServiceVcl(ctx, \"demo\", \u0026fastly.ServiceVclArgs{\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"origin1\"),\n\t\t\t\t\tPort: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tConditions: ServiceVclConditionArray{\n\t\t\t\t\u0026ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t},\n\t\t\t\t\u0026ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t\tStatement: pulumi.String(\"false\"),\n\t\t\t\t\tType: pulumi.String(\"REQUEST\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tResponseObjects: ServiceVclResponseObjectArray{\n\t\t\t\t\u0026ServiceVclResponseObjectArgs{\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026ServiceVclWafArgs{\n\t\t\t\tPrefetchCondition: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\tResponseObject: pulumi.String(\"WAF_Response\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Note:** For an AWS S3 Bucket, the Backend address is\n`\u003cdomain\u003e.s3-website-\u003cregion\u003e.amazonaws.com`. The `override_host` attribute\nshould be set to `\u003cbucket_name\u003e.s3-website-\u003cregion\u003e.amazonaws.com` in the `backend` block. See the\nFastly documentation on [Amazon S3][fastly-s3].\n\n[fastly-s3]: https://docs.fastly.com/en/guides/amazon-s3\n[fastly-cname]: https://docs.fastly.com/en/guides/adding-cname-records\n[fastly-conditionals]: https://docs.fastly.com/en/guides/using-conditions\n[fastly-sumologic]: https://developer.fastly.com/reference/api/logging/sumologic/\n[fastly-gcs]: https://developer.fastly.com/reference/api/logging/gcs/\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFastly Services can be imported using their service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx\n```\n\n By default, either the active version will be imported, or the latest version if no version is active. Alternatively, a specific version of the service can be selected by appending an `@` followed by the version number to the service ID, e.g.\n\n```sh\n $ pulumi import fastly:index/serviceVcl:ServiceVcl demo xxxxxxxxxxxxxxxxxxxx@2\n```\n\n ", "properties": { "acls": { "type": "array", @@ -9690,7 +9566,7 @@ } }, "fastly:index/tlsActivation:TlsActivation": { - "description": "Enables TLS on a domain using a specified custom TLS certificate.\n\n\u003e **Note:** The Fastly service must be provisioned _prior_ to enabling TLS on it.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoServiceVcl = new fastly.ServiceVcl(\"demoServiceVcl\", {\n domains: [{\n name: \"example.com\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n }],\n forceDestroy: true,\n});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demoTlsPrivateKey\", {keyPem: \"...\"});\nconst demoTlsCertificate = new fastly.TlsCertificate(\"demoTlsCertificate\", {certificateBody: \"...\"}, {\n dependsOn: [demoTlsPrivateKey],\n});\nconst test = new fastly.TlsActivation(\"test\", {\n certificateId: demoTlsCertificate.id,\n domain: \"example.com\",\n}, {\n dependsOn: [demoServiceVcl],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_service_vcl = fastly.ServiceVcl(\"demoServiceVcl\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n )],\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n )],\n force_destroy=True)\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demoTlsPrivateKey\", key_pem=\"...\")\ndemo_tls_certificate = fastly.TlsCertificate(\"demoTlsCertificate\", certificate_body=\"...\",\nopts=pulumi.ResourceOptions(depends_on=[demo_tls_private_key]))\ntest = fastly.TlsActivation(\"test\",\n certificate_id=demo_tls_certificate.id,\n domain=\"example.com\",\n opts=pulumi.ResourceOptions(depends_on=[demo_service_vcl]))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoServiceVcl = new Fastly.ServiceVcl(\"demoServiceVcl\", new Fastly.ServiceVclArgs\n {\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n },\n },\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n },\n },\n ForceDestroy = true,\n });\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = \"...\",\n });\n var demoTlsCertificate = new Fastly.TlsCertificate(\"demoTlsCertificate\", new Fastly.TlsCertificateArgs\n {\n CertificateBody = \"...\",\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n demoTlsPrivateKey,\n },\n });\n var test = new Fastly.TlsActivation(\"test\", new Fastly.TlsActivationArgs\n {\n CertificateId = demoTlsCertificate.Id,\n Domain = \"example.com\",\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n demoServiceVcl,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoServiceVcl, err := fastly.NewServiceVcl(ctx, \"demoServiceVcl\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"demoTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: pulumi.String(\"...\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsCertificate, err := fastly.NewTlsCertificate(ctx, \"demoTlsCertificate\", \u0026fastly.TlsCertificateArgs{\n\t\t\tCertificateBody: pulumi.String(\"...\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemoTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"test\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: demoTlsCertificate.ID(),\n\t\t\tDomain: pulumi.String(\"example.com\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemoServiceVcl,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Warning:** Updating the `fastly.TlsPrivateKey`/`fastly.TlsCertificate` resources should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the `fastly.TlsActivation` can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA TLS activation can be imported using its ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsActivation:TlsActivation demo xxxxxxxx\n```\n\n ", + "description": "Enables TLS on a domain using a specified custom TLS certificate.\n\n\u003e **Note:** The Fastly service must be provisioned _prior_ to enabling TLS on it.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demoServiceVcl = new fastly.ServiceVcl(\"demoServiceVcl\", {\n domains: [{\n name: \"example.com\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"localhost\",\n }],\n forceDestroy: true,\n});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demoTlsPrivateKey\", {keyPem: \"...\"});\nconst demoTlsCertificate = new fastly.TlsCertificate(\"demoTlsCertificate\", {certificateBody: \"...\"}, {\n dependsOn: [demoTlsPrivateKey],\n});\nconst test = new fastly.TlsActivation(\"test\", {\n certificateId: demoTlsCertificate.id,\n domain: \"example.com\",\n}, {\n dependsOn: [demoServiceVcl],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo_service_vcl = fastly.ServiceVcl(\"demoServiceVcl\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n )],\n backends=[fastly.ServiceVclBackendArgs(\n address=\"127.0.0.1\",\n name=\"localhost\",\n )],\n force_destroy=True)\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demoTlsPrivateKey\", key_pem=\"...\")\ndemo_tls_certificate = fastly.TlsCertificate(\"demoTlsCertificate\", certificate_body=\"...\",\nopts=pulumi.ResourceOptions(depends_on=[demo_tls_private_key]))\ntest = fastly.TlsActivation(\"test\",\n certificate_id=demo_tls_certificate.id,\n domain=\"example.com\",\n opts=pulumi.ResourceOptions(depends_on=[demo_service_vcl]))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoServiceVcl = new Fastly.ServiceVcl(\"demoServiceVcl\", new Fastly.ServiceVclArgs\n {\n Domains = \n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n },\n },\n Backends = \n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n },\n },\n ForceDestroy = true,\n });\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = \"...\",\n });\n var demoTlsCertificate = new Fastly.TlsCertificate(\"demoTlsCertificate\", new Fastly.TlsCertificateArgs\n {\n CertificateBody = \"...\",\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n demoTlsPrivateKey,\n },\n });\n var test = new Fastly.TlsActivation(\"test\", new Fastly.TlsActivationArgs\n {\n CertificateId = demoTlsCertificate.Id,\n Domain = \"example.com\",\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n demoServiceVcl,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoServiceVcl, err := fastly.NewServiceVcl(ctx, \"demoServiceVcl\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: ServiceVclDomainArray{\n\t\t\t\t\u0026ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: ServiceVclBackendArray{\n\t\t\t\t\u0026ServiceVclBackendArgs{\n\t\t\t\t\tAddress: pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"demoTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: pulumi.String(\"...\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdemoTlsCertificate, err := fastly.NewTlsCertificate(ctx, \"demoTlsCertificate\", \u0026fastly.TlsCertificateArgs{\n\t\t\tCertificateBody: pulumi.String(\"...\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemoTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"test\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: demoTlsCertificate.ID(),\n\t\t\tDomain: pulumi.String(\"example.com\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdemoServiceVcl,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Warning:** Updating the `fastly.TlsPrivateKey`/`fastly.TlsCertificate` resources should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the `fastly.TlsActivation` can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA TLS activation can be imported using its ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsActivation:TlsActivation demo xxxxxxxx\n```\n\n ", "properties": { "certificateId": { "type": "string", @@ -9757,7 +9633,7 @@ } }, "fastly:index/tlsCertificate:TlsCertificate": { - "description": "Uploads a custom TLS certificate to Fastly to be used to terminate TLS traffic.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst keyPrivateKey = new tls.PrivateKey(\"keyPrivateKey\", {algorithm: \"RSA\"});\nconst cert = new tls.SelfSignedCert(\"cert\", {\n keyAlgorithm: keyPrivateKey.algorithm,\n privateKeyPem: keyPrivateKey.privateKeyPem,\n subjects: [{\n commonName: \"example.com\",\n }],\n isCaCertificate: true,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n dnsNames: [\"example.com\"],\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"keyTlsPrivateKey\", {keyPem: keyPrivateKey.privateKeyPem});\nconst example = new fastly.TlsCertificate(\"example\", {certificateBody: cert.certPem}, {\n dependsOn: [keyTlsPrivateKey],\n});\n// The private key has to be present before the certificate can be uploaded\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nkey_private_key = tls.PrivateKey(\"keyPrivateKey\", algorithm=\"RSA\")\ncert = tls.SelfSignedCert(\"cert\",\n key_algorithm=key_private_key.algorithm,\n private_key_pem=key_private_key.private_key_pem,\n subjects=[tls.SelfSignedCertSubjectArgs(\n common_name=\"example.com\",\n )],\n is_ca_certificate=True,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ],\n dns_names=[\"example.com\"])\nkey_tls_private_key = fastly.TlsPrivateKey(\"keyTlsPrivateKey\", key_pem=key_private_key.private_key_pem)\nexample = fastly.TlsCertificate(\"example\", certificate_body=cert.cert_pem,\nopts=pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n# The private key has to be present before the certificate can be uploaded\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var cert = new Tls.SelfSignedCert(\"cert\", new Tls.SelfSignedCertArgs\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n DnsNames = \n {\n \"example.com\",\n },\n });\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n var example = new Fastly.TlsCertificate(\"example\", new Fastly.TlsCertificateArgs\n {\n CertificateBody = cert.CertPem,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n keyTlsPrivateKey,\n },\n });\n // The private key has to be present before the certificate can be uploaded\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyPrivateKey, err := tls.NewPrivateKey(ctx, \"keyPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcert, err := tls.NewSelfSignedCert(ctx, \"cert\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: keyPrivateKey.Algorithm,\n\t\t\tPrivateKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t\tSubjects: SelfSignedCertSubjectArray{\n\t\t\t\t\u0026SelfSignedCertSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate: pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"keyTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsCertificate(ctx, \"example\", \u0026fastly.TlsCertificateArgs{\n\t\t\tCertificateBody: cert.CertPem,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Warning:** Updating the `fastly.TlsPrivateKey`/`fastly.TlsCertificate` resources should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the `fastly.TlsActivation` can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsCertificate:TlsCertificate demo xxxxxxxxxxx\n```\n\n ", + "description": "Uploads a custom TLS certificate to Fastly to be used to terminate TLS traffic.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst keyPrivateKey = new tls.PrivateKey(\"keyPrivateKey\", {algorithm: \"RSA\"});\nconst cert = new tls.SelfSignedCert(\"cert\", {\n keyAlgorithm: keyPrivateKey.algorithm,\n privateKeyPem: keyPrivateKey.privateKeyPem,\n subjects: [{\n commonName: \"example.com\",\n }],\n isCaCertificate: true,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n dnsNames: [\"example.com\"],\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"keyTlsPrivateKey\", {keyPem: keyPrivateKey.privateKeyPem});\nconst example = new fastly.TlsCertificate(\"example\", {certificateBody: cert.certPem}, {\n dependsOn: [keyTlsPrivateKey],\n});\n// The private key has to be present before the certificate can be uploaded\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nkey_private_key = tls.PrivateKey(\"keyPrivateKey\", algorithm=\"RSA\")\ncert = tls.SelfSignedCert(\"cert\",\n key_algorithm=key_private_key.algorithm,\n private_key_pem=key_private_key.private_key_pem,\n subjects=[tls.SelfSignedCertSubjectArgs(\n common_name=\"example.com\",\n )],\n is_ca_certificate=True,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ],\n dns_names=[\"example.com\"])\nkey_tls_private_key = fastly.TlsPrivateKey(\"keyTlsPrivateKey\", key_pem=key_private_key.private_key_pem)\nexample = fastly.TlsCertificate(\"example\", certificate_body=cert.cert_pem,\nopts=pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n# The private key has to be present before the certificate can be uploaded\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var cert = new Tls.SelfSignedCert(\"cert\", new Tls.SelfSignedCertArgs\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n DnsNames = \n {\n \"example.com\",\n },\n });\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n var example = new Fastly.TlsCertificate(\"example\", new Fastly.TlsCertificateArgs\n {\n CertificateBody = cert.CertPem,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n keyTlsPrivateKey,\n },\n });\n // The private key has to be present before the certificate can be uploaded\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyPrivateKey, err := tls.NewPrivateKey(ctx, \"keyPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcert, err := tls.NewSelfSignedCert(ctx, \"cert\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: keyPrivateKey.Algorithm,\n\t\t\tPrivateKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t\tSubjects: SelfSignedCertSubjectArray{\n\t\t\t\t\u0026SelfSignedCertSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate: pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"keyTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsCertificate(ctx, \"example\", \u0026fastly.TlsCertificateArgs{\n\t\t\tCertificateBody: cert.CertPem,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n\u003e **Warning:** Updating the `fastly.TlsPrivateKey`/`fastly.TlsCertificate` resources should be done in multiple plan/apply steps to avoid potential downtime. The new certificate and associated private key must first be created so they exist alongside the currently active resources. Once the new resources have been created, then the `fastly.TlsActivation` can be updated to point to the new certificate. Finally, the original key/certificate resources can be deleted.\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsCertificate:TlsCertificate demo xxxxxxxxxxx\n```\n\n ", "properties": { "certificateBody": { "type": "string", @@ -9879,7 +9755,7 @@ } }, "fastly:index/tlsPlatformCertificate:TlsPlatformCertificate": { - "description": "Uploads a TLS certificate to the Fastly Platform TLS service.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage with self-signed CA:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst caKey = new tls.PrivateKey(\"caKey\", {algorithm: \"RSA\"});\nconst keyPrivateKey = new tls.PrivateKey(\"keyPrivateKey\", {algorithm: \"RSA\"});\nconst ca = new tls.SelfSignedCert(\"ca\", {\n keyAlgorithm: caKey.algorithm,\n privateKeyPem: caKey.privateKeyPem,\n subjects: [{\n commonName: \"Example CA\",\n }],\n isCaCertificate: true,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n});\nconst example = new tls.CertRequest(\"example\", {\n keyAlgorithm: keyPrivateKey.algorithm,\n privateKeyPem: keyPrivateKey.privateKeyPem,\n subjects: [{\n commonName: \"example.com\",\n }],\n dnsNames: [\n \"example.com\",\n \"www.example.com\",\n ],\n});\nconst certLocallySignedCert = new tls.LocallySignedCert(\"certLocallySignedCert\", {\n certRequestPem: example.certRequestPem,\n caKeyAlgorithm: caKey.algorithm,\n caPrivateKeyPem: caKey.privateKeyPem,\n caCertPem: ca.certPem,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n});\nconst config = fastly.getTlsConfiguration({\n tlsService: \"PLATFORM\",\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"keyTlsPrivateKey\", {keyPem: keyPrivateKey.privateKeyPem});\nconst certTlsPlatformCertificate = new fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", {\n certificateBody: certLocallySignedCert.certPem,\n intermediatesBlob: ca.certPem,\n configurationId: config.then(config =\u003e config.id),\n allowUntrustedRoot: true,\n}, {\n dependsOn: [keyTlsPrivateKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nca_key = tls.PrivateKey(\"caKey\", algorithm=\"RSA\")\nkey_private_key = tls.PrivateKey(\"keyPrivateKey\", algorithm=\"RSA\")\nca = tls.SelfSignedCert(\"ca\",\n key_algorithm=ca_key.algorithm,\n private_key_pem=ca_key.private_key_pem,\n subjects=[tls.SelfSignedCertSubjectArgs(\n common_name=\"Example CA\",\n )],\n is_ca_certificate=True,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ])\nexample = tls.CertRequest(\"example\",\n key_algorithm=key_private_key.algorithm,\n private_key_pem=key_private_key.private_key_pem,\n subjects=[tls.CertRequestSubjectArgs(\n common_name=\"example.com\",\n )],\n dns_names=[\n \"example.com\",\n \"www.example.com\",\n ])\ncert_locally_signed_cert = tls.LocallySignedCert(\"certLocallySignedCert\",\n cert_request_pem=example.cert_request_pem,\n ca_key_algorithm=ca_key.algorithm,\n ca_private_key_pem=ca_key.private_key_pem,\n ca_cert_pem=ca.cert_pem,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ])\nconfig = fastly.get_tls_configuration(tls_service=\"PLATFORM\")\nkey_tls_private_key = fastly.TlsPrivateKey(\"keyTlsPrivateKey\", key_pem=key_private_key.private_key_pem)\ncert_tls_platform_certificate = fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\",\n certificate_body=cert_locally_signed_cert.cert_pem,\n intermediates_blob=ca.cert_pem,\n configuration_id=config.id,\n allow_untrusted_root=True,\n opts=pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var caKey = new Tls.PrivateKey(\"caKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var ca = new Tls.SelfSignedCert(\"ca\", new Tls.SelfSignedCertArgs\n {\n KeyAlgorithm = caKey.Algorithm,\n PrivateKeyPem = caKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"Example CA\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n var example = new Tls.CertRequest(\"example\", new Tls.CertRequestArgs\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.CertRequestSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n DnsNames = \n {\n \"example.com\",\n \"www.example.com\",\n },\n });\n var certLocallySignedCert = new Tls.LocallySignedCert(\"certLocallySignedCert\", new Tls.LocallySignedCertArgs\n {\n CertRequestPem = example.CertRequestPem,\n CaKeyAlgorithm = caKey.Algorithm,\n CaPrivateKeyPem = caKey.PrivateKeyPem,\n CaCertPem = ca.CertPem,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n var config = Output.Create(Fastly.GetTlsConfiguration.InvokeAsync(new Fastly.GetTlsConfigurationArgs\n {\n TlsService = \"PLATFORM\",\n }));\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n var certTlsPlatformCertificate = new Fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", new Fastly.TlsPlatformCertificateArgs\n {\n CertificateBody = certLocallySignedCert.CertPem,\n IntermediatesBlob = ca.CertPem,\n ConfigurationId = config.Apply(config =\u003e config.Id),\n AllowUntrustedRoot = true,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n keyTlsPrivateKey,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcaKey, err := tls.NewPrivateKey(ctx, \"caKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyPrivateKey, err := tls.NewPrivateKey(ctx, \"keyPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tca, err := tls.NewSelfSignedCert(ctx, \"ca\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: caKey.Algorithm,\n\t\t\tPrivateKeyPem: caKey.PrivateKeyPem,\n\t\t\tSubjects: SelfSignedCertSubjectArray{\n\t\t\t\t\u0026SelfSignedCertSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"Example CA\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate: pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := tls.NewCertRequest(ctx, \"example\", \u0026tls.CertRequestArgs{\n\t\t\tKeyAlgorithm: keyPrivateKey.Algorithm,\n\t\t\tPrivateKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t\tSubjects: CertRequestSubjectArray{\n\t\t\t\t\u0026CertRequestSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\tpulumi.String(\"www.example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcertLocallySignedCert, err := tls.NewLocallySignedCert(ctx, \"certLocallySignedCert\", \u0026tls.LocallySignedCertArgs{\n\t\t\tCertRequestPem: example.CertRequestPem,\n\t\t\tCaKeyAlgorithm: caKey.Algorithm,\n\t\t\tCaPrivateKeyPem: caKey.PrivateKeyPem,\n\t\t\tCaCertPem: ca.CertPem,\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconfig, err := fastly.GetTlsConfiguration(ctx, \u0026GetTlsConfigurationArgs{\n\t\t\tTlsService: pulumi.StringRef(\"PLATFORM\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"keyTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPlatformCertificate(ctx, \"certTlsPlatformCertificate\", \u0026fastly.TlsPlatformCertificateArgs{\n\t\t\tCertificateBody: certLocallySignedCert.CertPem,\n\t\t\tIntermediatesBlob: ca.CertPem,\n\t\t\tConfigurationId: pulumi.String(config.Id),\n\t\t\tAllowUntrustedRoot: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsPlatformCertificate:TlsPlatformCertificate demo xxxxxxxxxxx\n```\n\n ", + "description": "Uploads a TLS certificate to the Fastly Platform TLS service.\n\n\u003e Each TLS certificate **must** have its corresponding private key uploaded _prior_ to uploading the certificate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage with self-signed CA:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst caKey = new tls.PrivateKey(\"caKey\", {algorithm: \"RSA\"});\nconst keyPrivateKey = new tls.PrivateKey(\"keyPrivateKey\", {algorithm: \"RSA\"});\nconst ca = new tls.SelfSignedCert(\"ca\", {\n keyAlgorithm: caKey.algorithm,\n privateKeyPem: caKey.privateKeyPem,\n subjects: [{\n commonName: \"Example CA\",\n }],\n isCaCertificate: true,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n});\nconst example = new tls.CertRequest(\"example\", {\n keyAlgorithm: keyPrivateKey.algorithm,\n privateKeyPem: keyPrivateKey.privateKeyPem,\n subjects: [{\n commonName: \"example.com\",\n }],\n dnsNames: [\n \"example.com\",\n \"www.example.com\",\n ],\n});\nconst certLocallySignedCert = new tls.LocallySignedCert(\"certLocallySignedCert\", {\n certRequestPem: example.certRequestPem,\n caKeyAlgorithm: caKey.algorithm,\n caPrivateKeyPem: caKey.privateKeyPem,\n caCertPem: ca.certPem,\n validityPeriodHours: 360,\n allowedUses: [\n \"cert_signing\",\n \"server_auth\",\n ],\n});\nconst config = fastly.getTlsConfiguration({\n tlsService: \"PLATFORM\",\n});\nconst keyTlsPrivateKey = new fastly.TlsPrivateKey(\"keyTlsPrivateKey\", {keyPem: keyPrivateKey.privateKeyPem});\nconst certTlsPlatformCertificate = new fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", {\n certificateBody: certLocallySignedCert.certPem,\n intermediatesBlob: ca.certPem,\n configurationId: config.then(config =\u003e config.id),\n allowUntrustedRoot: true,\n}, {\n dependsOn: [keyTlsPrivateKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\nca_key = tls.PrivateKey(\"caKey\", algorithm=\"RSA\")\nkey_private_key = tls.PrivateKey(\"keyPrivateKey\", algorithm=\"RSA\")\nca = tls.SelfSignedCert(\"ca\",\n key_algorithm=ca_key.algorithm,\n private_key_pem=ca_key.private_key_pem,\n subjects=[tls.SelfSignedCertSubjectArgs(\n common_name=\"Example CA\",\n )],\n is_ca_certificate=True,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ])\nexample = tls.CertRequest(\"example\",\n key_algorithm=key_private_key.algorithm,\n private_key_pem=key_private_key.private_key_pem,\n subjects=[tls.CertRequestSubjectArgs(\n common_name=\"example.com\",\n )],\n dns_names=[\n \"example.com\",\n \"www.example.com\",\n ])\ncert_locally_signed_cert = tls.LocallySignedCert(\"certLocallySignedCert\",\n cert_request_pem=example.cert_request_pem,\n ca_key_algorithm=ca_key.algorithm,\n ca_private_key_pem=ca_key.private_key_pem,\n ca_cert_pem=ca.cert_pem,\n validity_period_hours=360,\n allowed_uses=[\n \"cert_signing\",\n \"server_auth\",\n ])\nconfig = fastly.get_tls_configuration(tls_service=\"PLATFORM\")\nkey_tls_private_key = fastly.TlsPrivateKey(\"keyTlsPrivateKey\", key_pem=key_private_key.private_key_pem)\ncert_tls_platform_certificate = fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\",\n certificate_body=cert_locally_signed_cert.cert_pem,\n intermediates_blob=ca.cert_pem,\n configuration_id=config.id,\n allow_untrusted_root=True,\n opts=pulumi.ResourceOptions(depends_on=[key_tls_private_key]))\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var caKey = new Tls.PrivateKey(\"caKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var ca = new Tls.SelfSignedCert(\"ca\", new Tls.SelfSignedCertArgs\n {\n KeyAlgorithm = caKey.Algorithm,\n PrivateKeyPem = caKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"Example CA\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n var example = new Tls.CertRequest(\"example\", new Tls.CertRequestArgs\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = \n {\n new Tls.Inputs.CertRequestSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n DnsNames = \n {\n \"example.com\",\n \"www.example.com\",\n },\n });\n var certLocallySignedCert = new Tls.LocallySignedCert(\"certLocallySignedCert\", new Tls.LocallySignedCertArgs\n {\n CertRequestPem = example.CertRequestPem,\n CaKeyAlgorithm = caKey.Algorithm,\n CaPrivateKeyPem = caKey.PrivateKeyPem,\n CaCertPem = ca.CertPem,\n ValidityPeriodHours = 360,\n AllowedUses = \n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n var config = Output.Create(Fastly.GetTlsConfiguration.InvokeAsync(new Fastly.GetTlsConfigurationArgs\n {\n TlsService = \"PLATFORM\",\n }));\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n var certTlsPlatformCertificate = new Fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", new Fastly.TlsPlatformCertificateArgs\n {\n CertificateBody = certLocallySignedCert.CertPem,\n IntermediatesBlob = ca.CertPem,\n ConfigurationId = config.Apply(config =\u003e config.Id),\n AllowUntrustedRoot = true,\n }, new CustomResourceOptions\n {\n DependsOn = \n {\n keyTlsPrivateKey,\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcaKey, err := tls.NewPrivateKey(ctx, \"caKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyPrivateKey, err := tls.NewPrivateKey(ctx, \"keyPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tca, err := tls.NewSelfSignedCert(ctx, \"ca\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: caKey.Algorithm,\n\t\t\tPrivateKeyPem: caKey.PrivateKeyPem,\n\t\t\tSubjects: SelfSignedCertSubjectArray{\n\t\t\t\t\u0026SelfSignedCertSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"Example CA\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIsCaCertificate: pulumi.Bool(true),\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := tls.NewCertRequest(ctx, \"example\", \u0026tls.CertRequestArgs{\n\t\t\tKeyAlgorithm: keyPrivateKey.Algorithm,\n\t\t\tPrivateKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t\tSubjects: CertRequestSubjectArray{\n\t\t\t\t\u0026CertRequestSubjectArgs{\n\t\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\tpulumi.String(\"www.example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcertLocallySignedCert, err := tls.NewLocallySignedCert(ctx, \"certLocallySignedCert\", \u0026tls.LocallySignedCertArgs{\n\t\t\tCertRequestPem: example.CertRequestPem,\n\t\t\tCaKeyAlgorithm: caKey.Algorithm,\n\t\t\tCaPrivateKeyPem: caKey.PrivateKeyPem,\n\t\t\tCaCertPem: ca.CertPem,\n\t\t\tValidityPeriodHours: pulumi.Int(360),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"cert_signing\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconfig, err := fastly.GetTlsConfiguration(ctx, \u0026GetTlsConfigurationArgs{\n\t\t\tTlsService: pulumi.StringRef(\"PLATFORM\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyTlsPrivateKey, err := fastly.NewTlsPrivateKey(ctx, \"keyTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: keyPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPlatformCertificate(ctx, \"certTlsPlatformCertificate\", \u0026fastly.TlsPlatformCertificateArgs{\n\t\t\tCertificateBody: certLocallySignedCert.CertPem,\n\t\t\tIntermediatesBlob: ca.CertPem,\n\t\t\tConfigurationId: pulumi.String(config.Id),\n\t\t\tAllowUntrustedRoot: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyTlsPrivateKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA certificate can be imported using its Fastly certificate ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsPlatformCertificate:TlsPlatformCertificate demo xxxxxxxxxxx\n```\n\n ", "properties": { "allowUntrustedRoot": { "type": "boolean", @@ -10010,7 +9886,7 @@ } }, "fastly:index/tlsPrivateKey:TlsPrivateKey": { - "description": "Uploads a Custom TLS Private Key to Fastly. This can be combined with a `fastly.TlsCertificate` resource to provide a TLS Certificate able to be applied to a Fastly Service.\n\nThe Private Key resource requires a key in PEM format, and a name to identify it.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst demoPrivateKey = new tls.PrivateKey(\"demoPrivateKey\", {algorithm: \"RSA\"});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demoTlsPrivateKey\", {keyPem: demoPrivateKey.privateKeyPem});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\ndemo_private_key = tls.PrivateKey(\"demoPrivateKey\", algorithm=\"RSA\")\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demoTlsPrivateKey\", key_pem=demo_private_key.private_key_pem)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoPrivateKey = new Tls.PrivateKey(\"demoPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = demoPrivateKey.PrivateKeyPem,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoPrivateKey, err := tls.NewPrivateKey(ctx, \"demoPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPrivateKey(ctx, \"demoTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: demoPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Private Key can be imported using its ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsPrivateKey:TlsPrivateKey demo xxxxxxxxxxx\n```\n\n ", + "description": "Uploads a Custom TLS Private Key to Fastly. This can be combined with a `fastly.TlsCertificate` resource to provide a TLS Certificate able to be applied to a Fastly Service.\n\nThe Private Key resource requires a key in PEM format, and a name to identify it.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\nimport * as tls from \"@pulumi/tls\";\n\nconst demoPrivateKey = new tls.PrivateKey(\"demoPrivateKey\", {algorithm: \"RSA\"});\nconst demoTlsPrivateKey = new fastly.TlsPrivateKey(\"demoTlsPrivateKey\", {keyPem: demoPrivateKey.privateKeyPem});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\nimport pulumi_tls as tls\n\ndemo_private_key = tls.PrivateKey(\"demoPrivateKey\", algorithm=\"RSA\")\ndemo_tls_private_key = fastly.TlsPrivateKey(\"demoTlsPrivateKey\", key_pem=demo_private_key.private_key_pem)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoPrivateKey = new Tls.PrivateKey(\"demoPrivateKey\", new Tls.PrivateKeyArgs\n {\n Algorithm = \"RSA\",\n });\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new Fastly.TlsPrivateKeyArgs\n {\n KeyPem = demoPrivateKey.PrivateKeyPem,\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v4/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoPrivateKey, err := tls.NewPrivateKey(ctx, \"demoPrivateKey\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsPrivateKey(ctx, \"demoTlsPrivateKey\", \u0026fastly.TlsPrivateKeyArgs{\n\t\t\tKeyPem: demoPrivateKey.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Private Key can be imported using its ID, e.g.\n\n```sh\n $ pulumi import fastly:index/tlsPrivateKey:TlsPrivateKey demo xxxxxxxxxxx\n```\n\n ", "properties": { "createdAt": { "type": "string", @@ -10317,7 +10193,7 @@ } }, "fastly:index/user:User": { - "description": "Provides a Fastly User, representing the configuration for a user account for interacting with Fastly.\n\nThe User resource requires a login and name, and optionally a role.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.User(\"demo\", {\n login: \"demo@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.User(\"demo\", login=\"demo@example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.User(\"demo\", new Fastly.UserArgs\n {\n Login = \"demo@example.com\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewUser(ctx, \"demo\", \u0026fastly.UserArgs{\n\t\t\tLogin: pulumi.String(\"demo@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Fastly User can be imported using their user ID, e.g.\n\n```sh\n $ pulumi import fastly:index/user:User demo xxxxxxxxxxxxxxxxxxxx\n```\n\n ", + "description": "Provides a Fastly User, representing the configuration for a user account for interacting with Fastly.\n\nThe User resource requires a login and name, and optionally a role.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nBasic usage:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.User(\"demo\", {\n login: \"demo@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.User(\"demo\", login=\"demo@example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = new Fastly.User(\"demo\", new Fastly.UserArgs\n {\n Login = \"demo@example.com\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.NewUser(ctx, \"demo\", \u0026fastly.UserArgs{\n\t\t\tLogin: pulumi.String(\"demo@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nA Fastly User can be imported using their user ID, e.g.\n\n```sh\n $ pulumi import fastly:index/user:User demo xxxxxxxxxxxxxxxxxxxx\n```\n\n ", "properties": { "login": { "type": "string", @@ -10399,7 +10275,7 @@ } }, "fastly:index/getFastlyIpRanges:getFastlyIpRanges": { - "description": "Use this data source to get the [IP ranges](https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges) of Fastly edge nodes.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst fastly = fastly.getFastlyIpRanges({});\nconst fromFastly = new aws.ec2.SecurityGroup(\"fromFastly\", {ingress: [{\n fromPort: 443,\n toPort: 443,\n protocol: \"tcp\",\n cidrBlocks: fastly.then(fastly =\u003e fastly.cidrBlocks),\n ipv6CidrBlocks: fastly.then(fastly =\u003e fastly.ipv6CidrBlocks),\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\n\nfastly = fastly.get_fastly_ip_ranges()\nfrom_fastly = aws.ec2.SecurityGroup(\"fromFastly\", ingress=[aws.ec2.SecurityGroupIngressArgs(\n from_port=443,\n to_port=443,\n protocol=\"tcp\",\n cidr_blocks=fastly.cidr_blocks,\n ipv6_cidr_blocks=fastly.ipv6_cidr_blocks,\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var fastly = Output.Create(Fastly.GetFastlyIpRanges.InvokeAsync());\n var fromFastly = new Aws.Ec2.SecurityGroup(\"fromFastly\", new Aws.Ec2.SecurityGroupArgs\n {\n Ingress = \n {\n new Aws.Ec2.Inputs.SecurityGroupIngressArgs\n {\n FromPort = 443,\n ToPort = 443,\n Protocol = \"tcp\",\n CidrBlocks = fastly.Apply(fastly =\u003e fastly.CidrBlocks),\n Ipv6CidrBlocks = fastly.Apply(fastly =\u003e fastly.Ipv6CidrBlocks),\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfastly, err := fastly.GetFastlyIpRanges(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewSecurityGroup(ctx, \"fromFastly\", \u0026ec2.SecurityGroupArgs{\n\t\t\tIngress: ec2.SecurityGroupIngressArray{\n\t\t\t\t\u0026ec2.SecurityGroupIngressArgs{\n\t\t\t\t\tFromPort: pulumi.Int(443),\n\t\t\t\t\tToPort: pulumi.Int(443),\n\t\t\t\t\tProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\tCidrBlocks: interface{}(fastly.CidrBlocks),\n\t\t\t\t\tIpv6CidrBlocks: interface{}(fastly.Ipv6CidrBlocks),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n[1]: https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get the [IP ranges](https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges) of Fastly edge nodes.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst fastly = fastly.getFastlyIpRanges({});\nconst fromFastly = new aws.ec2.SecurityGroup(\"fromFastly\", {ingress: [{\n fromPort: 443,\n toPort: 443,\n protocol: \"tcp\",\n cidrBlocks: fastly.then(fastly =\u003e fastly.cidrBlocks),\n ipv6CidrBlocks: fastly.then(fastly =\u003e fastly.ipv6CidrBlocks),\n}]});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_fastly as fastly\n\nfastly = fastly.get_fastly_ip_ranges()\nfrom_fastly = aws.ec2.SecurityGroup(\"fromFastly\", ingress=[aws.ec2.SecurityGroupIngressArgs(\n from_port=443,\n to_port=443,\n protocol=\"tcp\",\n cidr_blocks=fastly.cidr_blocks,\n ipv6_cidr_blocks=fastly.ipv6_cidr_blocks,\n)])\n```\n```csharp\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var fastly = Output.Create(Fastly.GetFastlyIpRanges.InvokeAsync());\n var fromFastly = new Aws.Ec2.SecurityGroup(\"fromFastly\", new Aws.Ec2.SecurityGroupArgs\n {\n Ingress = \n {\n new Aws.Ec2.Inputs.SecurityGroupIngressArgs\n {\n FromPort = 443,\n ToPort = 443,\n Protocol = \"tcp\",\n CidrBlocks = fastly.Apply(fastly =\u003e fastly.CidrBlocks),\n Ipv6CidrBlocks = fastly.Apply(fastly =\u003e fastly.Ipv6CidrBlocks),\n },\n },\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ec2\"\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfastly, err := fastly.GetFastlyIpRanges(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ec2.NewSecurityGroup(ctx, \"fromFastly\", \u0026ec2.SecurityGroupArgs{\n\t\t\tIngress: ec2.SecurityGroupIngressArray{\n\t\t\t\t\u0026ec2.SecurityGroupIngressArgs{\n\t\t\t\t\tFromPort: pulumi.Int(443),\n\t\t\t\t\tToPort: pulumi.Int(443),\n\t\t\t\t\tProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\tCidrBlocks: interface{}(fastly.CidrBlocks),\n\t\t\t\t\tIpv6CidrBlocks: interface{}(fastly.Ipv6CidrBlocks),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n\n[1]: https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getFastlyIpRanges.\n", "properties": { @@ -10430,8 +10306,40 @@ ] } }, + "fastly:index/getServices:getServices": { + "description": "Use this data source to get the list of the [Fastly services](https://developer.fastly.com/reference/api/services/service/).\n", + "outputs": { + "description": "A collection of values returned by getServices.\n", + "properties": { + "details": { + "type": "array", + "items": { + "$ref": "#/types/fastly:index/getServicesDetail:getServicesDetail" + }, + "description": "A detailed list of Fastly services in your account. This is limited to the services the API token can read.\n" + }, + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of service IDs in your account. This is limited to the services the API token can read.\n" + } + }, + "type": "object", + "required": [ + "details", + "ids", + "id" + ] + } + }, "fastly:index/getTlsActivation:getTlsActivation": { - "description": "Use this data source to get information on a TLS activation, including the certificate used, and the domain on which TLS was enabled.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsActivation({\n domain: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_activation(domain=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsActivation.InvokeAsync(new Fastly.GetTlsActivationArgs\n {\n Domain = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsActivation(ctx, \u0026GetTlsActivationArgs{\n\t\t\tDomain: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get information on a TLS activation, including the certificate used, and the domain on which TLS was enabled.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsActivation({\n domain: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_activation(domain=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsActivation.InvokeAsync(new Fastly.GetTlsActivationArgs\n {\n Domain = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsActivation(ctx, \u0026GetTlsActivationArgs{\n\t\t\tDomain: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsActivation.\n", "properties": { @@ -10527,7 +10435,7 @@ } }, "fastly:index/getTlsCertificate:getTlsCertificate": { - "description": "Use this data source to get information of a TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsCertificate({\n name: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_certificate(name=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsCertificate.InvokeAsync(new Fastly.GetTlsCertificateArgs\n {\n Name = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsCertificate(ctx, \u0026GetTlsCertificateArgs{\n\t\t\tName: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get information of a TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsCertificate({\n name: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_certificate(name=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsCertificate.InvokeAsync(new Fastly.GetTlsCertificateArgs\n {\n Name = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsCertificate(ctx, \u0026GetTlsCertificateArgs{\n\t\t\tName: pulumi.StringRef(\"example.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsCertificate.\n", "properties": { @@ -10620,7 +10528,7 @@ } }, "fastly:index/getTlsCertificateIds:getTlsCertificateIds": { - "description": "Use this data source to get the IDs of available TLS certificates for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsCertificateIds = fastly.getTlsCertificateIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {certificateId: exampleTlsCertificateIds.then(exampleTlsCertificateIds =\u003e exampleTlsCertificateIds.ids?[0])});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_certificate_ids = fastly.get_tls_certificate_ids()\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", certificate_id=example_tls_certificate_ids.ids[0])\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsCertificateIds = Output.Create(Fastly.GetTlsCertificateIds.InvokeAsync());\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n CertificateId = exampleTlsCertificateIds.Apply(exampleTlsCertificateIds =\u003e exampleTlsCertificateIds.Ids?[0]),\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsCertificateIds, err := fastly.GetTlsCertificateIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: pulumi.String(exampleTlsCertificateIds.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get the IDs of available TLS certificates for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsCertificateIds = fastly.getTlsCertificateIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {certificateId: exampleTlsCertificateIds.then(exampleTlsCertificateIds =\u003e exampleTlsCertificateIds.ids?[0])});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_certificate_ids = fastly.get_tls_certificate_ids()\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", certificate_id=example_tls_certificate_ids.ids[0])\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsCertificateIds = Output.Create(Fastly.GetTlsCertificateIds.InvokeAsync());\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n CertificateId = exampleTlsCertificateIds.Apply(exampleTlsCertificateIds =\u003e exampleTlsCertificateIds.Ids?[0]),\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsCertificateIds, err := fastly.GetTlsCertificateIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tCertificateId: pulumi.String(exampleTlsCertificateIds.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsCertificateIds.\n", "properties": { @@ -10644,7 +10552,7 @@ } }, "fastly:index/getTlsConfiguration:getTlsConfiguration": { - "description": "Use this data source to get the ID of a TLS configuration for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsConfiguration = fastly.getTlsConfiguration({\n \"default\": true,\n});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {configurationId: exampleTlsConfiguration.then(exampleTlsConfiguration =\u003e exampleTlsConfiguration.id)});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_configuration = fastly.get_tls_configuration(default=True)\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", configuration_id=example_tls_configuration.id)\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsConfiguration = Output.Create(Fastly.GetTlsConfiguration.InvokeAsync(new Fastly.GetTlsConfigurationArgs\n {\n Default = true,\n }));\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n ConfigurationId = exampleTlsConfiguration.Apply(exampleTlsConfiguration =\u003e exampleTlsConfiguration.Id),\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsConfiguration, err := fastly.GetTlsConfiguration(ctx, \u0026GetTlsConfigurationArgs{\n\t\t\tDefault: pulumi.BoolRef(true),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.String(exampleTlsConfiguration.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get the ID of a TLS configuration for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsConfiguration = fastly.getTlsConfiguration({\n \"default\": true,\n});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {configurationId: exampleTlsConfiguration.then(exampleTlsConfiguration =\u003e exampleTlsConfiguration.id)});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_configuration = fastly.get_tls_configuration(default=True)\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", configuration_id=example_tls_configuration.id)\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsConfiguration = Output.Create(Fastly.GetTlsConfiguration.InvokeAsync(new Fastly.GetTlsConfigurationArgs\n {\n Default = true,\n }));\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n ConfigurationId = exampleTlsConfiguration.Apply(exampleTlsConfiguration =\u003e exampleTlsConfiguration.Id),\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsConfiguration, err := fastly.GetTlsConfiguration(ctx, \u0026GetTlsConfigurationArgs{\n\t\t\tDefault: pulumi.BoolRef(true),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.String(exampleTlsConfiguration.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsConfiguration.\n", "properties": { @@ -10745,7 +10653,7 @@ } }, "fastly:index/getTlsConfigurationIds:getTlsConfigurationIds": { - "description": "Use this data source to get the IDs of available TLS configurations for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsConfigurationIds = fastly.getTlsConfigurationIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {configurationId: data.fastly_tls_configuration.example.ids[0]});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_configuration_ids = fastly.get_tls_configuration_ids()\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", configuration_id=data[\"fastly_tls_configuration\"][\"example\"][\"ids\"])\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsConfigurationIds = Output.Create(Fastly.GetTlsConfigurationIds.InvokeAsync());\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n ConfigurationId = data.Fastly_tls_configuration.Example.Ids[0],\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsConfigurationIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.Any(data.Fastly_tls_configuration.Example.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get the IDs of available TLS configurations for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsConfigurationIds = fastly.getTlsConfigurationIds({});\nconst exampleTlsActivation = new fastly.TlsActivation(\"exampleTlsActivation\", {configurationId: data.fastly_tls_configuration.example.ids[0]});\n// ...\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_configuration_ids = fastly.get_tls_configuration_ids()\nexample_tls_activation = fastly.TlsActivation(\"exampleTlsActivation\", configuration_id=data[\"fastly_tls_configuration\"][\"example\"][\"ids\"])\n# ...\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsConfigurationIds = Output.Create(Fastly.GetTlsConfigurationIds.InvokeAsync());\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new Fastly.TlsActivationArgs\n {\n ConfigurationId = data.Fastly_tls_configuration.Example.Ids[0],\n });\n // ...\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsConfigurationIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewTlsActivation(ctx, \"exampleTlsActivation\", \u0026fastly.TlsActivationArgs{\n\t\t\tConfigurationId: pulumi.Any(data.Fastly_tls_configuration.Example.Ids[0]),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsConfigurationIds.\n", "properties": { @@ -10769,7 +10677,7 @@ } }, "fastly:index/getTlsDomain:getTlsDomain": { - "description": "Use this data source to get the IDs of activations, certificates and subscriptions associated with a domain.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst domain = pulumi.output(fastly.getTlsDomain({\n domain: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndomain = fastly.get_tls_domain(domain=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var domain = Output.Create(Fastly.GetTlsDomain.InvokeAsync(new Fastly.GetTlsDomainArgs\n {\n Domain = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsDomain(ctx, \u0026GetTlsDomainArgs{\n\t\t\tDomain: \"example.com\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get the IDs of activations, certificates and subscriptions associated with a domain.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst domain = pulumi.output(fastly.getTlsDomain({\n domain: \"example.com\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndomain = fastly.get_tls_domain(domain=\"example.com\")\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var domain = Output.Create(Fastly.GetTlsDomain.InvokeAsync(new Fastly.GetTlsDomainArgs\n {\n Domain = \"example.com\",\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsDomain(ctx, \u0026GetTlsDomainArgs{\n\t\t\tDomain: \"example.com\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsDomain.\n", "properties": { @@ -10827,7 +10735,7 @@ } }, "fastly:index/getTlsPlatformCertificate:getTlsPlatformCertificate": { - "description": "Use this data source to get information of a Platform TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsPlatformCertificate({\n domains: [\"example.com\"],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_platform_certificate(domains=[\"example.com\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsPlatformCertificate.InvokeAsync(new Fastly.GetTlsPlatformCertificateArgs\n {\n Domains = \n {\n \"example.com\",\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsPlatformCertificate(ctx, \u0026GetTlsPlatformCertificateArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get information of a Platform TLS certificate for use with other resources.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\nof filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\nwith any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsPlatformCertificate({\n domains: [\"example.com\"],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_platform_certificate(domains=[\"example.com\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsPlatformCertificate.InvokeAsync(new Fastly.GetTlsPlatformCertificateArgs\n {\n Domains = \n {\n \"example.com\",\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsPlatformCertificate(ctx, \u0026GetTlsPlatformCertificateArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsPlatformCertificate.\n", "properties": { @@ -10898,7 +10806,7 @@ } }, "fastly:index/getTlsPlatformCertificateIds:getTlsPlatformCertificateIds": { - "description": "Use this data source to get the IDs of available Platform TLS Certificates for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsPlatformCertificateIds = fastly.getTlsPlatformCertificateIds({});\nconst exampleTlsPlatformCertificate = exampleTlsPlatformCertificateIds.then(exampleTlsPlatformCertificateIds =\u003e fastly.getTlsPlatformCertificate({\n id: exampleTlsPlatformCertificateIds.ids?[0],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_platform_certificate_ids = fastly.get_tls_platform_certificate_ids()\nexample_tls_platform_certificate = fastly.get_tls_platform_certificate(id=example_tls_platform_certificate_ids.ids[0])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsPlatformCertificateIds = Output.Create(Fastly.GetTlsPlatformCertificateIds.InvokeAsync());\n var exampleTlsPlatformCertificate = exampleTlsPlatformCertificateIds.Apply(exampleTlsPlatformCertificateIds =\u003e Output.Create(Fastly.GetTlsPlatformCertificate.InvokeAsync(new Fastly.GetTlsPlatformCertificateArgs\n {\n Id = exampleTlsPlatformCertificateIds.Ids?[0],\n })));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsPlatformCertificateIds, err := fastly.GetTlsPlatformCertificateIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPlatformCertificate(ctx, \u0026GetTlsPlatformCertificateArgs{\n\t\t\tId: pulumi.StringRef(exampleTlsPlatformCertificateIds.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get the IDs of available Platform TLS Certificates for use with other resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst exampleTlsPlatformCertificateIds = fastly.getTlsPlatformCertificateIds({});\nconst exampleTlsPlatformCertificate = exampleTlsPlatformCertificateIds.then(exampleTlsPlatformCertificateIds =\u003e fastly.getTlsPlatformCertificate({\n id: exampleTlsPlatformCertificateIds.ids?[0],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_tls_platform_certificate_ids = fastly.get_tls_platform_certificate_ids()\nexample_tls_platform_certificate = fastly.get_tls_platform_certificate(id=example_tls_platform_certificate_ids.ids[0])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var exampleTlsPlatformCertificateIds = Output.Create(Fastly.GetTlsPlatformCertificateIds.InvokeAsync());\n var exampleTlsPlatformCertificate = exampleTlsPlatformCertificateIds.Apply(exampleTlsPlatformCertificateIds =\u003e Output.Create(Fastly.GetTlsPlatformCertificate.InvokeAsync(new Fastly.GetTlsPlatformCertificateArgs\n {\n Id = exampleTlsPlatformCertificateIds.Ids?[0],\n })));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleTlsPlatformCertificateIds, err := fastly.GetTlsPlatformCertificateIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPlatformCertificate(ctx, \u0026GetTlsPlatformCertificateArgs{\n\t\t\tId: pulumi.StringRef(exampleTlsPlatformCertificateIds.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsPlatformCertificateIds.\n", "properties": { @@ -10922,7 +10830,7 @@ } }, "fastly:index/getTlsPrivateKey:getTlsPrivateKey": { - "description": "Use this data source to get information on a TLS Private Key uploaded to Fastly.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\n of filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\n with any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search\n is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKey({\n name: \"demo-private-key\",\n});\nexport const privateKeyNeedsReplacing = demo.then(demo =\u003e demo.replace);\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key(name=\"demo-private-key\")\npulumi.export(\"privateKeyNeedsReplacing\", demo.replace)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = Output.Create(Fastly.GetTlsPrivateKey.InvokeAsync(new Fastly.GetTlsPrivateKeyArgs\n {\n Name = \"demo-private-key\",\n }));\n this.PrivateKeyNeedsReplacing = demo.Apply(demo =\u003e demo.Replace);\n }\n\n [Output(\"privateKeyNeedsReplacing\")]\n public Output\u003cstring\u003e PrivateKeyNeedsReplacing { get; set; }\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.LookupTlsPrivateKey(ctx, \u0026GetTlsPrivateKeyArgs{\n\t\t\tName: pulumi.StringRef(\"demo-private-key\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"privateKeyNeedsReplacing\", demo.Replace)\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get information on a TLS Private Key uploaded to Fastly.\n\n\u003e **Warning:** The data source's filters are applied using an **AND** boolean operator, so depending on the combination\n of filters, they may become mutually exclusive. The exception to this is `id` which must not be specified in combination\n with any of the others.\n\n\u003e **Note:** If more or less than a single match is returned by the search, this provider will fail. Ensure that your search\n is specific enough to return a single key.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKey({\n name: \"demo-private-key\",\n});\nexport const privateKeyNeedsReplacing = demo.then(demo =\u003e demo.replace);\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key(name=\"demo-private-key\")\npulumi.export(\"privateKeyNeedsReplacing\", demo.replace)\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = Output.Create(Fastly.GetTlsPrivateKey.InvokeAsync(new Fastly.GetTlsPrivateKeyArgs\n {\n Name = \"demo-private-key\",\n }));\n this.PrivateKeyNeedsReplacing = demo.Apply(demo =\u003e demo.Replace);\n }\n\n [Output(\"privateKeyNeedsReplacing\")]\n public Output\u003cstring\u003e PrivateKeyNeedsReplacing { get; set; }\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemo, err := fastly.LookupTlsPrivateKey(ctx, \u0026GetTlsPrivateKeyArgs{\n\t\t\tName: pulumi.StringRef(\"demo-private-key\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"privateKeyNeedsReplacing\", demo.Replace)\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsPrivateKey.\n", "properties": { @@ -10998,7 +10906,7 @@ } }, "fastly:index/getTlsPrivateKeyIds:getTlsPrivateKeyIds": { - "description": "Use this data source to get the list of TLS private key identifiers in Fastly.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKeyIds({});\nconst example = fastly.getTlsPrivateKey({\n id: fastly_tls_private_key_ids.demo.ids[0],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key_ids()\nexample = fastly.get_tls_private_key(id=fastly_tls_private_key_ids[\"demo\"][\"ids\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = Output.Create(Fastly.GetTlsPrivateKeyIds.InvokeAsync());\n var example = Output.Create(Fastly.GetTlsPrivateKey.InvokeAsync(new Fastly.GetTlsPrivateKeyArgs\n {\n Id = fastly_tls_private_key_ids.Demo.Ids[0],\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsPrivateKeyIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPrivateKey(ctx, \u0026GetTlsPrivateKeyArgs{\n\t\t\tId: pulumi.StringRef(fastly_tls_private_key_ids.Demo.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get the list of TLS private key identifiers in Fastly.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = fastly.getTlsPrivateKeyIds({});\nconst example = fastly.getTlsPrivateKey({\n id: fastly_tls_private_key_ids.demo.ids[0],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.get_tls_private_key_ids()\nexample = fastly.get_tls_private_key(id=fastly_tls_private_key_ids[\"demo\"][\"ids\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demo = Output.Create(Fastly.GetTlsPrivateKeyIds.InvokeAsync());\n var example = Output.Create(Fastly.GetTlsPrivateKey.InvokeAsync(new Fastly.GetTlsPrivateKeyArgs\n {\n Id = fastly_tls_private_key_ids.Demo.Ids[0],\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.GetTlsPrivateKeyIds(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.LookupTlsPrivateKey(ctx, \u0026GetTlsPrivateKeyArgs{\n\t\t\tId: pulumi.StringRef(fastly_tls_private_key_ids.Demo.Ids[0]),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsPrivateKeyIds.\n", "properties": { @@ -11022,7 +10930,7 @@ } }, "fastly:index/getTlsSubscription:getTlsSubscription": { - "description": "Use this data source to get information about a TLS subscription.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsSubscription({\n domains: [\"example.com\"],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_subscription(domains=[\"example.com\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsSubscription.InvokeAsync(new Fastly.GetTlsSubscriptionArgs\n {\n Domains = \n {\n \"example.com\",\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsSubscription(ctx, \u0026GetTlsSubscriptionArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Use this data source to get information about a TLS subscription.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst example = pulumi.output(fastly.getTlsSubscription({\n domains: [\"example.com\"],\n}));\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample = fastly.get_tls_subscription(domains=[\"example.com\"])\n```\n```csharp\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Fastly.GetTlsSubscription.InvokeAsync(new Fastly.GetTlsSubscriptionArgs\n {\n Domains = \n {\n \"example.com\",\n },\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fastly.LookupTlsSubscription(ctx, \u0026GetTlsSubscriptionArgs{\n\t\t\tDomains: []string{\n\t\t\t\t\"example.com\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsSubscription.\n", "properties": { @@ -11223,7 +11131,7 @@ "go": { "generateExtraInputTypes": true, "generateResourceContainerTypes": true, - "importBasePath": "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" + "importBasePath": "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" }, "nodejs": { "compatibility": "tfbridge20", diff --git a/provider/cmd/pulumi-tfgen-fastly/main.go b/provider/cmd/pulumi-tfgen-fastly/main.go index adb98723..89784901 100644 --- a/provider/cmd/pulumi-tfgen-fastly/main.go +++ b/provider/cmd/pulumi-tfgen-fastly/main.go @@ -17,8 +17,8 @@ package main import ( "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfgen" - fastly "github.com/pulumi/pulumi-fastly/provider/v4" - "github.com/pulumi/pulumi-fastly/provider/v4/pkg/version" + fastly "github.com/pulumi/pulumi-fastly/provider/v5" + "github.com/pulumi/pulumi-fastly/provider/v5/pkg/version" ) func main() { diff --git a/provider/go.mod b/provider/go.mod index 6b24d596..0394b9c9 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -1,6 +1,6 @@ -module github.com/pulumi/pulumi-fastly/provider/v4 +module github.com/pulumi/pulumi-fastly/provider/v5 -go 1.16 +go 1.18 require ( github.com/fastly/terraform-provider-fastly v0.20.2 @@ -8,8 +8,194 @@ require ( github.com/pulumi/pulumi/sdk/v3 v3.30.0 ) +require ( + cloud.google.com/go v0.81.0 // indirect + cloud.google.com/go/logging v1.0.0 // indirect + cloud.google.com/go/storage v1.15.0 // indirect + github.com/Azure/azure-pipeline-go v0.2.3 // indirect + github.com/Azure/azure-sdk-for-go v54.0.0+incompatible // indirect + github.com/Azure/azure-storage-blob-go v0.13.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.18 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.7 // indirect + github.com/Azure/go-autorest/autorest/azure/cli v0.4.2 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/Masterminds/goutils v1.1.0 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/sprig v2.22.0+incompatible // indirect + github.com/Microsoft/go-winio v0.4.16 // indirect + github.com/agext/levenshtein v1.2.2 // indirect + github.com/apparentlymart/go-cidr v1.1.0 // indirect + github.com/apparentlymart/go-textseg/v12 v12.0.0 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/armon/go-radix v1.0.0 // indirect + github.com/aws/aws-sdk-go v1.38.35 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/bgentry/speakeasy v0.1.0 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/cheggaaa/pb v1.0.27 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/djherbis/times v1.2.0 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/emirpasic/gods v1.12.0 // indirect + github.com/fastly/go-fastly/v6 v6.4.0 // indirect + github.com/fatih/color v1.9.0 // indirect + github.com/form3tech-oss/jwt-go v3.2.2+incompatible // indirect + github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect + github.com/gofrs/uuid v3.3.0+incompatible // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/google/go-cmp v0.5.7 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/jsonapi v1.0.0 // indirect + github.com/google/uuid v1.2.0 // indirect + github.com/google/wire v0.5.0 // indirect + github.com/googleapis/gax-go/v2 v2.0.5 // indirect + github.com/gorilla/mux v1.7.4 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-checkpoint v0.5.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect + github.com/hashicorp/go-getter v1.5.3 // indirect + github.com/hashicorp/go-hclog v0.16.1 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-plugin v1.4.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.0 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/go-uuid v1.0.2 // indirect + github.com/hashicorp/go-version v1.4.0 // indirect + github.com/hashicorp/hc-install v0.3.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/hcl/v2 v2.8.2 // indirect + github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 // indirect + github.com/hashicorp/logutils v1.0.0 // indirect + github.com/hashicorp/terraform-exec v0.15.0 // indirect + github.com/hashicorp/terraform-json v0.13.0 // indirect + github.com/hashicorp/terraform-plugin-go v0.5.0 // indirect + github.com/hashicorp/terraform-plugin-log v0.2.0 // indirect + github.com/hashicorp/terraform-plugin-sdk v1.16.1 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.10.1 // indirect + github.com/hashicorp/terraform-registry-address v0.0.0-20210412075316-9b2996cce896 // indirect + github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 // indirect + github.com/hashicorp/vault/api v1.1.0 // indirect + github.com/hashicorp/vault/sdk v0.2.0 // indirect + github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/iancoleman/strcase v0.2.0 // indirect + github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/json-iterator/go v1.1.9 // indirect + github.com/jstemmer/go-junit-report v0.9.1 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect + github.com/klauspost/compress v1.12.2 // indirect + github.com/mattn/go-colorable v0.1.8 // indirect + github.com/mattn/go-ieproxy v0.0.1 // indirect + github.com/mattn/go-isatty v0.0.12 // indirect + github.com/mattn/go-runewidth v0.0.8 // indirect + github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect + github.com/mitchellh/cli v1.1.2 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/go-wordwrap v1.0.0 // indirect + github.com/mitchellh/hashstructure v1.0.0 // indirect + github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/oklog/run v1.0.0 // indirect + github.com/opentracing/basictracer-go v1.0.0 // indirect + github.com/opentracing/opentracing-go v1.1.0 // indirect + github.com/peterhellberg/link v1.1.0 // indirect + github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect + github.com/pierrec/lz4 v2.6.0+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/posener/complete v1.2.1 // indirect + github.com/pulumi/pulumi/pkg/v3 v3.30.0 // indirect + github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/rjeczalik/notify v0.9.2 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/spf13/afero v1.2.2 // indirect + github.com/spf13/cobra v1.4.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/src-d/gcfg v1.4.0 // indirect + github.com/stretchr/testify v1.7.1 // indirect + github.com/terraform-providers/terraform-provider-archive v1.3.0 // indirect + github.com/terraform-providers/terraform-provider-http v1.2.0 // indirect + github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 // indirect + github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect + github.com/uber/jaeger-client-go v2.22.1+incompatible // indirect + github.com/uber/jaeger-lib v2.2.0+incompatible // indirect + github.com/ulikunitz/xz v0.5.8 // indirect + github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect + github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect + github.com/vmihailenco/tagparser v0.1.1 // indirect + github.com/xanzy/ssh-agent v0.3.0 // 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/zclconf/go-cty v1.9.1 // indirect + github.com/zclconf/go-cty-yaml v1.0.2 // indirect + go.opencensus.io v0.23.0 // indirect + go.uber.org/atomic v1.7.0 // indirect + gocloud.dev v0.23.0 // indirect + gocloud.dev/secrets/hashivault v0.23.0 // indirect + golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e // indirect + golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 // indirect + golang.org/x/mod v0.5.1 // indirect + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect + golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c // indirect + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect + golang.org/x/tools v0.1.8 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/api v0.46.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20210506142907-4a47615972c2 // indirect + google.golang.org/grpc v1.37.0 // indirect + google.golang.org/protobuf v1.26.0 // indirect + gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f // indirect + gopkg.in/square/go-jose.v2 v2.5.1 // indirect + gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect + gopkg.in/src-d/go-git.v4 v4.13.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect +) + replace ( - github.com/fastly/terraform-provider-fastly => github.com/pulumi/terraform-provider-fastly v0.16.1-0.20220526112218-97ed21413b62 + github.com/fastly/terraform-provider-fastly => github.com/pulumi/terraform-provider-fastly v0.16.1-0.20220707124105-b4239869d446 github.com/hashicorp/go-getter v1.5.0 => github.com/hashicorp/go-getter v1.4.0 github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20211230170131-3a7c83bfab87 ) diff --git a/provider/go.sum b/provider/go.sum index a30c18b0..ba20d269 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -138,7 +138,6 @@ github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/Y github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= -github.com/apparentlymart/go-textseg v1.0.0 h1:rRmlIsPEEhUTIKQb7T++Nz/A5Q6C9IuX2wFoYVvnCs0= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v12 v12.0.0 h1:bNEQyAGak9tojivJNkoqWErVCQbjdL7GzRt3F8NvfJ0= github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= @@ -164,8 +163,6 @@ github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2z github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bflad/gopaniccheck v0.1.0/go.mod h1:ZCj2vSr7EqVeDaqVsWN4n2MwdROx1YL+LFo47TSWtsA= -github.com/bflad/tfproviderlint v0.27.1/go.mod h1:7Z9Pyl1Z1UWJcPBuyjN89D2NaJGpjReQb5NoaaQCthQ= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= @@ -236,8 +233,8 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fastly/go-fastly/v6 v6.3.2 h1:MQawBCmIy/m9rs3aI0V+0N8P8UODJs1EfJPHJVBwEqI= -github.com/fastly/go-fastly/v6 v6.3.2/go.mod h1:NrIbx45etTFv35rgfRe+eQY+8kA47arWABIkOaQ+roY= +github.com/fastly/go-fastly/v6 v6.4.0 h1:w3BO8QSpaVDIz/30/xgLdVwDS/sjr1L8nKwXzUuQUqQ= +github.com/fastly/go-fastly/v6 v6.4.0/go.mod h1:NrIbx45etTFv35rgfRe+eQY+8kA47arWABIkOaQ+roY= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= @@ -480,15 +477,12 @@ github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8 github.com/hashicorp/terraform-config-inspect v0.0.0-20191212124732-c6ae6269b9d7 h1:Pc5TCv9mbxFN6UVX0LH6CpQrdTM5YjbVI2w15237Pjk= github.com/hashicorp/terraform-config-inspect v0.0.0-20191212124732-c6ae6269b9d7/go.mod h1:p+ivJws3dpqbp1iP84+npOyAmTTOLMgCzrXd3GSdn/A= github.com/hashicorp/terraform-exec v0.10.0/go.mod h1:tOT8j1J8rP05bZBGWXfMyU3HkLi1LWyqL3Bzsc3CJjo= -github.com/hashicorp/terraform-exec v0.14.0/go.mod h1:qrAASDq28KZiMPDnQ02sFS9udcqEkRly002EA2izXTA= github.com/hashicorp/terraform-exec v0.15.0 h1:cqjh4d8HYNQrDoEmlSGelHmg2DYDh5yayckvJ5bV18E= github.com/hashicorp/terraform-exec v0.15.0/go.mod h1:H4IG8ZxanU+NW0ZpDRNsvh9f0ul7C0nHP+rUR/CHs7I= github.com/hashicorp/terraform-json v0.4.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= github.com/hashicorp/terraform-json v0.5.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= -github.com/hashicorp/terraform-json v0.12.0/go.mod h1:pmbq9o4EuL43db5+0ogX10Yofv1nozM+wskr/bGFJpI= github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY= github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk= -github.com/hashicorp/terraform-plugin-docs v0.5.0/go.mod h1:Z4q6unfv05W7fjpEy8ZC+nFijZmcm64Iag6I2HKRMSA= github.com/hashicorp/terraform-plugin-go v0.5.0 h1:+gCDdF0hcYCm0YBTxrP4+K1NGIS5ZKZBKDORBewLJmg= github.com/hashicorp/terraform-plugin-go v0.5.0/go.mod h1:PAVN26PNGpkkmsvva1qfriae5Arky3xl3NfzKa8XFVM= github.com/hashicorp/terraform-plugin-log v0.2.0 h1:rjflRuBqCnSk3UHOR25MP1G5BDLKktTA6lNjjcAnBfI= @@ -733,8 +727,8 @@ github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e h1:Di github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e/go.mod h1:sZ9FUzGO+yM41hsQHs/yIcj/Y993qMdBxBU5mpDmAfQ= github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20211230170131-3a7c83bfab87 h1:Reqyb/CbcDwThvBRzA62H7cvuCqgTJuGNt+F6mnmXJ4= github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20211230170131-3a7c83bfab87/go.mod h1:FjM9DXWfP0w/AeOtJoSKHBZ01LqmaO6uP4bXhv3fekw= -github.com/pulumi/terraform-provider-fastly v0.16.1-0.20220526112218-97ed21413b62 h1:+xdibBfUrwuHj4QoHxfl6WFvgj1BMbV5OPNP1DreloM= -github.com/pulumi/terraform-provider-fastly v0.16.1-0.20220526112218-97ed21413b62/go.mod h1:gcri9VqfFCrTfHPPasuG8K2em4jiVWgv8Y64BwRhmhY= +github.com/pulumi/terraform-provider-fastly v0.16.1-0.20220707124105-b4239869d446 h1:zpQPF5AW+3QwSdyy1ecfwiL2Qi7I60coCAE0QCpLI30= +github.com/pulumi/terraform-provider-fastly v0.16.1-0.20220707124105-b4239869d446/go.mod h1:pJ/bTkQYAG93ERZnyGrO2BjBgUBgnVeT/v1k6HFUUcA= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= @@ -742,8 +736,6 @@ github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -841,7 +833,6 @@ github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.3.1/go.mod h1:YO23e2L18AG+ZYQfSobnY4G65nvwvprPCxBHkufUH1k= github.com/zclconf/go-cty v1.7.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o= -github.com/zclconf/go-cty v1.8.4/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.9.1 h1:viqrgQwFl5UpSxc046qblj78wZXVDFnSOufaOTER+cc= github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= @@ -1139,7 +1130,6 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK 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-20200214201135-548b770e2dfa/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= diff --git a/provider/resources.go b/provider/resources.go index ea42eb5d..6d970a24 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -20,7 +20,7 @@ import ( "unicode" "github.com/fastly/terraform-provider-fastly/fastly" - "github.com/pulumi/pulumi-fastly/provider/v4/pkg/version" + "github.com/pulumi/pulumi-fastly/provider/v5/pkg/version" "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" shimv2 "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfshim/sdk-v2" "github.com/pulumi/pulumi/sdk/v3/go/common/tokens" @@ -78,6 +78,7 @@ func Provider() tfbridge.ProviderInfo { Config: map[string]*tfbridge.SchemaInfo{}, Resources: map[string]*tfbridge.ResourceInfo{ "fastly_service_acl_entries": {Tok: makeResource(mainMod, "ServiceACLEntries")}, + "fastly_service_authorization": {Tok: makeResource(mainMod, "ServiceAuthorization")}, "fastly_service_dictionary_items": {Tok: makeResource(mainMod, "ServiceDictionaryItems")}, "fastly_service_dynamic_snippet_content": {Tok: makeResource(mainMod, "ServiceDynamicSnippetContent")}, "fastly_service_vcl": {Tok: makeResource(mainMod, "ServiceVcl")}, @@ -115,6 +116,7 @@ func Provider() tfbridge.ProviderInfo { "fastly_tls_private_key_ids": {Tok: makeDataSource(mainMod, "getTlsPrivateKeyIds")}, "fastly_tls_subscription": {Tok: makeDataSource(mainMod, "getTlsSubscription")}, "fastly_tls_subscription_ids": {Tok: makeDataSource(mainMod, "getTlsSubscriptionIds")}, + "fastly_services": {Tok: makeDataSource(mainMod, "getServices")}, }, JavaScript: &tfbridge.JavaScriptInfo{ // List any npm dependencies and their versions diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs index b8ac710d..cb457db4 100644 --- a/sdk/dotnet/Config/Config.cs +++ b/sdk/dotnet/Config/Config.cs @@ -66,7 +66,8 @@ public static bool? ForceHttp2 private static readonly __Value _noAuth = new __Value(() => __config.GetBoolean("noAuth")); /// - /// Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + /// Set to `true` if your configuration only consumes data sources that do not require authentication, such as + /// `fastly_ip_ranges` /// public static bool? NoAuth { diff --git a/sdk/dotnet/GetServices.cs b/sdk/dotnet/GetServices.cs new file mode 100644 index 00000000..7e554608 --- /dev/null +++ b/sdk/dotnet/GetServices.cs @@ -0,0 +1,51 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Fastly +{ + public static class GetServices + { + /// + /// Use this data source to get the list of the [Fastly services](https://developer.fastly.com/reference/api/services/service/). + /// + public static Task InvokeAsync(InvokeOptions? options = null) + => Pulumi.Deployment.Instance.InvokeAsync("fastly:index/getServices:getServices", InvokeArgs.Empty, options.WithDefaults()); + } + + + [OutputType] + public sealed class GetServicesResult + { + /// + /// A detailed list of Fastly services in your account. This is limited to the services the API token can read. + /// + public readonly ImmutableArray Details; + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + /// + /// A list of service IDs in your account. This is limited to the services the API token can read. + /// + public readonly ImmutableArray Ids; + + [OutputConstructor] + private GetServicesResult( + ImmutableArray details, + + string id, + + ImmutableArray ids) + { + Details = details; + Id = id; + Ids = ids; + } + } +} diff --git a/sdk/dotnet/Inputs/ServiceComputeDirectorArgs.cs b/sdk/dotnet/Inputs/ServiceComputeDirectorArgs.cs deleted file mode 100644 index 8ec4c5b6..00000000 --- a/sdk/dotnet/Inputs/ServiceComputeDirectorArgs.cs +++ /dev/null @@ -1,67 +0,0 @@ -// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.Fastly.Inputs -{ - - public sealed class ServiceComputeDirectorArgs : Pulumi.ResourceArgs - { - [Input("backends", required: true)] - private InputList? _backends; - - /// - /// Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - /// - public InputList Backends - { - get => _backends ?? (_backends = new InputList()); - set => _backends = value; - } - - /// - /// An optional comment about the Director - /// - [Input("comment")] - public Input? Comment { get; set; } - - /// - /// Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - /// - [Input("name", required: true)] - public Input Name { get; set; } = null!; - - /// - /// Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - /// - [Input("quorum")] - public Input? Quorum { get; set; } - - /// - /// How many backends to search if it fails. Default `5` - /// - [Input("retries")] - public Input? Retries { get; set; } - - /// - /// Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - /// - [Input("shield")] - public Input? Shield { get; set; } - - /// - /// Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - /// - [Input("type")] - public Input? Type { get; set; } - - public ServiceComputeDirectorArgs() - { - } - } -} diff --git a/sdk/dotnet/Inputs/ServiceComputeDirectorGetArgs.cs b/sdk/dotnet/Inputs/ServiceComputeDirectorGetArgs.cs deleted file mode 100644 index 76ba432c..00000000 --- a/sdk/dotnet/Inputs/ServiceComputeDirectorGetArgs.cs +++ /dev/null @@ -1,67 +0,0 @@ -// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.Fastly.Inputs -{ - - public sealed class ServiceComputeDirectorGetArgs : Pulumi.ResourceArgs - { - [Input("backends", required: true)] - private InputList? _backends; - - /// - /// Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - /// - public InputList Backends - { - get => _backends ?? (_backends = new InputList()); - set => _backends = value; - } - - /// - /// An optional comment about the Director - /// - [Input("comment")] - public Input? Comment { get; set; } - - /// - /// Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - /// - [Input("name", required: true)] - public Input Name { get; set; } = null!; - - /// - /// Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - /// - [Input("quorum")] - public Input? Quorum { get; set; } - - /// - /// How many backends to search if it fails. Default `5` - /// - [Input("retries")] - public Input? Retries { get; set; } - - /// - /// Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - /// - [Input("shield")] - public Input? Shield { get; set; } - - /// - /// Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - /// - [Input("type")] - public Input? Type { get; set; } - - public ServiceComputeDirectorGetArgs() - { - } - } -} diff --git a/sdk/dotnet/Inputs/ServiceComputeHealthcheckArgs.cs b/sdk/dotnet/Inputs/ServiceComputeHealthcheckArgs.cs deleted file mode 100644 index 434f8a3b..00000000 --- a/sdk/dotnet/Inputs/ServiceComputeHealthcheckArgs.cs +++ /dev/null @@ -1,85 +0,0 @@ -// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.Fastly.Inputs -{ - - public sealed class ServiceComputeHealthcheckArgs : Pulumi.ResourceArgs - { - /// - /// How often to run the Healthcheck in milliseconds. Default `5000` - /// - [Input("checkInterval")] - public Input? CheckInterval { get; set; } - - /// - /// The status code expected from the host. Default `200` - /// - [Input("expectedResponse")] - public Input? ExpectedResponse { get; set; } - - /// - /// The Host header to send for this Healthcheck - /// - [Input("host", required: true)] - public Input Host { get; set; } = null!; - - /// - /// Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - /// - [Input("httpVersion")] - public Input? HttpVersion { get; set; } - - /// - /// When loading a config, the initial number of probes to be seen as OK. Default `3` - /// - [Input("initial")] - public Input? Initial { get; set; } - - /// - /// Which HTTP method to use. Default `HEAD` - /// - [Input("method")] - public Input? Method { get; set; } - - /// - /// A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - /// - [Input("name", required: true)] - public Input Name { get; set; } = null!; - - /// - /// The path to check - /// - [Input("path", required: true)] - public Input Path { get; set; } = null!; - - /// - /// How many Healthchecks must succeed to be considered healthy. Default `3` - /// - [Input("threshold")] - public Input? Threshold { get; set; } - - /// - /// Timeout in milliseconds. Default `500` - /// - [Input("timeout")] - public Input? Timeout { get; set; } - - /// - /// The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - /// - [Input("window")] - public Input? Window { get; set; } - - public ServiceComputeHealthcheckArgs() - { - } - } -} diff --git a/sdk/dotnet/Inputs/ServiceComputeHealthcheckGetArgs.cs b/sdk/dotnet/Inputs/ServiceComputeHealthcheckGetArgs.cs deleted file mode 100644 index 02682b73..00000000 --- a/sdk/dotnet/Inputs/ServiceComputeHealthcheckGetArgs.cs +++ /dev/null @@ -1,85 +0,0 @@ -// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.Fastly.Inputs -{ - - public sealed class ServiceComputeHealthcheckGetArgs : Pulumi.ResourceArgs - { - /// - /// How often to run the Healthcheck in milliseconds. Default `5000` - /// - [Input("checkInterval")] - public Input? CheckInterval { get; set; } - - /// - /// The status code expected from the host. Default `200` - /// - [Input("expectedResponse")] - public Input? ExpectedResponse { get; set; } - - /// - /// The Host header to send for this Healthcheck - /// - [Input("host", required: true)] - public Input Host { get; set; } = null!; - - /// - /// Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - /// - [Input("httpVersion")] - public Input? HttpVersion { get; set; } - - /// - /// When loading a config, the initial number of probes to be seen as OK. Default `3` - /// - [Input("initial")] - public Input? Initial { get; set; } - - /// - /// Which HTTP method to use. Default `HEAD` - /// - [Input("method")] - public Input? Method { get; set; } - - /// - /// A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - /// - [Input("name", required: true)] - public Input Name { get; set; } = null!; - - /// - /// The path to check - /// - [Input("path", required: true)] - public Input Path { get; set; } = null!; - - /// - /// How many Healthchecks must succeed to be considered healthy. Default `3` - /// - [Input("threshold")] - public Input? Threshold { get; set; } - - /// - /// Timeout in milliseconds. Default `500` - /// - [Input("timeout")] - public Input? Timeout { get; set; } - - /// - /// The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - /// - [Input("window")] - public Input? Window { get; set; } - - public ServiceComputeHealthcheckGetArgs() - { - } - } -} diff --git a/sdk/dotnet/Outputs/GetServicesDetailResult.cs b/sdk/dotnet/Outputs/GetServicesDetailResult.cs new file mode 100644 index 00000000..855ec3c5 --- /dev/null +++ b/sdk/dotnet/Outputs/GetServicesDetailResult.cs @@ -0,0 +1,56 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Fastly.Outputs +{ + + [OutputType] + public sealed class GetServicesDetailResult + { + public readonly string Comment; + public readonly string CreatedAt; + public readonly string CustomerId; + /// + /// The ID of this resource. + /// + public readonly string Id; + public readonly string Name; + public readonly string Type; + public readonly string UpdatedAt; + public readonly int Version; + + [OutputConstructor] + private GetServicesDetailResult( + string comment, + + string createdAt, + + string customerId, + + string id, + + string name, + + string type, + + string updatedAt, + + int version) + { + Comment = comment; + CreatedAt = createdAt; + CustomerId = customerId; + Id = id; + Name = name; + Type = type; + UpdatedAt = updatedAt; + Version = version; + } + } +} diff --git a/sdk/dotnet/Outputs/ServiceComputeDirector.cs b/sdk/dotnet/Outputs/ServiceComputeDirector.cs deleted file mode 100644 index 158c3fbe..00000000 --- a/sdk/dotnet/Outputs/ServiceComputeDirector.cs +++ /dev/null @@ -1,70 +0,0 @@ -// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.Fastly.Outputs -{ - - [OutputType] - public sealed class ServiceComputeDirector - { - /// - /// Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - /// - public readonly ImmutableArray Backends; - /// - /// An optional comment about the Director - /// - public readonly string? Comment; - /// - /// Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - /// - public readonly string Name; - /// - /// Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - /// - public readonly int? Quorum; - /// - /// How many backends to search if it fails. Default `5` - /// - public readonly int? Retries; - /// - /// Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - /// - public readonly string? Shield; - /// - /// Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - /// - public readonly int? Type; - - [OutputConstructor] - private ServiceComputeDirector( - ImmutableArray backends, - - string? comment, - - string name, - - int? quorum, - - int? retries, - - string? shield, - - int? type) - { - Backends = backends; - Comment = comment; - Name = name; - Quorum = quorum; - Retries = retries; - Shield = shield; - Type = type; - } - } -} diff --git a/sdk/dotnet/Outputs/ServiceComputeHealthcheck.cs b/sdk/dotnet/Outputs/ServiceComputeHealthcheck.cs deleted file mode 100644 index 6ec2ec2b..00000000 --- a/sdk/dotnet/Outputs/ServiceComputeHealthcheck.cs +++ /dev/null @@ -1,98 +0,0 @@ -// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.Fastly.Outputs -{ - - [OutputType] - public sealed class ServiceComputeHealthcheck - { - /// - /// How often to run the Healthcheck in milliseconds. Default `5000` - /// - public readonly int? CheckInterval; - /// - /// The status code expected from the host. Default `200` - /// - public readonly int? ExpectedResponse; - /// - /// The Host header to send for this Healthcheck - /// - public readonly string Host; - /// - /// Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - /// - public readonly string? HttpVersion; - /// - /// When loading a config, the initial number of probes to be seen as OK. Default `3` - /// - public readonly int? Initial; - /// - /// Which HTTP method to use. Default `HEAD` - /// - public readonly string? Method; - /// - /// A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - /// - public readonly string Name; - /// - /// The path to check - /// - public readonly string Path; - /// - /// How many Healthchecks must succeed to be considered healthy. Default `3` - /// - public readonly int? Threshold; - /// - /// Timeout in milliseconds. Default `500` - /// - public readonly int? Timeout; - /// - /// The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - /// - public readonly int? Window; - - [OutputConstructor] - private ServiceComputeHealthcheck( - int? checkInterval, - - int? expectedResponse, - - string host, - - string? httpVersion, - - int? initial, - - string? method, - - string name, - - string path, - - int? threshold, - - int? timeout, - - int? window) - { - CheckInterval = checkInterval; - ExpectedResponse = expectedResponse; - Host = host; - HttpVersion = httpVersion; - Initial = initial; - Method = method; - Name = name; - Path = path; - Threshold = threshold; - Timeout = timeout; - Window = window; - } - } -} diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs index 53441745..a449a939 100644 --- a/sdk/dotnet/Provider.cs +++ b/sdk/dotnet/Provider.cs @@ -79,7 +79,8 @@ public sealed class ProviderArgs : Pulumi.ResourceArgs public Input? ForceHttp2 { get; set; } /// - /// Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + /// Set to `true` if your configuration only consumes data sources that do not require authentication, such as + /// `fastly_ip_ranges` /// [Input("noAuth", json: true)] public Input? NoAuth { get; set; } diff --git a/sdk/dotnet/ServiceAuthorization.cs b/sdk/dotnet/ServiceAuthorization.cs new file mode 100644 index 00000000..b4806109 --- /dev/null +++ b/sdk/dotnet/ServiceAuthorization.cs @@ -0,0 +1,170 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Fastly +{ + /// + /// Configures authorization with granular permissions to services. Users can be granted rights for services on different levels. + /// + /// The Service Authorization resource requires a user id, service id and an optional permission. + /// + /// ## Example Usage + /// + /// Basic usage: + /// + /// ```csharp + /// using Pulumi; + /// using Fastly = Pulumi.Fastly; + /// + /// class MyStack : Stack + /// { + /// public MyStack() + /// { + /// var demo = new Fastly.ServiceVcl("demo", new Fastly.ServiceVclArgs + /// { + /// }); + /// //... + /// var user = new Fastly.User("user", new Fastly.UserArgs + /// { + /// }); + /// // ... + /// var auth = new Fastly.ServiceAuthorization("auth", new Fastly.ServiceAuthorizationArgs + /// { + /// ServiceId = demo.Id, + /// UserId = user.Id, + /// Permission = "purge_all", + /// }); + /// } + /// + /// } + /// ``` + /// + /// ## Import + /// + /// A Fastly Service Authorization can be imported using their user ID, e.g. + /// + /// ```sh + /// $ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx + /// ``` + /// + [FastlyResourceType("fastly:index/serviceAuthorization:ServiceAuthorization")] + public partial class ServiceAuthorization : Pulumi.CustomResource + { + /// + /// The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + /// + [Output("permission")] + public Output Permission { get; private set; } = null!; + + /// + /// The ID of the service to grant permissions for. + /// + [Output("serviceId")] + public Output ServiceId { get; private set; } = null!; + + /// + /// The ID of the user which will receive the granted permissions. + /// + [Output("userId")] + public Output UserId { get; private set; } = null!; + + + /// + /// Create a ServiceAuthorization resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public ServiceAuthorization(string name, ServiceAuthorizationArgs args, CustomResourceOptions? options = null) + : base("fastly:index/serviceAuthorization:ServiceAuthorization", name, args ?? new ServiceAuthorizationArgs(), MakeResourceOptions(options, "")) + { + } + + private ServiceAuthorization(string name, Input id, ServiceAuthorizationState? state = null, CustomResourceOptions? options = null) + : base("fastly:index/serviceAuthorization:ServiceAuthorization", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing ServiceAuthorization resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static ServiceAuthorization Get(string name, Input id, ServiceAuthorizationState? state = null, CustomResourceOptions? options = null) + { + return new ServiceAuthorization(name, id, state, options); + } + } + + public sealed class ServiceAuthorizationArgs : Pulumi.ResourceArgs + { + /// + /// The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + /// + [Input("permission", required: true)] + public Input Permission { get; set; } = null!; + + /// + /// The ID of the service to grant permissions for. + /// + [Input("serviceId", required: true)] + public Input ServiceId { get; set; } = null!; + + /// + /// The ID of the user which will receive the granted permissions. + /// + [Input("userId", required: true)] + public Input UserId { get; set; } = null!; + + public ServiceAuthorizationArgs() + { + } + } + + public sealed class ServiceAuthorizationState : Pulumi.ResourceArgs + { + /// + /// The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + /// + [Input("permission")] + public Input? Permission { get; set; } + + /// + /// The ID of the service to grant permissions for. + /// + [Input("serviceId")] + public Input? ServiceId { get; set; } + + /// + /// The ID of the user which will receive the granted permissions. + /// + [Input("userId")] + public Input? UserId { get; set; } + + public ServiceAuthorizationState() + { + } + } +} diff --git a/sdk/dotnet/ServiceCompute.cs b/sdk/dotnet/ServiceCompute.cs index dc00c2d3..5ab9d5b1 100644 --- a/sdk/dotnet/ServiceCompute.cs +++ b/sdk/dotnet/ServiceCompute.cs @@ -54,24 +54,9 @@ public partial class ServiceCompute : Pulumi.CustomResource [Output("comment")] public Output Comment { get; private set; } = null!; - /// - /// The default hostname - /// - [Output("defaultHost")] - public Output DefaultHost { get; private set; } = null!; - - /// - /// The default Time-to-live (TTL) for requests - /// - [Output("defaultTtl")] - public Output DefaultTtl { get; private set; } = null!; - [Output("dictionaries")] public Output> Dictionaries { get; private set; } = null!; - [Output("directors")] - public Output> Directors { get; private set; } = null!; - /// /// A set of Domain names to serve as entry points for your Service /// @@ -84,9 +69,6 @@ public partial class ServiceCompute : Pulumi.CustomResource [Output("forceDestroy")] public Output ForceDestroy { get; private set; } = null!; - [Output("healthchecks")] - public Output> Healthchecks { get; private set; } = null!; - [Output("loggingBigqueries")] public Output> LoggingBigqueries { get; private set; } = null!; @@ -177,18 +159,6 @@ public partial class ServiceCompute : Pulumi.CustomResource [Output("package")] public Output Package { get; private set; } = null!; - /// - /// Enables serving a stale object if there is an error - /// - [Output("staleIfError")] - public Output StaleIfError { get; private set; } = null!; - - /// - /// The default time-to-live (TTL) for serving the stale object for the version - /// - [Output("staleIfErrorTtl")] - public Output StaleIfErrorTtl { get; private set; } = null!; - /// /// Description field for the version /// @@ -261,18 +231,6 @@ public InputList Backends [Input("comment")] public Input? Comment { get; set; } - /// - /// The default hostname - /// - [Input("defaultHost")] - public Input? DefaultHost { get; set; } - - /// - /// The default Time-to-live (TTL) for requests - /// - [Input("defaultTtl")] - public Input? DefaultTtl { get; set; } - [Input("dictionaries")] private InputList? _dictionaries; public InputList Dictionaries @@ -281,14 +239,6 @@ public InputList Dictionaries set => _dictionaries = value; } - [Input("directors")] - private InputList? _directors; - public InputList Directors - { - get => _directors ?? (_directors = new InputList()); - set => _directors = value; - } - [Input("domains", required: true)] private InputList? _domains; @@ -307,14 +257,6 @@ public InputList Domains [Input("forceDestroy")] public Input? ForceDestroy { get; set; } - [Input("healthchecks")] - private InputList? _healthchecks; - public InputList Healthchecks - { - get => _healthchecks ?? (_healthchecks = new InputList()); - set => _healthchecks = value; - } - [Input("loggingBigqueries")] private InputList? _loggingBigqueries; public InputList LoggingBigqueries @@ -535,18 +477,6 @@ public InputList LoggingSyslogs [Input("package", required: true)] public Input Package { get; set; } = null!; - /// - /// Enables serving a stale object if there is an error - /// - [Input("staleIfError")] - public Input? StaleIfError { get; set; } - - /// - /// The default time-to-live (TTL) for serving the stale object for the version - /// - [Input("staleIfErrorTtl")] - public Input? StaleIfErrorTtl { get; set; } - /// /// Description field for the version /// @@ -592,18 +522,6 @@ public InputList Backends [Input("comment")] public Input? Comment { get; set; } - /// - /// The default hostname - /// - [Input("defaultHost")] - public Input? DefaultHost { get; set; } - - /// - /// The default Time-to-live (TTL) for requests - /// - [Input("defaultTtl")] - public Input? DefaultTtl { get; set; } - [Input("dictionaries")] private InputList? _dictionaries; public InputList Dictionaries @@ -612,14 +530,6 @@ public InputList Dictionaries set => _dictionaries = value; } - [Input("directors")] - private InputList? _directors; - public InputList Directors - { - get => _directors ?? (_directors = new InputList()); - set => _directors = value; - } - [Input("domains")] private InputList? _domains; @@ -638,14 +548,6 @@ public InputList Domains [Input("forceDestroy")] public Input? ForceDestroy { get; set; } - [Input("healthchecks")] - private InputList? _healthchecks; - public InputList Healthchecks - { - get => _healthchecks ?? (_healthchecks = new InputList()); - set => _healthchecks = value; - } - [Input("loggingBigqueries")] private InputList? _loggingBigqueries; public InputList LoggingBigqueries @@ -866,18 +768,6 @@ public InputList LoggingSyslogs [Input("package")] public Input? Package { get; set; } - /// - /// Enables serving a stale object if there is an error - /// - [Input("staleIfError")] - public Input? StaleIfError { get; set; } - - /// - /// The default time-to-live (TTL) for serving the stale object for the version - /// - [Input("staleIfErrorTtl")] - public Input? StaleIfErrorTtl { get; set; } - /// /// Description field for the version /// diff --git a/sdk/dotnet/ServiceVcl.cs b/sdk/dotnet/ServiceVcl.cs index 9bb90664..5d05eaec 100644 --- a/sdk/dotnet/ServiceVcl.cs +++ b/sdk/dotnet/ServiceVcl.cs @@ -18,305 +18,6 @@ namespace Pulumi.Fastly /// traffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname] /// on their documentation site for guidance. /// - /// ## Example Usage - /// - /// Basic usage: - /// - /// ```csharp - /// using Pulumi; - /// using Fastly = Pulumi.Fastly; - /// - /// class MyStack : Stack - /// { - /// public MyStack() - /// { - /// var demo = new Fastly.ServiceVcl("demo", new Fastly.ServiceVclArgs - /// { - /// Backends = - /// { - /// new Fastly.Inputs.ServiceVclBackendArgs - /// { - /// Address = "127.0.0.1", - /// Name = "localhost", - /// Port = 80, - /// }, - /// }, - /// Domains = - /// { - /// new Fastly.Inputs.ServiceVclDomainArgs - /// { - /// Comment = "demo", - /// Name = "demo.notexample.com", - /// }, - /// }, - /// ForceDestroy = true, - /// }); - /// } - /// - /// } - /// ``` - /// - /// Basic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header: - /// - /// ```csharp - /// using Pulumi; - /// using Aws = Pulumi.Aws; - /// using Fastly = Pulumi.Fastly; - /// - /// class MyStack : Stack - /// { - /// public MyStack() - /// { - /// var demo = new Fastly.ServiceVcl("demo", new Fastly.ServiceVclArgs - /// { - /// Backends = - /// { - /// new Fastly.Inputs.ServiceVclBackendArgs - /// { - /// Address = "demo.notexample.com.s3-website-us-west-2.amazonaws.com", - /// Name = "AWS S3 hosting", - /// OverrideHost = "demo.notexample.com.s3-website-us-west-2.amazonaws.com", - /// Port = 80, - /// }, - /// }, - /// Domains = - /// { - /// new Fastly.Inputs.ServiceVclDomainArgs - /// { - /// Comment = "demo", - /// Name = "demo.notexample.com", - /// }, - /// }, - /// ForceDestroy = true, - /// Gzips = - /// { - /// new Fastly.Inputs.ServiceVclGzipArgs - /// { - /// ContentTypes = - /// { - /// "text/html", - /// "text/css", - /// }, - /// Extensions = - /// { - /// "css", - /// "js", - /// }, - /// Name = "file extensions and content types", - /// }, - /// }, - /// Headers = - /// { - /// new Fastly.Inputs.ServiceVclHeaderArgs - /// { - /// Action = "delete", - /// Destination = "http.x-amz-request-id", - /// Name = "remove x-amz-request-id", - /// Type = "cache", - /// }, - /// }, - /// }); - /// var website = new Aws.S3.Bucket("website", new Aws.S3.BucketArgs - /// { - /// Acl = "public-read", - /// Website = new Aws.S3.Inputs.BucketWebsiteArgs - /// { - /// ErrorDocument = "error.html", - /// IndexDocument = "index.html", - /// }, - /// }); - /// } - /// - /// } - /// ``` - /// - /// Basic usage with [custom - /// VCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/): - /// - /// ```csharp - /// using System.IO; - /// using Pulumi; - /// using Fastly = Pulumi.Fastly; - /// - /// class MyStack : Stack - /// { - /// public MyStack() - /// { - /// var demo = new Fastly.ServiceVcl("demo", new Fastly.ServiceVclArgs - /// { - /// Backends = - /// { - /// new Fastly.Inputs.ServiceVclBackendArgs - /// { - /// Address = "127.0.0.1", - /// Name = "localhost", - /// Port = 80, - /// }, - /// }, - /// Domains = - /// { - /// new Fastly.Inputs.ServiceVclDomainArgs - /// { - /// Comment = "demo", - /// Name = "demo.notexample.com", - /// }, - /// }, - /// ForceDestroy = true, - /// Vcls = - /// { - /// new Fastly.Inputs.ServiceVclVclArgs - /// { - /// Content = File.ReadAllText($"{path.Module}/my_custom_main.vcl"), - /// Main = true, - /// Name = "my_custom_main_vcl", - /// }, - /// new Fastly.Inputs.ServiceVclVclArgs - /// { - /// Content = File.ReadAllText($"{path.Module}/my_custom_library.vcl"), - /// Name = "my_custom_library_vcl", - /// }, - /// }, - /// }); - /// } - /// - /// } - /// ``` - /// - /// Basic usage with [custom Director](https://developer.fastly.com/reference/api/load-balancing/directors/director/): - /// - /// ```csharp - /// using Pulumi; - /// using Fastly = Pulumi.Fastly; - /// - /// class MyStack : Stack - /// { - /// public MyStack() - /// { - /// var demo = new Fastly.ServiceVcl("demo", new Fastly.ServiceVclArgs - /// { - /// Backends = - /// { - /// new Fastly.Inputs.ServiceVclBackendArgs - /// { - /// Address = "127.0.0.1", - /// Name = "origin1", - /// Port = 80, - /// }, - /// new Fastly.Inputs.ServiceVclBackendArgs - /// { - /// Address = "127.0.0.2", - /// Name = "origin2", - /// Port = 80, - /// }, - /// }, - /// Directors = - /// { - /// new Fastly.Inputs.ServiceVclDirectorArgs - /// { - /// Backends = - /// { - /// "origin1", - /// "origin2", - /// }, - /// Name = "mydirector", - /// Quorum = 0, - /// Type = 3, - /// }, - /// }, - /// Domains = - /// { - /// new Fastly.Inputs.ServiceVclDomainArgs - /// { - /// Comment = "demo", - /// Name = "demo.notexample.com", - /// }, - /// }, - /// ForceDestroy = true, - /// }); - /// } - /// - /// } - /// ``` - /// - /// Basic usage with [Web Application Firewall](https://developer.fastly.com/reference/api/waf/): - /// - /// ```csharp - /// using Pulumi; - /// using Fastly = Pulumi.Fastly; - /// - /// class MyStack : Stack - /// { - /// public MyStack() - /// { - /// var demo = new Fastly.ServiceVcl("demo", new Fastly.ServiceVclArgs - /// { - /// Backends = - /// { - /// new Fastly.Inputs.ServiceVclBackendArgs - /// { - /// Address = "127.0.0.1", - /// Name = "origin1", - /// Port = 80, - /// }, - /// }, - /// Conditions = - /// { - /// new Fastly.Inputs.ServiceVclConditionArgs - /// { - /// Name = "WAF_Prefetch", - /// Statement = "req.backend.is_origin", - /// Type = "PREFETCH", - /// }, - /// new Fastly.Inputs.ServiceVclConditionArgs - /// { - /// Name = "WAF_always_false", - /// Statement = "false", - /// Type = "REQUEST", - /// }, - /// }, - /// Domains = - /// { - /// new Fastly.Inputs.ServiceVclDomainArgs - /// { - /// Comment = "demo", - /// Name = "example.com", - /// }, - /// }, - /// ForceDestroy = true, - /// ResponseObjects = - /// { - /// new Fastly.Inputs.ServiceVclResponseObjectArgs - /// { - /// Content = "<html><body>Forbidden</body></html>", - /// ContentType = "text/html", - /// Name = "WAF_Response", - /// RequestCondition = "WAF_always_false", - /// Response = "Forbidden", - /// Status = 403, - /// }, - /// }, - /// Waf = new Fastly.Inputs.ServiceVclWafArgs - /// { - /// PrefetchCondition = "WAF_Prefetch", - /// ResponseObject = "WAF_Response", - /// }, - /// }); - /// } - /// - /// } - /// ``` - /// - /// > **Note:** For an AWS S3 Bucket, the Backend address is - /// `<domain>.s3-website-<region>.amazonaws.com`. The `override_host` attribute - /// should be set to `<bucket_name>.s3-website-<region>.amazonaws.com` in the `backend` block. See the - /// Fastly documentation on [Amazon S3][fastly-s3]. - /// - /// [fastly-s3]: https://docs.fastly.com/en/guides/amazon-s3 - /// [fastly-cname]: https://docs.fastly.com/en/guides/adding-cname-records - /// [fastly-conditionals]: https://docs.fastly.com/en/guides/using-conditions - /// [fastly-sumologic]: https://developer.fastly.com/reference/api/logging/sumologic/ - /// [fastly-gcs]: https://developer.fastly.com/reference/api/logging/gcs/ - /// /// ## Import /// /// Fastly Services can be imported using their service ID, e.g. diff --git a/sdk/dotnet/go.mod b/sdk/dotnet/go.mod new file mode 100644 index 00000000..522baad6 --- /dev/null +++ b/sdk/dotnet/go.mod @@ -0,0 +1,3 @@ +module fake_dotnet_module // Exclude this directory from Go tools + +go 1.16 diff --git a/sdk/go/fastly/config/config.go b/sdk/go/fastly/config/config.go index 0ceee87e..b8f0d5bd 100644 --- a/sdk/go/fastly/config/config.go +++ b/sdk/go/fastly/config/config.go @@ -25,7 +25,8 @@ func GetForceHttp2(ctx *pulumi.Context) bool { return config.GetBool(ctx, "fastly:forceHttp2") } -// Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` +// Set to `true` if your configuration only consumes data sources that do not require authentication, such as +// `fastly_ip_ranges` func GetNoAuth(ctx *pulumi.Context) bool { return config.GetBool(ctx, "fastly:noAuth") } diff --git a/sdk/go/fastly/getFastlyIpRanges.go b/sdk/go/fastly/getFastlyIpRanges.go index 883f2d31..f410326b 100644 --- a/sdk/go/fastly/getFastlyIpRanges.go +++ b/sdk/go/fastly/getFastlyIpRanges.go @@ -15,8 +15,8 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-aws/sdk/v4/go/aws/ec2" -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ec2" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getServices.go b/sdk/go/fastly/getServices.go new file mode 100644 index 00000000..0ca95661 --- /dev/null +++ b/sdk/go/fastly/getServices.go @@ -0,0 +1,28 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package fastly + +import ( + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Use this data source to get the list of the [Fastly services](https://developer.fastly.com/reference/api/services/service/). +func GetServices(ctx *pulumi.Context, opts ...pulumi.InvokeOption) (*GetServicesResult, error) { + var rv GetServicesResult + err := ctx.Invoke("fastly:index/getServices:getServices", nil, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of values returned by getServices. +type GetServicesResult struct { + // A detailed list of Fastly services in your account. This is limited to the services the API token can read. + Details []GetServicesDetail `pulumi:"details"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + // A list of service IDs in your account. This is limited to the services the API token can read. + Ids []string `pulumi:"ids"` +} diff --git a/sdk/go/fastly/getTlsActivation.go b/sdk/go/fastly/getTlsActivation.go index ff6aeacf..f9b9fc7c 100644 --- a/sdk/go/fastly/getTlsActivation.go +++ b/sdk/go/fastly/getTlsActivation.go @@ -24,7 +24,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsCertificate.go b/sdk/go/fastly/getTlsCertificate.go index 27d1b988..c162f6ba 100644 --- a/sdk/go/fastly/getTlsCertificate.go +++ b/sdk/go/fastly/getTlsCertificate.go @@ -24,7 +24,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsCertificateIds.go b/sdk/go/fastly/getTlsCertificateIds.go index fb4b334d..f44ee255 100644 --- a/sdk/go/fastly/getTlsCertificateIds.go +++ b/sdk/go/fastly/getTlsCertificateIds.go @@ -15,7 +15,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsConfiguration.go b/sdk/go/fastly/getTlsConfiguration.go index be2c390f..787088da 100644 --- a/sdk/go/fastly/getTlsConfiguration.go +++ b/sdk/go/fastly/getTlsConfiguration.go @@ -24,7 +24,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsConfigurationIds.go b/sdk/go/fastly/getTlsConfigurationIds.go index 9bfd7b21..5ca8086a 100644 --- a/sdk/go/fastly/getTlsConfigurationIds.go +++ b/sdk/go/fastly/getTlsConfigurationIds.go @@ -15,7 +15,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsDomain.go b/sdk/go/fastly/getTlsDomain.go index a0ea2f54..af6d02fd 100644 --- a/sdk/go/fastly/getTlsDomain.go +++ b/sdk/go/fastly/getTlsDomain.go @@ -18,7 +18,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsPlatformCertificate.go b/sdk/go/fastly/getTlsPlatformCertificate.go index c26c87a5..dad955bc 100644 --- a/sdk/go/fastly/getTlsPlatformCertificate.go +++ b/sdk/go/fastly/getTlsPlatformCertificate.go @@ -24,7 +24,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsPlatformCertificateIds.go b/sdk/go/fastly/getTlsPlatformCertificateIds.go index 5fbe5ce9..69693e34 100644 --- a/sdk/go/fastly/getTlsPlatformCertificateIds.go +++ b/sdk/go/fastly/getTlsPlatformCertificateIds.go @@ -15,7 +15,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsPrivateKey.go b/sdk/go/fastly/getTlsPrivateKey.go index b41bd422..ea8f29aa 100644 --- a/sdk/go/fastly/getTlsPrivateKey.go +++ b/sdk/go/fastly/getTlsPrivateKey.go @@ -25,7 +25,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsPrivateKeyIds.go b/sdk/go/fastly/getTlsPrivateKeyIds.go index 9bc46c6f..e594ae02 100644 --- a/sdk/go/fastly/getTlsPrivateKeyIds.go +++ b/sdk/go/fastly/getTlsPrivateKeyIds.go @@ -15,7 +15,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/getTlsSubscription.go b/sdk/go/fastly/getTlsSubscription.go index 3c880980..3adc7e79 100644 --- a/sdk/go/fastly/getTlsSubscription.go +++ b/sdk/go/fastly/getTlsSubscription.go @@ -18,7 +18,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/init.go b/sdk/go/fastly/init.go index 23d761b9..6b2de42b 100644 --- a/sdk/go/fastly/init.go +++ b/sdk/go/fastly/init.go @@ -22,6 +22,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi switch typ { case "fastly:index/serviceACLEntries:ServiceACLEntries": r = &ServiceACLEntries{} + case "fastly:index/serviceAuthorization:ServiceAuthorization": + r = &ServiceAuthorization{} case "fastly:index/serviceCompute:ServiceCompute": r = &ServiceCompute{} case "fastly:index/serviceDictionaryItems:ServiceDictionaryItems": @@ -79,6 +81,11 @@ func init() { "index/serviceACLEntries", &module{version}, ) + pulumi.RegisterResourceModule( + "fastly", + "index/serviceAuthorization", + &module{version}, + ) pulumi.RegisterResourceModule( "fastly", "index/serviceCompute", diff --git a/sdk/go/fastly/provider.go b/sdk/go/fastly/provider.go index c4aff701..b05f8f50 100644 --- a/sdk/go/fastly/provider.go +++ b/sdk/go/fastly/provider.go @@ -47,7 +47,8 @@ type providerArgs struct { // `api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS // handshakes. Default: `false` ForceHttp2 *bool `pulumi:"forceHttp2"` - // Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + // Set to `true` if your configuration only consumes data sources that do not require authentication, such as + // `fastly_ip_ranges` NoAuth *bool `pulumi:"noAuth"` } @@ -61,7 +62,8 @@ type ProviderArgs struct { // `api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS // handshakes. Default: `false` ForceHttp2 pulumi.BoolPtrInput - // Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + // Set to `true` if your configuration only consumes data sources that do not require authentication, such as + // `fastly_ip_ranges` NoAuth pulumi.BoolPtrInput } diff --git a/sdk/go/fastly/pulumiTypes.go b/sdk/go/fastly/pulumiTypes.go index 47be98c1..d03f4a14 100644 --- a/sdk/go/fastly/pulumiTypes.go +++ b/sdk/go/fastly/pulumiTypes.go @@ -574,157 +574,6 @@ func (o ServiceComputeDictionaryArrayOutput) Index(i pulumi.IntInput) ServiceCom }).(ServiceComputeDictionaryOutput) } -type ServiceComputeDirector struct { - // Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - Backends []string `pulumi:"backends"` - // An optional comment about the Director - Comment *string `pulumi:"comment"` - // Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - Name string `pulumi:"name"` - // Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - Quorum *int `pulumi:"quorum"` - // How many backends to search if it fails. Default `5` - Retries *int `pulumi:"retries"` - // Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - Shield *string `pulumi:"shield"` - // Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - Type *int `pulumi:"type"` -} - -// ServiceComputeDirectorInput is an input type that accepts ServiceComputeDirectorArgs and ServiceComputeDirectorOutput values. -// You can construct a concrete instance of `ServiceComputeDirectorInput` via: -// -// ServiceComputeDirectorArgs{...} -type ServiceComputeDirectorInput interface { - pulumi.Input - - ToServiceComputeDirectorOutput() ServiceComputeDirectorOutput - ToServiceComputeDirectorOutputWithContext(context.Context) ServiceComputeDirectorOutput -} - -type ServiceComputeDirectorArgs struct { - // Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - Backends pulumi.StringArrayInput `pulumi:"backends"` - // An optional comment about the Director - Comment pulumi.StringPtrInput `pulumi:"comment"` - // Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - Name pulumi.StringInput `pulumi:"name"` - // Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - Quorum pulumi.IntPtrInput `pulumi:"quorum"` - // How many backends to search if it fails. Default `5` - Retries pulumi.IntPtrInput `pulumi:"retries"` - // Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - Shield pulumi.StringPtrInput `pulumi:"shield"` - // Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - Type pulumi.IntPtrInput `pulumi:"type"` -} - -func (ServiceComputeDirectorArgs) ElementType() reflect.Type { - return reflect.TypeOf((*ServiceComputeDirector)(nil)).Elem() -} - -func (i ServiceComputeDirectorArgs) ToServiceComputeDirectorOutput() ServiceComputeDirectorOutput { - return i.ToServiceComputeDirectorOutputWithContext(context.Background()) -} - -func (i ServiceComputeDirectorArgs) ToServiceComputeDirectorOutputWithContext(ctx context.Context) ServiceComputeDirectorOutput { - return pulumi.ToOutputWithContext(ctx, i).(ServiceComputeDirectorOutput) -} - -// ServiceComputeDirectorArrayInput is an input type that accepts ServiceComputeDirectorArray and ServiceComputeDirectorArrayOutput values. -// You can construct a concrete instance of `ServiceComputeDirectorArrayInput` via: -// -// ServiceComputeDirectorArray{ ServiceComputeDirectorArgs{...} } -type ServiceComputeDirectorArrayInput interface { - pulumi.Input - - ToServiceComputeDirectorArrayOutput() ServiceComputeDirectorArrayOutput - ToServiceComputeDirectorArrayOutputWithContext(context.Context) ServiceComputeDirectorArrayOutput -} - -type ServiceComputeDirectorArray []ServiceComputeDirectorInput - -func (ServiceComputeDirectorArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]ServiceComputeDirector)(nil)).Elem() -} - -func (i ServiceComputeDirectorArray) ToServiceComputeDirectorArrayOutput() ServiceComputeDirectorArrayOutput { - return i.ToServiceComputeDirectorArrayOutputWithContext(context.Background()) -} - -func (i ServiceComputeDirectorArray) ToServiceComputeDirectorArrayOutputWithContext(ctx context.Context) ServiceComputeDirectorArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(ServiceComputeDirectorArrayOutput) -} - -type ServiceComputeDirectorOutput struct{ *pulumi.OutputState } - -func (ServiceComputeDirectorOutput) ElementType() reflect.Type { - return reflect.TypeOf((*ServiceComputeDirector)(nil)).Elem() -} - -func (o ServiceComputeDirectorOutput) ToServiceComputeDirectorOutput() ServiceComputeDirectorOutput { - return o -} - -func (o ServiceComputeDirectorOutput) ToServiceComputeDirectorOutputWithContext(ctx context.Context) ServiceComputeDirectorOutput { - return o -} - -// Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` -func (o ServiceComputeDirectorOutput) Backends() pulumi.StringArrayOutput { - return o.ApplyT(func(v ServiceComputeDirector) []string { return v.Backends }).(pulumi.StringArrayOutput) -} - -// An optional comment about the Director -func (o ServiceComputeDirectorOutput) Comment() pulumi.StringPtrOutput { - return o.ApplyT(func(v ServiceComputeDirector) *string { return v.Comment }).(pulumi.StringPtrOutput) -} - -// Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource -func (o ServiceComputeDirectorOutput) Name() pulumi.StringOutput { - return o.ApplyT(func(v ServiceComputeDirector) string { return v.Name }).(pulumi.StringOutput) -} - -// Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` -func (o ServiceComputeDirectorOutput) Quorum() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeDirector) *int { return v.Quorum }).(pulumi.IntPtrOutput) -} - -// How many backends to search if it fails. Default `5` -func (o ServiceComputeDirectorOutput) Retries() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeDirector) *int { return v.Retries }).(pulumi.IntPtrOutput) -} - -// Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response -func (o ServiceComputeDirectorOutput) Shield() pulumi.StringPtrOutput { - return o.ApplyT(func(v ServiceComputeDirector) *string { return v.Shield }).(pulumi.StringPtrOutput) -} - -// Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` -func (o ServiceComputeDirectorOutput) Type() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeDirector) *int { return v.Type }).(pulumi.IntPtrOutput) -} - -type ServiceComputeDirectorArrayOutput struct{ *pulumi.OutputState } - -func (ServiceComputeDirectorArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]ServiceComputeDirector)(nil)).Elem() -} - -func (o ServiceComputeDirectorArrayOutput) ToServiceComputeDirectorArrayOutput() ServiceComputeDirectorArrayOutput { - return o -} - -func (o ServiceComputeDirectorArrayOutput) ToServiceComputeDirectorArrayOutputWithContext(ctx context.Context) ServiceComputeDirectorArrayOutput { - return o -} - -func (o ServiceComputeDirectorArrayOutput) Index(i pulumi.IntInput) ServiceComputeDirectorOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) ServiceComputeDirector { - return vs[0].([]ServiceComputeDirector)[vs[1].(int)] - }).(ServiceComputeDirectorOutput) -} - type ServiceComputeDomain struct { // An optional comment about the Domain. Comment *string `pulumi:"comment"` @@ -831,193 +680,6 @@ func (o ServiceComputeDomainArrayOutput) Index(i pulumi.IntInput) ServiceCompute }).(ServiceComputeDomainOutput) } -type ServiceComputeHealthcheck struct { - // How often to run the Healthcheck in milliseconds. Default `5000` - CheckInterval *int `pulumi:"checkInterval"` - // The status code expected from the host. Default `200` - ExpectedResponse *int `pulumi:"expectedResponse"` - // The Host header to send for this Healthcheck - Host string `pulumi:"host"` - // Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - HttpVersion *string `pulumi:"httpVersion"` - // When loading a config, the initial number of probes to be seen as OK. Default `3` - Initial *int `pulumi:"initial"` - // Which HTTP method to use. Default `HEAD` - Method *string `pulumi:"method"` - // A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - Name string `pulumi:"name"` - // The path to check - Path string `pulumi:"path"` - // How many Healthchecks must succeed to be considered healthy. Default `3` - Threshold *int `pulumi:"threshold"` - // Timeout in milliseconds. Default `500` - Timeout *int `pulumi:"timeout"` - // The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - Window *int `pulumi:"window"` -} - -// ServiceComputeHealthcheckInput is an input type that accepts ServiceComputeHealthcheckArgs and ServiceComputeHealthcheckOutput values. -// You can construct a concrete instance of `ServiceComputeHealthcheckInput` via: -// -// ServiceComputeHealthcheckArgs{...} -type ServiceComputeHealthcheckInput interface { - pulumi.Input - - ToServiceComputeHealthcheckOutput() ServiceComputeHealthcheckOutput - ToServiceComputeHealthcheckOutputWithContext(context.Context) ServiceComputeHealthcheckOutput -} - -type ServiceComputeHealthcheckArgs struct { - // How often to run the Healthcheck in milliseconds. Default `5000` - CheckInterval pulumi.IntPtrInput `pulumi:"checkInterval"` - // The status code expected from the host. Default `200` - ExpectedResponse pulumi.IntPtrInput `pulumi:"expectedResponse"` - // The Host header to send for this Healthcheck - Host pulumi.StringInput `pulumi:"host"` - // Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - HttpVersion pulumi.StringPtrInput `pulumi:"httpVersion"` - // When loading a config, the initial number of probes to be seen as OK. Default `3` - Initial pulumi.IntPtrInput `pulumi:"initial"` - // Which HTTP method to use. Default `HEAD` - Method pulumi.StringPtrInput `pulumi:"method"` - // A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - Name pulumi.StringInput `pulumi:"name"` - // The path to check - Path pulumi.StringInput `pulumi:"path"` - // How many Healthchecks must succeed to be considered healthy. Default `3` - Threshold pulumi.IntPtrInput `pulumi:"threshold"` - // Timeout in milliseconds. Default `500` - Timeout pulumi.IntPtrInput `pulumi:"timeout"` - // The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - Window pulumi.IntPtrInput `pulumi:"window"` -} - -func (ServiceComputeHealthcheckArgs) ElementType() reflect.Type { - return reflect.TypeOf((*ServiceComputeHealthcheck)(nil)).Elem() -} - -func (i ServiceComputeHealthcheckArgs) ToServiceComputeHealthcheckOutput() ServiceComputeHealthcheckOutput { - return i.ToServiceComputeHealthcheckOutputWithContext(context.Background()) -} - -func (i ServiceComputeHealthcheckArgs) ToServiceComputeHealthcheckOutputWithContext(ctx context.Context) ServiceComputeHealthcheckOutput { - return pulumi.ToOutputWithContext(ctx, i).(ServiceComputeHealthcheckOutput) -} - -// ServiceComputeHealthcheckArrayInput is an input type that accepts ServiceComputeHealthcheckArray and ServiceComputeHealthcheckArrayOutput values. -// You can construct a concrete instance of `ServiceComputeHealthcheckArrayInput` via: -// -// ServiceComputeHealthcheckArray{ ServiceComputeHealthcheckArgs{...} } -type ServiceComputeHealthcheckArrayInput interface { - pulumi.Input - - ToServiceComputeHealthcheckArrayOutput() ServiceComputeHealthcheckArrayOutput - ToServiceComputeHealthcheckArrayOutputWithContext(context.Context) ServiceComputeHealthcheckArrayOutput -} - -type ServiceComputeHealthcheckArray []ServiceComputeHealthcheckInput - -func (ServiceComputeHealthcheckArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]ServiceComputeHealthcheck)(nil)).Elem() -} - -func (i ServiceComputeHealthcheckArray) ToServiceComputeHealthcheckArrayOutput() ServiceComputeHealthcheckArrayOutput { - return i.ToServiceComputeHealthcheckArrayOutputWithContext(context.Background()) -} - -func (i ServiceComputeHealthcheckArray) ToServiceComputeHealthcheckArrayOutputWithContext(ctx context.Context) ServiceComputeHealthcheckArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(ServiceComputeHealthcheckArrayOutput) -} - -type ServiceComputeHealthcheckOutput struct{ *pulumi.OutputState } - -func (ServiceComputeHealthcheckOutput) ElementType() reflect.Type { - return reflect.TypeOf((*ServiceComputeHealthcheck)(nil)).Elem() -} - -func (o ServiceComputeHealthcheckOutput) ToServiceComputeHealthcheckOutput() ServiceComputeHealthcheckOutput { - return o -} - -func (o ServiceComputeHealthcheckOutput) ToServiceComputeHealthcheckOutputWithContext(ctx context.Context) ServiceComputeHealthcheckOutput { - return o -} - -// How often to run the Healthcheck in milliseconds. Default `5000` -func (o ServiceComputeHealthcheckOutput) CheckInterval() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *int { return v.CheckInterval }).(pulumi.IntPtrOutput) -} - -// The status code expected from the host. Default `200` -func (o ServiceComputeHealthcheckOutput) ExpectedResponse() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *int { return v.ExpectedResponse }).(pulumi.IntPtrOutput) -} - -// The Host header to send for this Healthcheck -func (o ServiceComputeHealthcheckOutput) Host() pulumi.StringOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) string { return v.Host }).(pulumi.StringOutput) -} - -// Whether to use version 1.0 or 1.1 HTTP. Default `1.1` -func (o ServiceComputeHealthcheckOutput) HttpVersion() pulumi.StringPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *string { return v.HttpVersion }).(pulumi.StringPtrOutput) -} - -// When loading a config, the initial number of probes to be seen as OK. Default `3` -func (o ServiceComputeHealthcheckOutput) Initial() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *int { return v.Initial }).(pulumi.IntPtrOutput) -} - -// Which HTTP method to use. Default `HEAD` -func (o ServiceComputeHealthcheckOutput) Method() pulumi.StringPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *string { return v.Method }).(pulumi.StringPtrOutput) -} - -// A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource -func (o ServiceComputeHealthcheckOutput) Name() pulumi.StringOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) string { return v.Name }).(pulumi.StringOutput) -} - -// The path to check -func (o ServiceComputeHealthcheckOutput) Path() pulumi.StringOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) string { return v.Path }).(pulumi.StringOutput) -} - -// How many Healthchecks must succeed to be considered healthy. Default `3` -func (o ServiceComputeHealthcheckOutput) Threshold() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *int { return v.Threshold }).(pulumi.IntPtrOutput) -} - -// Timeout in milliseconds. Default `500` -func (o ServiceComputeHealthcheckOutput) Timeout() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *int { return v.Timeout }).(pulumi.IntPtrOutput) -} - -// The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` -func (o ServiceComputeHealthcheckOutput) Window() pulumi.IntPtrOutput { - return o.ApplyT(func(v ServiceComputeHealthcheck) *int { return v.Window }).(pulumi.IntPtrOutput) -} - -type ServiceComputeHealthcheckArrayOutput struct{ *pulumi.OutputState } - -func (ServiceComputeHealthcheckArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]ServiceComputeHealthcheck)(nil)).Elem() -} - -func (o ServiceComputeHealthcheckArrayOutput) ToServiceComputeHealthcheckArrayOutput() ServiceComputeHealthcheckArrayOutput { - return o -} - -func (o ServiceComputeHealthcheckArrayOutput) ToServiceComputeHealthcheckArrayOutputWithContext(ctx context.Context) ServiceComputeHealthcheckArrayOutput { - return o -} - -func (o ServiceComputeHealthcheckArrayOutput) Index(i pulumi.IntInput) ServiceComputeHealthcheckOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) ServiceComputeHealthcheck { - return vs[0].([]ServiceComputeHealthcheck)[vs[1].(int)] - }).(ServiceComputeHealthcheckOutput) -} - type ServiceComputeLoggingBigquery struct { // The ID of your BigQuery dataset Dataset string `pulumi:"dataset"` @@ -13493,6 +13155,145 @@ func (o GetDatacentersPopArrayOutput) Index(i pulumi.IntInput) GetDatacentersPop }).(GetDatacentersPopOutput) } +type GetServicesDetail struct { + Comment string `pulumi:"comment"` + CreatedAt string `pulumi:"createdAt"` + CustomerId string `pulumi:"customerId"` + // The ID of this resource. + Id string `pulumi:"id"` + Name string `pulumi:"name"` + Type string `pulumi:"type"` + UpdatedAt string `pulumi:"updatedAt"` + Version int `pulumi:"version"` +} + +// GetServicesDetailInput is an input type that accepts GetServicesDetailArgs and GetServicesDetailOutput values. +// You can construct a concrete instance of `GetServicesDetailInput` via: +// +// GetServicesDetailArgs{...} +type GetServicesDetailInput interface { + pulumi.Input + + ToGetServicesDetailOutput() GetServicesDetailOutput + ToGetServicesDetailOutputWithContext(context.Context) GetServicesDetailOutput +} + +type GetServicesDetailArgs struct { + Comment pulumi.StringInput `pulumi:"comment"` + CreatedAt pulumi.StringInput `pulumi:"createdAt"` + CustomerId pulumi.StringInput `pulumi:"customerId"` + // The ID of this resource. + Id pulumi.StringInput `pulumi:"id"` + Name pulumi.StringInput `pulumi:"name"` + Type pulumi.StringInput `pulumi:"type"` + UpdatedAt pulumi.StringInput `pulumi:"updatedAt"` + Version pulumi.IntInput `pulumi:"version"` +} + +func (GetServicesDetailArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetServicesDetail)(nil)).Elem() +} + +func (i GetServicesDetailArgs) ToGetServicesDetailOutput() GetServicesDetailOutput { + return i.ToGetServicesDetailOutputWithContext(context.Background()) +} + +func (i GetServicesDetailArgs) ToGetServicesDetailOutputWithContext(ctx context.Context) GetServicesDetailOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetServicesDetailOutput) +} + +// GetServicesDetailArrayInput is an input type that accepts GetServicesDetailArray and GetServicesDetailArrayOutput values. +// You can construct a concrete instance of `GetServicesDetailArrayInput` via: +// +// GetServicesDetailArray{ GetServicesDetailArgs{...} } +type GetServicesDetailArrayInput interface { + pulumi.Input + + ToGetServicesDetailArrayOutput() GetServicesDetailArrayOutput + ToGetServicesDetailArrayOutputWithContext(context.Context) GetServicesDetailArrayOutput +} + +type GetServicesDetailArray []GetServicesDetailInput + +func (GetServicesDetailArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetServicesDetail)(nil)).Elem() +} + +func (i GetServicesDetailArray) ToGetServicesDetailArrayOutput() GetServicesDetailArrayOutput { + return i.ToGetServicesDetailArrayOutputWithContext(context.Background()) +} + +func (i GetServicesDetailArray) ToGetServicesDetailArrayOutputWithContext(ctx context.Context) GetServicesDetailArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetServicesDetailArrayOutput) +} + +type GetServicesDetailOutput struct{ *pulumi.OutputState } + +func (GetServicesDetailOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetServicesDetail)(nil)).Elem() +} + +func (o GetServicesDetailOutput) ToGetServicesDetailOutput() GetServicesDetailOutput { + return o +} + +func (o GetServicesDetailOutput) ToGetServicesDetailOutputWithContext(ctx context.Context) GetServicesDetailOutput { + return o +} + +func (o GetServicesDetailOutput) Comment() pulumi.StringOutput { + return o.ApplyT(func(v GetServicesDetail) string { return v.Comment }).(pulumi.StringOutput) +} + +func (o GetServicesDetailOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v GetServicesDetail) string { return v.CreatedAt }).(pulumi.StringOutput) +} + +func (o GetServicesDetailOutput) CustomerId() pulumi.StringOutput { + return o.ApplyT(func(v GetServicesDetail) string { return v.CustomerId }).(pulumi.StringOutput) +} + +// The ID of this resource. +func (o GetServicesDetailOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetServicesDetail) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetServicesDetailOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetServicesDetail) string { return v.Name }).(pulumi.StringOutput) +} + +func (o GetServicesDetailOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetServicesDetail) string { return v.Type }).(pulumi.StringOutput) +} + +func (o GetServicesDetailOutput) UpdatedAt() pulumi.StringOutput { + return o.ApplyT(func(v GetServicesDetail) string { return v.UpdatedAt }).(pulumi.StringOutput) +} + +func (o GetServicesDetailOutput) Version() pulumi.IntOutput { + return o.ApplyT(func(v GetServicesDetail) int { return v.Version }).(pulumi.IntOutput) +} + +type GetServicesDetailArrayOutput struct{ *pulumi.OutputState } + +func (GetServicesDetailArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetServicesDetail)(nil)).Elem() +} + +func (o GetServicesDetailArrayOutput) ToGetServicesDetailArrayOutput() GetServicesDetailArrayOutput { + return o +} + +func (o GetServicesDetailArrayOutput) ToGetServicesDetailArrayOutputWithContext(ctx context.Context) GetServicesDetailArrayOutput { + return o +} + +func (o GetServicesDetailArrayOutput) Index(i pulumi.IntInput) GetServicesDetailOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetServicesDetail { + return vs[0].([]GetServicesDetail)[vs[1].(int)] + }).(GetServicesDetailOutput) +} + type GetTlsConfigurationDnsRecord struct { RecordType string `pulumi:"recordType"` RecordValue string `pulumi:"recordValue"` @@ -13721,12 +13522,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeBackendArrayInput)(nil)).Elem(), ServiceComputeBackendArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeDictionaryInput)(nil)).Elem(), ServiceComputeDictionaryArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeDictionaryArrayInput)(nil)).Elem(), ServiceComputeDictionaryArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeDirectorInput)(nil)).Elem(), ServiceComputeDirectorArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeDirectorArrayInput)(nil)).Elem(), ServiceComputeDirectorArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeDomainInput)(nil)).Elem(), ServiceComputeDomainArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeDomainArrayInput)(nil)).Elem(), ServiceComputeDomainArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeHealthcheckInput)(nil)).Elem(), ServiceComputeHealthcheckArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeHealthcheckArrayInput)(nil)).Elem(), ServiceComputeHealthcheckArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeLoggingBigqueryInput)(nil)).Elem(), ServiceComputeLoggingBigqueryArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeLoggingBigqueryArrayInput)(nil)).Elem(), ServiceComputeLoggingBigqueryArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceComputeLoggingBlobstorageInput)(nil)).Elem(), ServiceComputeLoggingBlobstorageArgs{}) @@ -13875,6 +13672,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*TlsSubscriptionManagedHttpChallengeArrayInput)(nil)).Elem(), TlsSubscriptionManagedHttpChallengeArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatacentersPopInput)(nil)).Elem(), GetDatacentersPopArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatacentersPopArrayInput)(nil)).Elem(), GetDatacentersPopArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetServicesDetailInput)(nil)).Elem(), GetServicesDetailArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetServicesDetailArrayInput)(nil)).Elem(), GetServicesDetailArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTlsConfigurationDnsRecordInput)(nil)).Elem(), GetTlsConfigurationDnsRecordArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTlsConfigurationDnsRecordArrayInput)(nil)).Elem(), GetTlsConfigurationDnsRecordArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetWafRulesRuleInput)(nil)).Elem(), GetWafRulesRuleArgs{}) @@ -13885,12 +13684,8 @@ func init() { pulumi.RegisterOutputType(ServiceComputeBackendArrayOutput{}) pulumi.RegisterOutputType(ServiceComputeDictionaryOutput{}) pulumi.RegisterOutputType(ServiceComputeDictionaryArrayOutput{}) - pulumi.RegisterOutputType(ServiceComputeDirectorOutput{}) - pulumi.RegisterOutputType(ServiceComputeDirectorArrayOutput{}) pulumi.RegisterOutputType(ServiceComputeDomainOutput{}) pulumi.RegisterOutputType(ServiceComputeDomainArrayOutput{}) - pulumi.RegisterOutputType(ServiceComputeHealthcheckOutput{}) - pulumi.RegisterOutputType(ServiceComputeHealthcheckArrayOutput{}) pulumi.RegisterOutputType(ServiceComputeLoggingBigqueryOutput{}) pulumi.RegisterOutputType(ServiceComputeLoggingBigqueryArrayOutput{}) pulumi.RegisterOutputType(ServiceComputeLoggingBlobstorageOutput{}) @@ -14039,6 +13834,8 @@ func init() { pulumi.RegisterOutputType(TlsSubscriptionManagedHttpChallengeArrayOutput{}) pulumi.RegisterOutputType(GetDatacentersPopOutput{}) pulumi.RegisterOutputType(GetDatacentersPopArrayOutput{}) + pulumi.RegisterOutputType(GetServicesDetailOutput{}) + pulumi.RegisterOutputType(GetServicesDetailArrayOutput{}) pulumi.RegisterOutputType(GetTlsConfigurationDnsRecordOutput{}) pulumi.RegisterOutputType(GetTlsConfigurationDnsRecordArrayOutput{}) pulumi.RegisterOutputType(GetWafRulesRuleOutput{}) diff --git a/sdk/go/fastly/serviceAuthorization.go b/sdk/go/fastly/serviceAuthorization.go new file mode 100644 index 00000000..cc2b8dbf --- /dev/null +++ b/sdk/go/fastly/serviceAuthorization.go @@ -0,0 +1,283 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package fastly + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Configures authorization with granular permissions to services. Users can be granted rights for services on different levels. +// +// The Service Authorization resource requires a user id, service id and an optional permission. +// +// ## Example Usage +// +// Basic usage: +// +// ```go +// package main +// +// import ( +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// demo, err := fastly.NewServiceVcl(ctx, "demo", nil) +// if err != nil { +// return err +// } +// user, err := fastly.NewUser(ctx, "user", nil) +// if err != nil { +// return err +// } +// _, err = fastly.NewServiceAuthorization(ctx, "auth", &fastly.ServiceAuthorizationArgs{ +// ServiceId: demo.ID(), +// UserId: user.ID(), +// Permission: pulumi.String("purge_all"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// ``` +// +// ## Import +// +// A Fastly Service Authorization can be imported using their user ID, e.g. +// +// ```sh +// $ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx +// ``` +type ServiceAuthorization struct { + pulumi.CustomResourceState + + // The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + Permission pulumi.StringOutput `pulumi:"permission"` + // The ID of the service to grant permissions for. + ServiceId pulumi.StringOutput `pulumi:"serviceId"` + // The ID of the user which will receive the granted permissions. + UserId pulumi.StringOutput `pulumi:"userId"` +} + +// NewServiceAuthorization registers a new resource with the given unique name, arguments, and options. +func NewServiceAuthorization(ctx *pulumi.Context, + name string, args *ServiceAuthorizationArgs, opts ...pulumi.ResourceOption) (*ServiceAuthorization, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Permission == nil { + return nil, errors.New("invalid value for required argument 'Permission'") + } + if args.ServiceId == nil { + return nil, errors.New("invalid value for required argument 'ServiceId'") + } + if args.UserId == nil { + return nil, errors.New("invalid value for required argument 'UserId'") + } + var resource ServiceAuthorization + err := ctx.RegisterResource("fastly:index/serviceAuthorization:ServiceAuthorization", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetServiceAuthorization gets an existing ServiceAuthorization resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetServiceAuthorization(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ServiceAuthorizationState, opts ...pulumi.ResourceOption) (*ServiceAuthorization, error) { + var resource ServiceAuthorization + err := ctx.ReadResource("fastly:index/serviceAuthorization:ServiceAuthorization", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ServiceAuthorization resources. +type serviceAuthorizationState struct { + // The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + Permission *string `pulumi:"permission"` + // The ID of the service to grant permissions for. + ServiceId *string `pulumi:"serviceId"` + // The ID of the user which will receive the granted permissions. + UserId *string `pulumi:"userId"` +} + +type ServiceAuthorizationState struct { + // The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + Permission pulumi.StringPtrInput + // The ID of the service to grant permissions for. + ServiceId pulumi.StringPtrInput + // The ID of the user which will receive the granted permissions. + UserId pulumi.StringPtrInput +} + +func (ServiceAuthorizationState) ElementType() reflect.Type { + return reflect.TypeOf((*serviceAuthorizationState)(nil)).Elem() +} + +type serviceAuthorizationArgs struct { + // The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + Permission string `pulumi:"permission"` + // The ID of the service to grant permissions for. + ServiceId string `pulumi:"serviceId"` + // The ID of the user which will receive the granted permissions. + UserId string `pulumi:"userId"` +} + +// The set of arguments for constructing a ServiceAuthorization resource. +type ServiceAuthorizationArgs struct { + // The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + Permission pulumi.StringInput + // The ID of the service to grant permissions for. + ServiceId pulumi.StringInput + // The ID of the user which will receive the granted permissions. + UserId pulumi.StringInput +} + +func (ServiceAuthorizationArgs) ElementType() reflect.Type { + return reflect.TypeOf((*serviceAuthorizationArgs)(nil)).Elem() +} + +type ServiceAuthorizationInput interface { + pulumi.Input + + ToServiceAuthorizationOutput() ServiceAuthorizationOutput + ToServiceAuthorizationOutputWithContext(ctx context.Context) ServiceAuthorizationOutput +} + +func (*ServiceAuthorization) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceAuthorization)(nil)).Elem() +} + +func (i *ServiceAuthorization) ToServiceAuthorizationOutput() ServiceAuthorizationOutput { + return i.ToServiceAuthorizationOutputWithContext(context.Background()) +} + +func (i *ServiceAuthorization) ToServiceAuthorizationOutputWithContext(ctx context.Context) ServiceAuthorizationOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceAuthorizationOutput) +} + +// ServiceAuthorizationArrayInput is an input type that accepts ServiceAuthorizationArray and ServiceAuthorizationArrayOutput values. +// You can construct a concrete instance of `ServiceAuthorizationArrayInput` via: +// +// ServiceAuthorizationArray{ ServiceAuthorizationArgs{...} } +type ServiceAuthorizationArrayInput interface { + pulumi.Input + + ToServiceAuthorizationArrayOutput() ServiceAuthorizationArrayOutput + ToServiceAuthorizationArrayOutputWithContext(context.Context) ServiceAuthorizationArrayOutput +} + +type ServiceAuthorizationArray []ServiceAuthorizationInput + +func (ServiceAuthorizationArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ServiceAuthorization)(nil)).Elem() +} + +func (i ServiceAuthorizationArray) ToServiceAuthorizationArrayOutput() ServiceAuthorizationArrayOutput { + return i.ToServiceAuthorizationArrayOutputWithContext(context.Background()) +} + +func (i ServiceAuthorizationArray) ToServiceAuthorizationArrayOutputWithContext(ctx context.Context) ServiceAuthorizationArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceAuthorizationArrayOutput) +} + +// ServiceAuthorizationMapInput is an input type that accepts ServiceAuthorizationMap and ServiceAuthorizationMapOutput values. +// You can construct a concrete instance of `ServiceAuthorizationMapInput` via: +// +// ServiceAuthorizationMap{ "key": ServiceAuthorizationArgs{...} } +type ServiceAuthorizationMapInput interface { + pulumi.Input + + ToServiceAuthorizationMapOutput() ServiceAuthorizationMapOutput + ToServiceAuthorizationMapOutputWithContext(context.Context) ServiceAuthorizationMapOutput +} + +type ServiceAuthorizationMap map[string]ServiceAuthorizationInput + +func (ServiceAuthorizationMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ServiceAuthorization)(nil)).Elem() +} + +func (i ServiceAuthorizationMap) ToServiceAuthorizationMapOutput() ServiceAuthorizationMapOutput { + return i.ToServiceAuthorizationMapOutputWithContext(context.Background()) +} + +func (i ServiceAuthorizationMap) ToServiceAuthorizationMapOutputWithContext(ctx context.Context) ServiceAuthorizationMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceAuthorizationMapOutput) +} + +type ServiceAuthorizationOutput struct{ *pulumi.OutputState } + +func (ServiceAuthorizationOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceAuthorization)(nil)).Elem() +} + +func (o ServiceAuthorizationOutput) ToServiceAuthorizationOutput() ServiceAuthorizationOutput { + return o +} + +func (o ServiceAuthorizationOutput) ToServiceAuthorizationOutputWithContext(ctx context.Context) ServiceAuthorizationOutput { + return o +} + +type ServiceAuthorizationArrayOutput struct{ *pulumi.OutputState } + +func (ServiceAuthorizationArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ServiceAuthorization)(nil)).Elem() +} + +func (o ServiceAuthorizationArrayOutput) ToServiceAuthorizationArrayOutput() ServiceAuthorizationArrayOutput { + return o +} + +func (o ServiceAuthorizationArrayOutput) ToServiceAuthorizationArrayOutputWithContext(ctx context.Context) ServiceAuthorizationArrayOutput { + return o +} + +func (o ServiceAuthorizationArrayOutput) Index(i pulumi.IntInput) ServiceAuthorizationOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ServiceAuthorization { + return vs[0].([]*ServiceAuthorization)[vs[1].(int)] + }).(ServiceAuthorizationOutput) +} + +type ServiceAuthorizationMapOutput struct{ *pulumi.OutputState } + +func (ServiceAuthorizationMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ServiceAuthorization)(nil)).Elem() +} + +func (o ServiceAuthorizationMapOutput) ToServiceAuthorizationMapOutput() ServiceAuthorizationMapOutput { + return o +} + +func (o ServiceAuthorizationMapOutput) ToServiceAuthorizationMapOutputWithContext(ctx context.Context) ServiceAuthorizationMapOutput { + return o +} + +func (o ServiceAuthorizationMapOutput) MapIndex(k pulumi.StringInput) ServiceAuthorizationOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ServiceAuthorization { + return vs[0].(map[string]*ServiceAuthorization)[vs[1].(string)] + }).(ServiceAuthorizationOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ServiceAuthorizationInput)(nil)).Elem(), &ServiceAuthorization{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceAuthorizationArrayInput)(nil)).Elem(), ServiceAuthorizationArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceAuthorizationMapInput)(nil)).Elem(), ServiceAuthorizationMap{}) + pulumi.RegisterOutputType(ServiceAuthorizationOutput{}) + pulumi.RegisterOutputType(ServiceAuthorizationArrayOutput{}) + pulumi.RegisterOutputType(ServiceAuthorizationMapOutput{}) +} diff --git a/sdk/go/fastly/serviceCompute.go b/sdk/go/fastly/serviceCompute.go index b0f5375d..13c4bc26 100644 --- a/sdk/go/fastly/serviceCompute.go +++ b/sdk/go/fastly/serviceCompute.go @@ -35,18 +35,12 @@ type ServiceCompute struct { // The latest cloned version by the provider ClonedVersion pulumi.IntOutput `pulumi:"clonedVersion"` // Description field for the service. Default `Managed by Terraform` - Comment pulumi.StringPtrOutput `pulumi:"comment"` - // The default hostname - DefaultHost pulumi.StringPtrOutput `pulumi:"defaultHost"` - // The default Time-to-live (TTL) for requests - DefaultTtl pulumi.IntPtrOutput `pulumi:"defaultTtl"` + Comment pulumi.StringPtrOutput `pulumi:"comment"` Dictionaries ServiceComputeDictionaryArrayOutput `pulumi:"dictionaries"` - Directors ServiceComputeDirectorArrayOutput `pulumi:"directors"` // A set of Domain names to serve as entry points for your Service Domains ServiceComputeDomainArrayOutput `pulumi:"domains"` // Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` ForceDestroy pulumi.BoolPtrOutput `pulumi:"forceDestroy"` - Healthchecks ServiceComputeHealthcheckArrayOutput `pulumi:"healthchecks"` LoggingBigqueries ServiceComputeLoggingBigqueryArrayOutput `pulumi:"loggingBigqueries"` LoggingBlobstorages ServiceComputeLoggingBlobstorageArrayOutput `pulumi:"loggingBlobstorages"` LoggingCloudfiles ServiceComputeLoggingCloudfileArrayOutput `pulumi:"loggingCloudfiles"` @@ -77,10 +71,6 @@ type ServiceCompute struct { Name pulumi.StringOutput `pulumi:"name"` // The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) Package ServiceComputePackageOutput `pulumi:"package"` - // Enables serving a stale object if there is an error - StaleIfError pulumi.BoolPtrOutput `pulumi:"staleIfError"` - // The default time-to-live (TTL) for serving the stale object for the version - StaleIfErrorTtl pulumi.IntPtrOutput `pulumi:"staleIfErrorTtl"` // Description field for the version VersionComment pulumi.StringPtrOutput `pulumi:"versionComment"` } @@ -128,18 +118,12 @@ type serviceComputeState struct { // The latest cloned version by the provider ClonedVersion *int `pulumi:"clonedVersion"` // Description field for the service. Default `Managed by Terraform` - Comment *string `pulumi:"comment"` - // The default hostname - DefaultHost *string `pulumi:"defaultHost"` - // The default Time-to-live (TTL) for requests - DefaultTtl *int `pulumi:"defaultTtl"` + Comment *string `pulumi:"comment"` Dictionaries []ServiceComputeDictionary `pulumi:"dictionaries"` - Directors []ServiceComputeDirector `pulumi:"directors"` // A set of Domain names to serve as entry points for your Service Domains []ServiceComputeDomain `pulumi:"domains"` // Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` ForceDestroy *bool `pulumi:"forceDestroy"` - Healthchecks []ServiceComputeHealthcheck `pulumi:"healthchecks"` LoggingBigqueries []ServiceComputeLoggingBigquery `pulumi:"loggingBigqueries"` LoggingBlobstorages []ServiceComputeLoggingBlobstorage `pulumi:"loggingBlobstorages"` LoggingCloudfiles []ServiceComputeLoggingCloudfile `pulumi:"loggingCloudfiles"` @@ -170,10 +154,6 @@ type serviceComputeState struct { Name *string `pulumi:"name"` // The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) Package *ServiceComputePackage `pulumi:"package"` - // Enables serving a stale object if there is an error - StaleIfError *bool `pulumi:"staleIfError"` - // The default time-to-live (TTL) for serving the stale object for the version - StaleIfErrorTtl *int `pulumi:"staleIfErrorTtl"` // Description field for the version VersionComment *string `pulumi:"versionComment"` } @@ -187,18 +167,12 @@ type ServiceComputeState struct { // The latest cloned version by the provider ClonedVersion pulumi.IntPtrInput // Description field for the service. Default `Managed by Terraform` - Comment pulumi.StringPtrInput - // The default hostname - DefaultHost pulumi.StringPtrInput - // The default Time-to-live (TTL) for requests - DefaultTtl pulumi.IntPtrInput + Comment pulumi.StringPtrInput Dictionaries ServiceComputeDictionaryArrayInput - Directors ServiceComputeDirectorArrayInput // A set of Domain names to serve as entry points for your Service Domains ServiceComputeDomainArrayInput // Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` ForceDestroy pulumi.BoolPtrInput - Healthchecks ServiceComputeHealthcheckArrayInput LoggingBigqueries ServiceComputeLoggingBigqueryArrayInput LoggingBlobstorages ServiceComputeLoggingBlobstorageArrayInput LoggingCloudfiles ServiceComputeLoggingCloudfileArrayInput @@ -229,10 +203,6 @@ type ServiceComputeState struct { Name pulumi.StringPtrInput // The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) Package ServiceComputePackagePtrInput - // Enables serving a stale object if there is an error - StaleIfError pulumi.BoolPtrInput - // The default time-to-live (TTL) for serving the stale object for the version - StaleIfErrorTtl pulumi.IntPtrInput // Description field for the version VersionComment pulumi.StringPtrInput } @@ -246,18 +216,12 @@ type serviceComputeArgs struct { Activate *bool `pulumi:"activate"` Backends []ServiceComputeBackend `pulumi:"backends"` // Description field for the service. Default `Managed by Terraform` - Comment *string `pulumi:"comment"` - // The default hostname - DefaultHost *string `pulumi:"defaultHost"` - // The default Time-to-live (TTL) for requests - DefaultTtl *int `pulumi:"defaultTtl"` + Comment *string `pulumi:"comment"` Dictionaries []ServiceComputeDictionary `pulumi:"dictionaries"` - Directors []ServiceComputeDirector `pulumi:"directors"` // A set of Domain names to serve as entry points for your Service Domains []ServiceComputeDomain `pulumi:"domains"` // Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` ForceDestroy *bool `pulumi:"forceDestroy"` - Healthchecks []ServiceComputeHealthcheck `pulumi:"healthchecks"` LoggingBigqueries []ServiceComputeLoggingBigquery `pulumi:"loggingBigqueries"` LoggingBlobstorages []ServiceComputeLoggingBlobstorage `pulumi:"loggingBlobstorages"` LoggingCloudfiles []ServiceComputeLoggingCloudfile `pulumi:"loggingCloudfiles"` @@ -288,10 +252,6 @@ type serviceComputeArgs struct { Name *string `pulumi:"name"` // The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) Package ServiceComputePackage `pulumi:"package"` - // Enables serving a stale object if there is an error - StaleIfError *bool `pulumi:"staleIfError"` - // The default time-to-live (TTL) for serving the stale object for the version - StaleIfErrorTtl *int `pulumi:"staleIfErrorTtl"` // Description field for the version VersionComment *string `pulumi:"versionComment"` } @@ -302,18 +262,12 @@ type ServiceComputeArgs struct { Activate pulumi.BoolPtrInput Backends ServiceComputeBackendArrayInput // Description field for the service. Default `Managed by Terraform` - Comment pulumi.StringPtrInput - // The default hostname - DefaultHost pulumi.StringPtrInput - // The default Time-to-live (TTL) for requests - DefaultTtl pulumi.IntPtrInput + Comment pulumi.StringPtrInput Dictionaries ServiceComputeDictionaryArrayInput - Directors ServiceComputeDirectorArrayInput // A set of Domain names to serve as entry points for your Service Domains ServiceComputeDomainArrayInput // Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` ForceDestroy pulumi.BoolPtrInput - Healthchecks ServiceComputeHealthcheckArrayInput LoggingBigqueries ServiceComputeLoggingBigqueryArrayInput LoggingBlobstorages ServiceComputeLoggingBlobstorageArrayInput LoggingCloudfiles ServiceComputeLoggingCloudfileArrayInput @@ -344,10 +298,6 @@ type ServiceComputeArgs struct { Name pulumi.StringPtrInput // The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) Package ServiceComputePackageInput - // Enables serving a stale object if there is an error - StaleIfError pulumi.BoolPtrInput - // The default time-to-live (TTL) for serving the stale object for the version - StaleIfErrorTtl pulumi.IntPtrInput // Description field for the version VersionComment pulumi.StringPtrInput } diff --git a/sdk/go/fastly/serviceVcl.go b/sdk/go/fastly/serviceVcl.go index 07ee6dc5..2fd9158c 100644 --- a/sdk/go/fastly/serviceVcl.go +++ b/sdk/go/fastly/serviceVcl.go @@ -19,297 +19,6 @@ import ( // traffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname] // on their documentation site for guidance. // -// ## Example Usage -// -// Basic usage: -// -// ```go -// package main -// -// import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := fastly.NewServiceVcl(ctx, "demo", &fastly.ServiceVclArgs{ -// Backends: ServiceVclBackendArray{ -// &ServiceVclBackendArgs{ -// Address: pulumi.String("127.0.0.1"), -// Name: pulumi.String("localhost"), -// Port: pulumi.Int(80), -// }, -// }, -// Domains: ServiceVclDomainArray{ -// &ServiceVclDomainArgs{ -// Comment: pulumi.String("demo"), -// Name: pulumi.String("demo.notexample.com"), -// }, -// }, -// ForceDestroy: pulumi.Bool(true), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// ``` -// -// Basic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header: -// -// ```go -// package main -// -// import ( -// "github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3" -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := fastly.NewServiceVcl(ctx, "demo", &fastly.ServiceVclArgs{ -// Backends: ServiceVclBackendArray{ -// &ServiceVclBackendArgs{ -// Address: pulumi.String("demo.notexample.com.s3-website-us-west-2.amazonaws.com"), -// Name: pulumi.String("AWS S3 hosting"), -// OverrideHost: pulumi.String("demo.notexample.com.s3-website-us-west-2.amazonaws.com"), -// Port: pulumi.Int(80), -// }, -// }, -// Domains: ServiceVclDomainArray{ -// &ServiceVclDomainArgs{ -// Comment: pulumi.String("demo"), -// Name: pulumi.String("demo.notexample.com"), -// }, -// }, -// ForceDestroy: pulumi.Bool(true), -// Gzips: ServiceVclGzipArray{ -// &ServiceVclGzipArgs{ -// ContentTypes: pulumi.StringArray{ -// pulumi.String("text/html"), -// pulumi.String("text/css"), -// }, -// Extensions: pulumi.StringArray{ -// pulumi.String("css"), -// pulumi.String("js"), -// }, -// Name: pulumi.String("file extensions and content types"), -// }, -// }, -// Headers: ServiceVclHeaderArray{ -// &ServiceVclHeaderArgs{ -// Action: pulumi.String("delete"), -// Destination: pulumi.String("http.x-amz-request-id"), -// Name: pulumi.String("remove x-amz-request-id"), -// Type: pulumi.String("cache"), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// _, err = s3.NewBucket(ctx, "website", &s3.BucketArgs{ -// Acl: pulumi.String("public-read"), -// Website: &s3.BucketWebsiteArgs{ -// ErrorDocument: pulumi.String("error.html"), -// IndexDocument: pulumi.String("index.html"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// ``` -// -// Basic usage with [custom -// VCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/): -// -// ```go -// package main -// -// import ( -// "fmt" -// "io/ioutil" -// -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// ) -// -// func readFileOrPanic(path string) pulumi.StringPtrInput { -// data, err := ioutil.ReadFile(path) -// if err != nil { -// panic(err.Error()) -// } -// return pulumi.String(string(data)) -// } -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := fastly.NewServiceVcl(ctx, "demo", &fastly.ServiceVclArgs{ -// Backends: ServiceVclBackendArray{ -// &ServiceVclBackendArgs{ -// Address: pulumi.String("127.0.0.1"), -// Name: pulumi.String("localhost"), -// Port: pulumi.Int(80), -// }, -// }, -// Domains: ServiceVclDomainArray{ -// &ServiceVclDomainArgs{ -// Comment: pulumi.String("demo"), -// Name: pulumi.String("demo.notexample.com"), -// }, -// }, -// ForceDestroy: pulumi.Bool(true), -// Vcls: ServiceVclVclArray{ -// &ServiceVclVclArgs{ -// Content: readFileOrPanic(fmt.Sprintf("%v%v", path.Module, "/my_custom_main.vcl")), -// Main: pulumi.Bool(true), -// Name: pulumi.String("my_custom_main_vcl"), -// }, -// &ServiceVclVclArgs{ -// Content: readFileOrPanic(fmt.Sprintf("%v%v", path.Module, "/my_custom_library.vcl")), -// Name: pulumi.String("my_custom_library_vcl"), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// ``` -// -// Basic usage with [custom Director](https://developer.fastly.com/reference/api/load-balancing/directors/director/): -// -// ```go -// package main -// -// import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := fastly.NewServiceVcl(ctx, "demo", &fastly.ServiceVclArgs{ -// Backends: ServiceVclBackendArray{ -// &ServiceVclBackendArgs{ -// Address: pulumi.String("127.0.0.1"), -// Name: pulumi.String("origin1"), -// Port: pulumi.Int(80), -// }, -// &ServiceVclBackendArgs{ -// Address: pulumi.String("127.0.0.2"), -// Name: pulumi.String("origin2"), -// Port: pulumi.Int(80), -// }, -// }, -// Directors: ServiceVclDirectorArray{ -// &ServiceVclDirectorArgs{ -// Backends: pulumi.StringArray{ -// pulumi.String("origin1"), -// pulumi.String("origin2"), -// }, -// Name: pulumi.String("mydirector"), -// Quorum: pulumi.Int(0), -// Type: pulumi.Int(3), -// }, -// }, -// Domains: ServiceVclDomainArray{ -// &ServiceVclDomainArgs{ -// Comment: pulumi.String("demo"), -// Name: pulumi.String("demo.notexample.com"), -// }, -// }, -// ForceDestroy: pulumi.Bool(true), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// ``` -// -// Basic usage with [Web Application Firewall](https://developer.fastly.com/reference/api/waf/): -// -// ```go -// package main -// -// import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := fastly.NewServiceVcl(ctx, "demo", &fastly.ServiceVclArgs{ -// Backends: ServiceVclBackendArray{ -// &ServiceVclBackendArgs{ -// Address: pulumi.String("127.0.0.1"), -// Name: pulumi.String("origin1"), -// Port: pulumi.Int(80), -// }, -// }, -// Conditions: ServiceVclConditionArray{ -// &ServiceVclConditionArgs{ -// Name: pulumi.String("WAF_Prefetch"), -// Statement: pulumi.String("req.backend.is_origin"), -// Type: pulumi.String("PREFETCH"), -// }, -// &ServiceVclConditionArgs{ -// Name: pulumi.String("WAF_always_false"), -// Statement: pulumi.String("false"), -// Type: pulumi.String("REQUEST"), -// }, -// }, -// Domains: ServiceVclDomainArray{ -// &ServiceVclDomainArgs{ -// Comment: pulumi.String("demo"), -// Name: pulumi.String("example.com"), -// }, -// }, -// ForceDestroy: pulumi.Bool(true), -// ResponseObjects: ServiceVclResponseObjectArray{ -// &ServiceVclResponseObjectArgs{ -// Content: pulumi.String("Forbidden"), -// ContentType: pulumi.String("text/html"), -// Name: pulumi.String("WAF_Response"), -// RequestCondition: pulumi.String("WAF_always_false"), -// Response: pulumi.String("Forbidden"), -// Status: pulumi.Int(403), -// }, -// }, -// Waf: &ServiceVclWafArgs{ -// PrefetchCondition: pulumi.String("WAF_Prefetch"), -// ResponseObject: pulumi.String("WAF_Response"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// ``` -// -// > **Note:** For an AWS S3 Bucket, the Backend address is -// `.s3-website-.amazonaws.com`. The `overrideHost` attribute -// should be set to `.s3-website-.amazonaws.com` in the `backend` block. See the -// Fastly documentation on [Amazon S3][fastly-s3]. -// -// [fastly-s3]: https://docs.fastly.com/en/guides/amazon-s3 -// [fastly-cname]: https://docs.fastly.com/en/guides/adding-cname-records -// [fastly-conditionals]: https://docs.fastly.com/en/guides/using-conditions -// [fastly-sumologic]: https://developer.fastly.com/reference/api/logging/sumologic/ -// [fastly-gcs]: https://developer.fastly.com/reference/api/logging/gcs/ -// // ## Import // // Fastly Services can be imported using their service ID, e.g. diff --git a/sdk/go/fastly/tlsActivation.go b/sdk/go/fastly/tlsActivation.go index 041d287e..f5b8c48e 100644 --- a/sdk/go/fastly/tlsActivation.go +++ b/sdk/go/fastly/tlsActivation.go @@ -23,7 +23,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/go/fastly/tlsCertificate.go b/sdk/go/fastly/tlsCertificate.go index d6100943..ae5e58c8 100644 --- a/sdk/go/fastly/tlsCertificate.go +++ b/sdk/go/fastly/tlsCertificate.go @@ -23,7 +23,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi-tls/sdk/v4/go/tls" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) diff --git a/sdk/go/fastly/tlsPlatformCertificate.go b/sdk/go/fastly/tlsPlatformCertificate.go index 22b21c05..8f4e29fd 100644 --- a/sdk/go/fastly/tlsPlatformCertificate.go +++ b/sdk/go/fastly/tlsPlatformCertificate.go @@ -23,7 +23,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi-tls/sdk/v4/go/tls" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) diff --git a/sdk/go/fastly/tlsPrivateKey.go b/sdk/go/fastly/tlsPrivateKey.go index 67235be5..7374b70a 100644 --- a/sdk/go/fastly/tlsPrivateKey.go +++ b/sdk/go/fastly/tlsPrivateKey.go @@ -23,7 +23,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi-tls/sdk/v4/go/tls" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) diff --git a/sdk/go/fastly/user.go b/sdk/go/fastly/user.go index 5a37d318..9be38aeb 100644 --- a/sdk/go/fastly/user.go +++ b/sdk/go/fastly/user.go @@ -23,7 +23,7 @@ import ( // package main // // import ( -// "github.com/pulumi/pulumi-fastly/sdk/v4/go/fastly" +// "github.com/pulumi/pulumi-fastly/sdk/v5/go/fastly" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // ) // diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts index fbef0bae..3f17f59b 100644 --- a/sdk/nodejs/config/vars.ts +++ b/sdk/nodejs/config/vars.ts @@ -43,7 +43,8 @@ Object.defineProperty(exports, "forceHttp2", { }); /** - * Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + * Set to `true` if your configuration only consumes data sources that do not require authentication, such as + * `fastly_ip_ranges` */ export declare const noAuth: boolean | undefined; Object.defineProperty(exports, "noAuth", { diff --git a/sdk/nodejs/getServices.ts b/sdk/nodejs/getServices.ts new file mode 100644 index 00000000..de446fde --- /dev/null +++ b/sdk/nodejs/getServices.ts @@ -0,0 +1,37 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "./types"; +import * as utilities from "./utilities"; + +/** + * Use this data source to get the list of the [Fastly services](https://developer.fastly.com/reference/api/services/service/). + */ +export function getServices(opts?: pulumi.InvokeOptions): Promise { + if (!opts) { + opts = {} + } + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + return pulumi.runtime.invoke("fastly:index/getServices:getServices", { + }, opts); +} + +/** + * A collection of values returned by getServices. + */ +export interface GetServicesResult { + /** + * A detailed list of Fastly services in your account. This is limited to the services the API token can read. + */ + readonly details: outputs.GetServicesDetail[]; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + /** + * A list of service IDs in your account. This is limited to the services the API token can read. + */ + readonly ids: string[]; +} diff --git a/sdk/nodejs/go.mod b/sdk/nodejs/go.mod new file mode 100644 index 00000000..4e2f58f3 --- /dev/null +++ b/sdk/nodejs/go.mod @@ -0,0 +1,3 @@ +module fake_nodejs_module // Exclude this directory from Go tools + +go 1.16 diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index 8ded2a68..706b583d 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -7,6 +7,7 @@ import * as utilities from "./utilities"; // Export members: export * from "./getDatacenters"; export * from "./getFastlyIpRanges"; +export * from "./getServices"; export * from "./getTlsActivation"; export * from "./getTlsActivationIds"; export * from "./getTlsCertificate"; @@ -23,6 +24,7 @@ export * from "./getTlsSubscriptionIds"; export * from "./getWafRules"; export * from "./provider"; export * from "./serviceACLEntries"; +export * from "./serviceAuthorization"; export * from "./serviceCompute"; export * from "./serviceDictionaryItems"; export * from "./serviceDynamicSnippetContent"; @@ -47,6 +49,7 @@ export { // Import resources to register: import { ServiceACLEntries } from "./serviceACLEntries"; +import { ServiceAuthorization } from "./serviceAuthorization"; import { ServiceCompute } from "./serviceCompute"; import { ServiceDictionaryItems } from "./serviceDictionaryItems"; import { ServiceDynamicSnippetContent } from "./serviceDynamicSnippetContent"; @@ -66,6 +69,8 @@ const _module = { switch (type) { case "fastly:index/serviceACLEntries:ServiceACLEntries": return new ServiceACLEntries(name, undefined, { urn }) + case "fastly:index/serviceAuthorization:ServiceAuthorization": + return new ServiceAuthorization(name, undefined, { urn }) case "fastly:index/serviceCompute:ServiceCompute": return new ServiceCompute(name, undefined, { urn }) case "fastly:index/serviceDictionaryItems:ServiceDictionaryItems": @@ -96,6 +101,7 @@ const _module = { }, }; pulumi.runtime.registerResourceModule("fastly", "index/serviceACLEntries", _module) +pulumi.runtime.registerResourceModule("fastly", "index/serviceAuthorization", _module) pulumi.runtime.registerResourceModule("fastly", "index/serviceCompute", _module) pulumi.runtime.registerResourceModule("fastly", "index/serviceDictionaryItems", _module) pulumi.runtime.registerResourceModule("fastly", "index/serviceDynamicSnippetContent", _module) diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts index f09e6b45..6a53b121 100644 --- a/sdk/nodejs/provider.ts +++ b/sdk/nodejs/provider.ts @@ -74,7 +74,8 @@ export interface ProviderArgs { */ forceHttp2?: pulumi.Input; /** - * Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + * Set to `true` if your configuration only consumes data sources that do not require authentication, such as + * `fastly_ip_ranges` */ noAuth?: pulumi.Input; } diff --git a/sdk/nodejs/serviceAuthorization.ts b/sdk/nodejs/serviceAuthorization.ts new file mode 100644 index 00000000..88553cf7 --- /dev/null +++ b/sdk/nodejs/serviceAuthorization.ts @@ -0,0 +1,150 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +/** + * Configures authorization with granular permissions to services. Users can be granted rights for services on different levels. + * + * The Service Authorization resource requires a user id, service id and an optional permission. + * + * ## Example Usage + * + * Basic usage: + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as fastly from "@pulumi/fastly"; + * + * const demo = new fastly.ServiceVcl("demo", {}); + * //... + * const user = new fastly.User("user", {}); + * // ... + * const auth = new fastly.ServiceAuthorization("auth", { + * serviceId: demo.id, + * userId: user.id, + * permission: "purge_all", + * }); + * ``` + * + * ## Import + * + * A Fastly Service Authorization can be imported using their user ID, e.g. + * + * ```sh + * $ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx + * ``` + */ +export class ServiceAuthorization extends pulumi.CustomResource { + /** + * Get an existing ServiceAuthorization resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: ServiceAuthorizationState, opts?: pulumi.CustomResourceOptions): ServiceAuthorization { + return new ServiceAuthorization(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'fastly:index/serviceAuthorization:ServiceAuthorization'; + + /** + * Returns true if the given object is an instance of ServiceAuthorization. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is ServiceAuthorization { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ServiceAuthorization.__pulumiType; + } + + /** + * The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + */ + public readonly permission!: pulumi.Output; + /** + * The ID of the service to grant permissions for. + */ + public readonly serviceId!: pulumi.Output; + /** + * The ID of the user which will receive the granted permissions. + */ + public readonly userId!: pulumi.Output; + + /** + * Create a ServiceAuthorization resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ServiceAuthorizationArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ServiceAuthorizationArgs | ServiceAuthorizationState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ServiceAuthorizationState | undefined; + resourceInputs["permission"] = state ? state.permission : undefined; + resourceInputs["serviceId"] = state ? state.serviceId : undefined; + resourceInputs["userId"] = state ? state.userId : undefined; + } else { + const args = argsOrState as ServiceAuthorizationArgs | undefined; + if ((!args || args.permission === undefined) && !opts.urn) { + throw new Error("Missing required property 'permission'"); + } + if ((!args || args.serviceId === undefined) && !opts.urn) { + throw new Error("Missing required property 'serviceId'"); + } + if ((!args || args.userId === undefined) && !opts.urn) { + throw new Error("Missing required property 'userId'"); + } + resourceInputs["permission"] = args ? args.permission : undefined; + resourceInputs["serviceId"] = args ? args.serviceId : undefined; + resourceInputs["userId"] = args ? args.userId : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ServiceAuthorization.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ServiceAuthorization resources. + */ +export interface ServiceAuthorizationState { + /** + * The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + */ + permission?: pulumi.Input; + /** + * The ID of the service to grant permissions for. + */ + serviceId?: pulumi.Input; + /** + * The ID of the user which will receive the granted permissions. + */ + userId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ServiceAuthorization resource. + */ +export interface ServiceAuthorizationArgs { + /** + * The permissions to grant the user. Can be `full`, `readOnly`, `purgeSelect` or `purgeAll`. + */ + permission: pulumi.Input; + /** + * The ID of the service to grant permissions for. + */ + serviceId: pulumi.Input; + /** + * The ID of the user which will receive the granted permissions. + */ + userId: pulumi.Input; +} diff --git a/sdk/nodejs/serviceCompute.ts b/sdk/nodejs/serviceCompute.ts index 53e45ead..b26a2f24 100644 --- a/sdk/nodejs/serviceCompute.ts +++ b/sdk/nodejs/serviceCompute.ts @@ -65,16 +65,7 @@ export class ServiceCompute extends pulumi.CustomResource { * Description field for the service. Default `Managed by Terraform` */ public readonly comment!: pulumi.Output; - /** - * The default hostname - */ - public readonly defaultHost!: pulumi.Output; - /** - * The default Time-to-live (TTL) for requests - */ - public readonly defaultTtl!: pulumi.Output; public readonly dictionaries!: pulumi.Output; - public readonly directors!: pulumi.Output; /** * A set of Domain names to serve as entry points for your Service */ @@ -83,7 +74,6 @@ export class ServiceCompute extends pulumi.CustomResource { * Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` */ public readonly forceDestroy!: pulumi.Output; - public readonly healthchecks!: pulumi.Output; public readonly loggingBigqueries!: pulumi.Output; public readonly loggingBlobstorages!: pulumi.Output; public readonly loggingCloudfiles!: pulumi.Output; @@ -118,14 +108,6 @@ export class ServiceCompute extends pulumi.CustomResource { * The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) */ public readonly package!: pulumi.Output; - /** - * Enables serving a stale object if there is an error - */ - public readonly staleIfError!: pulumi.Output; - /** - * The default time-to-live (TTL) for serving the stale object for the version - */ - public readonly staleIfErrorTtl!: pulumi.Output; /** * Description field for the version */ @@ -149,13 +131,9 @@ export class ServiceCompute extends pulumi.CustomResource { resourceInputs["backends"] = state ? state.backends : undefined; resourceInputs["clonedVersion"] = state ? state.clonedVersion : undefined; resourceInputs["comment"] = state ? state.comment : undefined; - resourceInputs["defaultHost"] = state ? state.defaultHost : undefined; - resourceInputs["defaultTtl"] = state ? state.defaultTtl : undefined; resourceInputs["dictionaries"] = state ? state.dictionaries : undefined; - resourceInputs["directors"] = state ? state.directors : undefined; resourceInputs["domains"] = state ? state.domains : undefined; resourceInputs["forceDestroy"] = state ? state.forceDestroy : undefined; - resourceInputs["healthchecks"] = state ? state.healthchecks : undefined; resourceInputs["loggingBigqueries"] = state ? state.loggingBigqueries : undefined; resourceInputs["loggingBlobstorages"] = state ? state.loggingBlobstorages : undefined; resourceInputs["loggingCloudfiles"] = state ? state.loggingCloudfiles : undefined; @@ -184,8 +162,6 @@ export class ServiceCompute extends pulumi.CustomResource { resourceInputs["loggingSyslogs"] = state ? state.loggingSyslogs : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["package"] = state ? state.package : undefined; - resourceInputs["staleIfError"] = state ? state.staleIfError : undefined; - resourceInputs["staleIfErrorTtl"] = state ? state.staleIfErrorTtl : undefined; resourceInputs["versionComment"] = state ? state.versionComment : undefined; } else { const args = argsOrState as ServiceComputeArgs | undefined; @@ -198,13 +174,9 @@ export class ServiceCompute extends pulumi.CustomResource { resourceInputs["activate"] = args ? args.activate : undefined; resourceInputs["backends"] = args ? args.backends : undefined; resourceInputs["comment"] = args ? args.comment : undefined; - resourceInputs["defaultHost"] = args ? args.defaultHost : undefined; - resourceInputs["defaultTtl"] = args ? args.defaultTtl : undefined; resourceInputs["dictionaries"] = args ? args.dictionaries : undefined; - resourceInputs["directors"] = args ? args.directors : undefined; resourceInputs["domains"] = args ? args.domains : undefined; resourceInputs["forceDestroy"] = args ? args.forceDestroy : undefined; - resourceInputs["healthchecks"] = args ? args.healthchecks : undefined; resourceInputs["loggingBigqueries"] = args ? args.loggingBigqueries : undefined; resourceInputs["loggingBlobstorages"] = args ? args.loggingBlobstorages : undefined; resourceInputs["loggingCloudfiles"] = args ? args.loggingCloudfiles : undefined; @@ -233,8 +205,6 @@ export class ServiceCompute extends pulumi.CustomResource { resourceInputs["loggingSyslogs"] = args ? args.loggingSyslogs : undefined; resourceInputs["name"] = args ? args.name : undefined; resourceInputs["package"] = args ? args.package : undefined; - resourceInputs["staleIfError"] = args ? args.staleIfError : undefined; - resourceInputs["staleIfErrorTtl"] = args ? args.staleIfErrorTtl : undefined; resourceInputs["versionComment"] = args ? args.versionComment : undefined; resourceInputs["activeVersion"] = undefined /*out*/; resourceInputs["clonedVersion"] = undefined /*out*/; @@ -265,16 +235,7 @@ export interface ServiceComputeState { * Description field for the service. Default `Managed by Terraform` */ comment?: pulumi.Input; - /** - * The default hostname - */ - defaultHost?: pulumi.Input; - /** - * The default Time-to-live (TTL) for requests - */ - defaultTtl?: pulumi.Input; dictionaries?: pulumi.Input[]>; - directors?: pulumi.Input[]>; /** * A set of Domain names to serve as entry points for your Service */ @@ -283,7 +244,6 @@ export interface ServiceComputeState { * Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` */ forceDestroy?: pulumi.Input; - healthchecks?: pulumi.Input[]>; loggingBigqueries?: pulumi.Input[]>; loggingBlobstorages?: pulumi.Input[]>; loggingCloudfiles?: pulumi.Input[]>; @@ -318,14 +278,6 @@ export interface ServiceComputeState { * The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) */ package?: pulumi.Input; - /** - * Enables serving a stale object if there is an error - */ - staleIfError?: pulumi.Input; - /** - * The default time-to-live (TTL) for serving the stale object for the version - */ - staleIfErrorTtl?: pulumi.Input; /** * Description field for the version */ @@ -345,16 +297,7 @@ export interface ServiceComputeArgs { * Description field for the service. Default `Managed by Terraform` */ comment?: pulumi.Input; - /** - * The default hostname - */ - defaultHost?: pulumi.Input; - /** - * The default Time-to-live (TTL) for requests - */ - defaultTtl?: pulumi.Input; dictionaries?: pulumi.Input[]>; - directors?: pulumi.Input[]>; /** * A set of Domain names to serve as entry points for your Service */ @@ -363,7 +306,6 @@ export interface ServiceComputeArgs { * Services that are active cannot be destroyed. In order to destroy the Service, set `forceDestroy` to `true`. Default `false` */ forceDestroy?: pulumi.Input; - healthchecks?: pulumi.Input[]>; loggingBigqueries?: pulumi.Input[]>; loggingBlobstorages?: pulumi.Input[]>; loggingCloudfiles?: pulumi.Input[]>; @@ -398,14 +340,6 @@ export interface ServiceComputeArgs { * The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) */ package: pulumi.Input; - /** - * Enables serving a stale object if there is an error - */ - staleIfError?: pulumi.Input; - /** - * The default time-to-live (TTL) for serving the stale object for the version - */ - staleIfErrorTtl?: pulumi.Input; /** * Description field for the version */ diff --git a/sdk/nodejs/serviceVcl.ts b/sdk/nodejs/serviceVcl.ts index 0edbcef4..ac60d963 100644 --- a/sdk/nodejs/serviceVcl.ts +++ b/sdk/nodejs/serviceVcl.ts @@ -73,12 +73,12 @@ import * as utilities from "./utilities"; * type: "cache", * }], * }); - * const website = new aws.s3.Bucket("website", { + * const website = new aws.s3.BucketV2("website", { * acl: "public-read", - * website: { + * websites: [{ * errorDocument: "error.html", * indexDocument: "index.html", - * }, + * }], * }); * ``` * diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index b8261181..4e19de29 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -17,6 +17,7 @@ "config/vars.ts", "getDatacenters.ts", "getFastlyIpRanges.ts", + "getServices.ts", "getTlsActivation.ts", "getTlsActivationIds.ts", "getTlsCertificate.ts", @@ -34,6 +35,7 @@ "index.ts", "provider.ts", "serviceACLEntries.ts", + "serviceAuthorization.ts", "serviceCompute.ts", "serviceDictionaryItems.ts", "serviceDynamicSnippetContent.ts", diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index c54e8247..391389fc 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -144,37 +144,6 @@ export interface ServiceComputeDictionary { writeOnly?: pulumi.Input; } -export interface ServiceComputeDirector { - /** - * Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - */ - backends: pulumi.Input[]>; - /** - * An optional comment about the Director - */ - comment?: pulumi.Input; - /** - * Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - */ - name: pulumi.Input; - /** - * Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - */ - quorum?: pulumi.Input; - /** - * How many backends to search if it fails. Default `5` - */ - retries?: pulumi.Input; - /** - * Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - */ - shield?: pulumi.Input; - /** - * Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - */ - type?: pulumi.Input; -} - export interface ServiceComputeDomain { /** * An optional comment about the Domain. @@ -186,53 +155,6 @@ export interface ServiceComputeDomain { name: pulumi.Input; } -export interface ServiceComputeHealthcheck { - /** - * How often to run the Healthcheck in milliseconds. Default `5000` - */ - checkInterval?: pulumi.Input; - /** - * The status code expected from the host. Default `200` - */ - expectedResponse?: pulumi.Input; - /** - * The Host header to send for this Healthcheck - */ - host: pulumi.Input; - /** - * Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - */ - httpVersion?: pulumi.Input; - /** - * When loading a config, the initial number of probes to be seen as OK. Default `3` - */ - initial?: pulumi.Input; - /** - * Which HTTP method to use. Default `HEAD` - */ - method?: pulumi.Input; - /** - * A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - */ - name: pulumi.Input; - /** - * The path to check - */ - path: pulumi.Input; - /** - * How many Healthchecks must succeed to be considered healthy. Default `3` - */ - threshold?: pulumi.Input; - /** - * Timeout in milliseconds. Default `500` - */ - timeout?: pulumi.Input; - /** - * The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - */ - window?: pulumi.Input; -} - export interface ServiceComputeLoggingBigquery { /** * The ID of your BigQuery dataset @@ -3033,3 +2955,4 @@ export interface TlsSubscriptionManagedHttpChallenge { */ recordValues?: pulumi.Input[]>; } + diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 8e1b03df..5ec66f44 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -11,6 +11,20 @@ export interface GetDatacentersPop { shield: string; } +export interface GetServicesDetail { + comment: string; + createdAt: string; + customerId: string; + /** + * The ID of this resource. + */ + id: string; + name: string; + type: string; + updatedAt: string; + version: number; +} + export interface GetTlsConfigurationDnsRecord { recordType: string; recordValue: string; @@ -172,37 +186,6 @@ export interface ServiceComputeDictionary { writeOnly?: boolean; } -export interface ServiceComputeDirector { - /** - * Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - */ - backends: string[]; - /** - * An optional comment about the Director - */ - comment?: string; - /** - * Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - */ - name: string; - /** - * Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - */ - quorum?: number; - /** - * How many backends to search if it fails. Default `5` - */ - retries?: number; - /** - * Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - */ - shield?: string; - /** - * Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - */ - type?: number; -} - export interface ServiceComputeDomain { /** * An optional comment about the Domain. @@ -214,53 +197,6 @@ export interface ServiceComputeDomain { name: string; } -export interface ServiceComputeHealthcheck { - /** - * How often to run the Healthcheck in milliseconds. Default `5000` - */ - checkInterval?: number; - /** - * The status code expected from the host. Default `200` - */ - expectedResponse?: number; - /** - * The Host header to send for this Healthcheck - */ - host: string; - /** - * Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - */ - httpVersion?: string; - /** - * When loading a config, the initial number of probes to be seen as OK. Default `3` - */ - initial?: number; - /** - * Which HTTP method to use. Default `HEAD` - */ - method?: string; - /** - * A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - */ - name: string; - /** - * The path to check - */ - path: string; - /** - * How many Healthchecks must succeed to be considered healthy. Default `3` - */ - threshold?: number; - /** - * Timeout in milliseconds. Default `500` - */ - timeout?: number; - /** - * The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - */ - window?: number; -} - export interface ServiceComputeLoggingBigquery { /** * The ID of your BigQuery dataset @@ -3061,3 +2997,4 @@ export interface TlsSubscriptionManagedHttpChallenge { */ recordValues: string[]; } + diff --git a/sdk/python/go.mod b/sdk/python/go.mod new file mode 100644 index 00000000..08d8d679 --- /dev/null +++ b/sdk/python/go.mod @@ -0,0 +1,3 @@ +module fake_python_module // Exclude this directory from Go tools + +go 1.16 diff --git a/sdk/python/pulumi_fastly/__init__.py b/sdk/python/pulumi_fastly/__init__.py index e5b7eb41..3f6ccb4a 100644 --- a/sdk/python/pulumi_fastly/__init__.py +++ b/sdk/python/pulumi_fastly/__init__.py @@ -7,6 +7,7 @@ # Export this package's modules as members: from .get_datacenters import * from .get_fastly_ip_ranges import * +from .get_services import * from .get_tls_activation import * from .get_tls_activation_ids import * from .get_tls_certificate import * @@ -23,6 +24,7 @@ from .get_waf_rules import * from .provider import * from .service_acl_entries import * +from .service_authorization import * from .service_compute import * from .service_dictionary_items import * from .service_dynamic_snippet_content import * @@ -56,6 +58,14 @@ "fastly:index/serviceACLEntries:ServiceACLEntries": "ServiceACLEntries" } }, + { + "pkg": "fastly", + "mod": "index/serviceAuthorization", + "fqn": "pulumi_fastly", + "classes": { + "fastly:index/serviceAuthorization:ServiceAuthorization": "ServiceAuthorization" + } + }, { "pkg": "fastly", "mod": "index/serviceCompute", diff --git a/sdk/python/pulumi_fastly/_inputs.py b/sdk/python/pulumi_fastly/_inputs.py index 7dadd33f..8da193cd 100644 --- a/sdk/python/pulumi_fastly/_inputs.py +++ b/sdk/python/pulumi_fastly/_inputs.py @@ -12,9 +12,7 @@ 'ServiceACLEntriesEntryArgs', 'ServiceComputeBackendArgs', 'ServiceComputeDictionaryArgs', - 'ServiceComputeDirectorArgs', 'ServiceComputeDomainArgs', - 'ServiceComputeHealthcheckArgs', 'ServiceComputeLoggingBigqueryArgs', 'ServiceComputeLoggingBlobstorageArgs', 'ServiceComputeLoggingCloudfileArgs', @@ -634,123 +632,6 @@ def write_only(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "write_only", value) -@pulumi.input_type -class ServiceComputeDirectorArgs: - def __init__(__self__, *, - backends: pulumi.Input[Sequence[pulumi.Input[str]]], - name: pulumi.Input[str], - comment: Optional[pulumi.Input[str]] = None, - quorum: Optional[pulumi.Input[int]] = None, - retries: Optional[pulumi.Input[int]] = None, - shield: Optional[pulumi.Input[str]] = None, - type: Optional[pulumi.Input[int]] = None): - """ - :param pulumi.Input[Sequence[pulumi.Input[str]]] backends: Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - :param pulumi.Input[str] name: Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - :param pulumi.Input[str] comment: An optional comment about the Director - :param pulumi.Input[int] quorum: Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - :param pulumi.Input[int] retries: How many backends to search if it fails. Default `5` - :param pulumi.Input[str] shield: Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - :param pulumi.Input[int] type: Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - """ - pulumi.set(__self__, "backends", backends) - pulumi.set(__self__, "name", name) - if comment is not None: - pulumi.set(__self__, "comment", comment) - if quorum is not None: - pulumi.set(__self__, "quorum", quorum) - if retries is not None: - pulumi.set(__self__, "retries", retries) - if shield is not None: - pulumi.set(__self__, "shield", shield) - if type is not None: - pulumi.set(__self__, "type", type) - - @property - @pulumi.getter - def backends(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: - """ - Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - """ - return pulumi.get(self, "backends") - - @backends.setter - def backends(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): - pulumi.set(self, "backends", value) - - @property - @pulumi.getter - def name(self) -> pulumi.Input[str]: - """ - Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - """ - return pulumi.get(self, "name") - - @name.setter - def name(self, value: pulumi.Input[str]): - pulumi.set(self, "name", value) - - @property - @pulumi.getter - def comment(self) -> Optional[pulumi.Input[str]]: - """ - An optional comment about the Director - """ - return pulumi.get(self, "comment") - - @comment.setter - def comment(self, value: Optional[pulumi.Input[str]]): - pulumi.set(self, "comment", value) - - @property - @pulumi.getter - def quorum(self) -> Optional[pulumi.Input[int]]: - """ - Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - """ - return pulumi.get(self, "quorum") - - @quorum.setter - def quorum(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "quorum", value) - - @property - @pulumi.getter - def retries(self) -> Optional[pulumi.Input[int]]: - """ - How many backends to search if it fails. Default `5` - """ - return pulumi.get(self, "retries") - - @retries.setter - def retries(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "retries", value) - - @property - @pulumi.getter - def shield(self) -> Optional[pulumi.Input[str]]: - """ - Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - """ - return pulumi.get(self, "shield") - - @shield.setter - def shield(self, value: Optional[pulumi.Input[str]]): - pulumi.set(self, "shield", value) - - @property - @pulumi.getter - def type(self) -> Optional[pulumi.Input[int]]: - """ - Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - """ - return pulumi.get(self, "type") - - @type.setter - def type(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "type", value) - - @pulumi.input_type class ServiceComputeDomainArgs: def __init__(__self__, *, @@ -789,186 +670,6 @@ def comment(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "comment", value) -@pulumi.input_type -class ServiceComputeHealthcheckArgs: - def __init__(__self__, *, - host: pulumi.Input[str], - name: pulumi.Input[str], - path: pulumi.Input[str], - check_interval: Optional[pulumi.Input[int]] = None, - expected_response: Optional[pulumi.Input[int]] = None, - http_version: Optional[pulumi.Input[str]] = None, - initial: Optional[pulumi.Input[int]] = None, - method: Optional[pulumi.Input[str]] = None, - threshold: Optional[pulumi.Input[int]] = None, - timeout: Optional[pulumi.Input[int]] = None, - window: Optional[pulumi.Input[int]] = None): - """ - :param pulumi.Input[str] host: The Host header to send for this Healthcheck - :param pulumi.Input[str] name: A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - :param pulumi.Input[str] path: The path to check - :param pulumi.Input[int] check_interval: How often to run the Healthcheck in milliseconds. Default `5000` - :param pulumi.Input[int] expected_response: The status code expected from the host. Default `200` - :param pulumi.Input[str] http_version: Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - :param pulumi.Input[int] initial: When loading a config, the initial number of probes to be seen as OK. Default `3` - :param pulumi.Input[str] method: Which HTTP method to use. Default `HEAD` - :param pulumi.Input[int] threshold: How many Healthchecks must succeed to be considered healthy. Default `3` - :param pulumi.Input[int] timeout: Timeout in milliseconds. Default `500` - :param pulumi.Input[int] window: The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - """ - pulumi.set(__self__, "host", host) - pulumi.set(__self__, "name", name) - pulumi.set(__self__, "path", path) - if check_interval is not None: - pulumi.set(__self__, "check_interval", check_interval) - if expected_response is not None: - pulumi.set(__self__, "expected_response", expected_response) - if http_version is not None: - pulumi.set(__self__, "http_version", http_version) - if initial is not None: - pulumi.set(__self__, "initial", initial) - if method is not None: - pulumi.set(__self__, "method", method) - if threshold is not None: - pulumi.set(__self__, "threshold", threshold) - if timeout is not None: - pulumi.set(__self__, "timeout", timeout) - if window is not None: - pulumi.set(__self__, "window", window) - - @property - @pulumi.getter - def host(self) -> pulumi.Input[str]: - """ - The Host header to send for this Healthcheck - """ - return pulumi.get(self, "host") - - @host.setter - def host(self, value: pulumi.Input[str]): - pulumi.set(self, "host", value) - - @property - @pulumi.getter - def name(self) -> pulumi.Input[str]: - """ - A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - """ - return pulumi.get(self, "name") - - @name.setter - def name(self, value: pulumi.Input[str]): - pulumi.set(self, "name", value) - - @property - @pulumi.getter - def path(self) -> pulumi.Input[str]: - """ - The path to check - """ - return pulumi.get(self, "path") - - @path.setter - def path(self, value: pulumi.Input[str]): - pulumi.set(self, "path", value) - - @property - @pulumi.getter(name="checkInterval") - def check_interval(self) -> Optional[pulumi.Input[int]]: - """ - How often to run the Healthcheck in milliseconds. Default `5000` - """ - return pulumi.get(self, "check_interval") - - @check_interval.setter - def check_interval(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "check_interval", value) - - @property - @pulumi.getter(name="expectedResponse") - def expected_response(self) -> Optional[pulumi.Input[int]]: - """ - The status code expected from the host. Default `200` - """ - return pulumi.get(self, "expected_response") - - @expected_response.setter - def expected_response(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "expected_response", value) - - @property - @pulumi.getter(name="httpVersion") - def http_version(self) -> Optional[pulumi.Input[str]]: - """ - Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - """ - return pulumi.get(self, "http_version") - - @http_version.setter - def http_version(self, value: Optional[pulumi.Input[str]]): - pulumi.set(self, "http_version", value) - - @property - @pulumi.getter - def initial(self) -> Optional[pulumi.Input[int]]: - """ - When loading a config, the initial number of probes to be seen as OK. Default `3` - """ - return pulumi.get(self, "initial") - - @initial.setter - def initial(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "initial", value) - - @property - @pulumi.getter - def method(self) -> Optional[pulumi.Input[str]]: - """ - Which HTTP method to use. Default `HEAD` - """ - return pulumi.get(self, "method") - - @method.setter - def method(self, value: Optional[pulumi.Input[str]]): - pulumi.set(self, "method", value) - - @property - @pulumi.getter - def threshold(self) -> Optional[pulumi.Input[int]]: - """ - How many Healthchecks must succeed to be considered healthy. Default `3` - """ - return pulumi.get(self, "threshold") - - @threshold.setter - def threshold(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "threshold", value) - - @property - @pulumi.getter - def timeout(self) -> Optional[pulumi.Input[int]]: - """ - Timeout in milliseconds. Default `500` - """ - return pulumi.get(self, "timeout") - - @timeout.setter - def timeout(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "timeout", value) - - @property - @pulumi.getter - def window(self) -> Optional[pulumi.Input[int]]: - """ - The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - """ - return pulumi.get(self, "window") - - @window.setter - def window(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "window", value) - - @pulumi.input_type class ServiceComputeLoggingBigqueryArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_fastly/config/__init__.pyi b/sdk/python/pulumi_fastly/config/__init__.pyi index 0e66f601..32b18087 100644 --- a/sdk/python/pulumi_fastly/config/__init__.pyi +++ b/sdk/python/pulumi_fastly/config/__init__.pyi @@ -27,6 +27,7 @@ handshakes. Default: `false` noAuth: Optional[bool] """ -Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` +Set to `true` if your configuration only consumes data sources that do not require authentication, such as +`fastly_ip_ranges` """ diff --git a/sdk/python/pulumi_fastly/config/vars.py b/sdk/python/pulumi_fastly/config/vars.py index 2cae8a70..a1aff8d8 100644 --- a/sdk/python/pulumi_fastly/config/vars.py +++ b/sdk/python/pulumi_fastly/config/vars.py @@ -40,7 +40,8 @@ def force_http2(self) -> Optional[bool]: @property def no_auth(self) -> Optional[bool]: """ - Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + Set to `true` if your configuration only consumes data sources that do not require authentication, such as + `fastly_ip_ranges` """ return __config__.get_bool('noAuth') diff --git a/sdk/python/pulumi_fastly/get_services.py b/sdk/python/pulumi_fastly/get_services.py new file mode 100644 index 00000000..5bf32da9 --- /dev/null +++ b/sdk/python/pulumi_fastly/get_services.py @@ -0,0 +1,84 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities +from . import outputs + +__all__ = [ + 'GetServicesResult', + 'AwaitableGetServicesResult', + 'get_services', +] + +@pulumi.output_type +class GetServicesResult: + """ + A collection of values returned by getServices. + """ + def __init__(__self__, details=None, id=None, ids=None): + if details and not isinstance(details, list): + raise TypeError("Expected argument 'details' to be a list") + pulumi.set(__self__, "details", details) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if ids and not isinstance(ids, list): + raise TypeError("Expected argument 'ids' to be a list") + pulumi.set(__self__, "ids", ids) + + @property + @pulumi.getter + def details(self) -> Sequence['outputs.GetServicesDetailResult']: + """ + A detailed list of Fastly services in your account. This is limited to the services the API token can read. + """ + return pulumi.get(self, "details") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def ids(self) -> Sequence[str]: + """ + A list of service IDs in your account. This is limited to the services the API token can read. + """ + return pulumi.get(self, "ids") + + +class AwaitableGetServicesResult(GetServicesResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetServicesResult( + details=self.details, + id=self.id, + ids=self.ids) + + +def get_services(opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetServicesResult: + """ + Use this data source to get the list of the [Fastly services](https://developer.fastly.com/reference/api/services/service/). + """ + __args__ = dict() + if opts is None: + opts = pulumi.InvokeOptions() + if opts.version is None: + opts.version = _utilities.get_version() + __ret__ = pulumi.runtime.invoke('fastly:index/getServices:getServices', __args__, opts=opts, typ=GetServicesResult).value + + return AwaitableGetServicesResult( + details=__ret__.details, + id=__ret__.id, + ids=__ret__.ids) diff --git a/sdk/python/pulumi_fastly/outputs.py b/sdk/python/pulumi_fastly/outputs.py index 025829b9..9360cb51 100644 --- a/sdk/python/pulumi_fastly/outputs.py +++ b/sdk/python/pulumi_fastly/outputs.py @@ -12,9 +12,7 @@ 'ServiceACLEntriesEntry', 'ServiceComputeBackend', 'ServiceComputeDictionary', - 'ServiceComputeDirector', 'ServiceComputeDomain', - 'ServiceComputeHealthcheck', 'ServiceComputeLoggingBigquery', 'ServiceComputeLoggingBlobstorage', 'ServiceComputeLoggingCloudfile', @@ -89,6 +87,7 @@ 'TlsSubscriptionManagedDnsChallenge', 'TlsSubscriptionManagedHttpChallenge', 'GetDatacentersPopResult', + 'GetServicesDetailResult', 'GetTlsConfigurationDnsRecordResult', 'GetWafRulesRuleResult', ] @@ -574,95 +573,6 @@ def write_only(self) -> Optional[bool]: return pulumi.get(self, "write_only") -@pulumi.output_type -class ServiceComputeDirector(dict): - def __init__(__self__, *, - backends: Sequence[str], - name: str, - comment: Optional[str] = None, - quorum: Optional[int] = None, - retries: Optional[int] = None, - shield: Optional[str] = None, - type: Optional[int] = None): - """ - :param Sequence[str] backends: Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - :param str name: Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - :param str comment: An optional comment about the Director - :param int quorum: Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - :param int retries: How many backends to search if it fails. Default `5` - :param str shield: Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - :param int type: Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - """ - pulumi.set(__self__, "backends", backends) - pulumi.set(__self__, "name", name) - if comment is not None: - pulumi.set(__self__, "comment", comment) - if quorum is not None: - pulumi.set(__self__, "quorum", quorum) - if retries is not None: - pulumi.set(__self__, "retries", retries) - if shield is not None: - pulumi.set(__self__, "shield", shield) - if type is not None: - pulumi.set(__self__, "type", type) - - @property - @pulumi.getter - def backends(self) -> Sequence[str]: - """ - Names of defined backends to map the director to. Example: `[ "origin1", "origin2" ]` - """ - return pulumi.get(self, "backends") - - @property - @pulumi.getter - def name(self) -> str: - """ - Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource - """ - return pulumi.get(self, "name") - - @property - @pulumi.getter - def comment(self) -> Optional[str]: - """ - An optional comment about the Director - """ - return pulumi.get(self, "comment") - - @property - @pulumi.getter - def quorum(self) -> Optional[int]: - """ - Percentage of capacity that needs to be up for the director itself to be considered up. Default `75` - """ - return pulumi.get(self, "quorum") - - @property - @pulumi.getter - def retries(self) -> Optional[int]: - """ - How many backends to search if it fails. Default `5` - """ - return pulumi.get(self, "retries") - - @property - @pulumi.getter - def shield(self) -> Optional[str]: - """ - Selected POP to serve as a "shield" for backends. Valid values for `shield` are included in the [`GET /datacenters`](https://developer.fastly.com/reference/api/utils/datacenter/) API response - """ - return pulumi.get(self, "shield") - - @property - @pulumi.getter - def type(self) -> Optional[int]: - """ - Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1` - """ - return pulumi.get(self, "type") - - @pulumi.output_type class ServiceComputeDomain(dict): def __init__(__self__, *, @@ -693,163 +603,6 @@ def comment(self) -> Optional[str]: return pulumi.get(self, "comment") -@pulumi.output_type -class ServiceComputeHealthcheck(dict): - @staticmethod - def __key_warning(key: str): - suggest = None - if key == "checkInterval": - suggest = "check_interval" - elif key == "expectedResponse": - suggest = "expected_response" - elif key == "httpVersion": - suggest = "http_version" - - if suggest: - pulumi.log.warn(f"Key '{key}' not found in ServiceComputeHealthcheck. Access the value via the '{suggest}' property getter instead.") - - def __getitem__(self, key: str) -> Any: - ServiceComputeHealthcheck.__key_warning(key) - return super().__getitem__(key) - - def get(self, key: str, default = None) -> Any: - ServiceComputeHealthcheck.__key_warning(key) - return super().get(key, default) - - def __init__(__self__, *, - host: str, - name: str, - path: str, - check_interval: Optional[int] = None, - expected_response: Optional[int] = None, - http_version: Optional[str] = None, - initial: Optional[int] = None, - method: Optional[str] = None, - threshold: Optional[int] = None, - timeout: Optional[int] = None, - window: Optional[int] = None): - """ - :param str host: The Host header to send for this Healthcheck - :param str name: A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - :param str path: The path to check - :param int check_interval: How often to run the Healthcheck in milliseconds. Default `5000` - :param int expected_response: The status code expected from the host. Default `200` - :param str http_version: Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - :param int initial: When loading a config, the initial number of probes to be seen as OK. Default `3` - :param str method: Which HTTP method to use. Default `HEAD` - :param int threshold: How many Healthchecks must succeed to be considered healthy. Default `3` - :param int timeout: Timeout in milliseconds. Default `500` - :param int window: The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - """ - pulumi.set(__self__, "host", host) - pulumi.set(__self__, "name", name) - pulumi.set(__self__, "path", path) - if check_interval is not None: - pulumi.set(__self__, "check_interval", check_interval) - if expected_response is not None: - pulumi.set(__self__, "expected_response", expected_response) - if http_version is not None: - pulumi.set(__self__, "http_version", http_version) - if initial is not None: - pulumi.set(__self__, "initial", initial) - if method is not None: - pulumi.set(__self__, "method", method) - if threshold is not None: - pulumi.set(__self__, "threshold", threshold) - if timeout is not None: - pulumi.set(__self__, "timeout", timeout) - if window is not None: - pulumi.set(__self__, "window", window) - - @property - @pulumi.getter - def host(self) -> str: - """ - The Host header to send for this Healthcheck - """ - return pulumi.get(self, "host") - - @property - @pulumi.getter - def name(self) -> str: - """ - A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource - """ - return pulumi.get(self, "name") - - @property - @pulumi.getter - def path(self) -> str: - """ - The path to check - """ - return pulumi.get(self, "path") - - @property - @pulumi.getter(name="checkInterval") - def check_interval(self) -> Optional[int]: - """ - How often to run the Healthcheck in milliseconds. Default `5000` - """ - return pulumi.get(self, "check_interval") - - @property - @pulumi.getter(name="expectedResponse") - def expected_response(self) -> Optional[int]: - """ - The status code expected from the host. Default `200` - """ - return pulumi.get(self, "expected_response") - - @property - @pulumi.getter(name="httpVersion") - def http_version(self) -> Optional[str]: - """ - Whether to use version 1.0 or 1.1 HTTP. Default `1.1` - """ - return pulumi.get(self, "http_version") - - @property - @pulumi.getter - def initial(self) -> Optional[int]: - """ - When loading a config, the initial number of probes to be seen as OK. Default `3` - """ - return pulumi.get(self, "initial") - - @property - @pulumi.getter - def method(self) -> Optional[str]: - """ - Which HTTP method to use. Default `HEAD` - """ - return pulumi.get(self, "method") - - @property - @pulumi.getter - def threshold(self) -> Optional[int]: - """ - How many Healthchecks must succeed to be considered healthy. Default `3` - """ - return pulumi.get(self, "threshold") - - @property - @pulumi.getter - def timeout(self) -> Optional[int]: - """ - Timeout in milliseconds. Default `500` - """ - return pulumi.get(self, "timeout") - - @property - @pulumi.getter - def window(self) -> Optional[int]: - """ - The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5` - """ - return pulumi.get(self, "window") - - @pulumi.output_type class ServiceComputeLoggingBigquery(dict): @staticmethod @@ -10489,6 +10242,73 @@ def shield(self) -> str: return pulumi.get(self, "shield") +@pulumi.output_type +class GetServicesDetailResult(dict): + def __init__(__self__, *, + comment: str, + created_at: str, + customer_id: str, + id: str, + name: str, + type: str, + updated_at: str, + version: int): + """ + :param str id: The ID of this resource. + """ + pulumi.set(__self__, "comment", comment) + pulumi.set(__self__, "created_at", created_at) + pulumi.set(__self__, "customer_id", customer_id) + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "type", type) + pulumi.set(__self__, "updated_at", updated_at) + pulumi.set(__self__, "version", version) + + @property + @pulumi.getter + def comment(self) -> str: + return pulumi.get(self, "comment") + + @property + @pulumi.getter(name="createdAt") + def created_at(self) -> str: + return pulumi.get(self, "created_at") + + @property + @pulumi.getter(name="customerId") + def customer_id(self) -> str: + return pulumi.get(self, "customer_id") + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of this resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + return pulumi.get(self, "name") + + @property + @pulumi.getter + def type(self) -> str: + return pulumi.get(self, "type") + + @property + @pulumi.getter(name="updatedAt") + def updated_at(self) -> str: + return pulumi.get(self, "updated_at") + + @property + @pulumi.getter + def version(self) -> int: + return pulumi.get(self, "version") + + @pulumi.output_type class GetTlsConfigurationDnsRecordResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_fastly/provider.py b/sdk/python/pulumi_fastly/provider.py index a2566850..3379b688 100644 --- a/sdk/python/pulumi_fastly/provider.py +++ b/sdk/python/pulumi_fastly/provider.py @@ -24,7 +24,8 @@ def __init__(__self__, *, :param pulumi.Input[bool] force_http2: Set this to `true` to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to `api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS handshakes. Default: `false` - :param pulumi.Input[bool] no_auth: Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + :param pulumi.Input[bool] no_auth: Set to `true` if your configuration only consumes data sources that do not require authentication, such as + `fastly_ip_ranges` """ if api_key is not None: pulumi.set(__self__, "api_key", api_key) @@ -77,7 +78,8 @@ def force_http2(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="noAuth") def no_auth(self) -> Optional[pulumi.Input[bool]]: """ - Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + Set to `true` if your configuration only consumes data sources that do not require authentication, such as + `fastly_ip_ranges` """ return pulumi.get(self, "no_auth") @@ -109,7 +111,8 @@ def __init__(__self__, :param pulumi.Input[bool] force_http2: Set this to `true` to disable HTTP/1.x fallback mechanism that the underlying Go library will attempt upon connection to `api.fastly.com:443` by default. This may slightly improve the provider's performance and reduce unnecessary TLS handshakes. Default: `false` - :param pulumi.Input[bool] no_auth: Set this to `true` if you only need data source that does not require authentication such as `fastly_ip_ranges` + :param pulumi.Input[bool] no_auth: Set to `true` if your configuration only consumes data sources that do not require authentication, such as + `fastly_ip_ranges` """ ... @overload diff --git a/sdk/python/pulumi_fastly/service_authorization.py b/sdk/python/pulumi_fastly/service_authorization.py new file mode 100644 index 00000000..b9c61c58 --- /dev/null +++ b/sdk/python/pulumi_fastly/service_authorization.py @@ -0,0 +1,300 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['ServiceAuthorizationArgs', 'ServiceAuthorization'] + +@pulumi.input_type +class ServiceAuthorizationArgs: + def __init__(__self__, *, + permission: pulumi.Input[str], + service_id: pulumi.Input[str], + user_id: pulumi.Input[str]): + """ + The set of arguments for constructing a ServiceAuthorization resource. + :param pulumi.Input[str] permission: The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + :param pulumi.Input[str] service_id: The ID of the service to grant permissions for. + :param pulumi.Input[str] user_id: The ID of the user which will receive the granted permissions. + """ + pulumi.set(__self__, "permission", permission) + pulumi.set(__self__, "service_id", service_id) + pulumi.set(__self__, "user_id", user_id) + + @property + @pulumi.getter + def permission(self) -> pulumi.Input[str]: + """ + The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + """ + return pulumi.get(self, "permission") + + @permission.setter + def permission(self, value: pulumi.Input[str]): + pulumi.set(self, "permission", value) + + @property + @pulumi.getter(name="serviceId") + def service_id(self) -> pulumi.Input[str]: + """ + The ID of the service to grant permissions for. + """ + return pulumi.get(self, "service_id") + + @service_id.setter + def service_id(self, value: pulumi.Input[str]): + pulumi.set(self, "service_id", value) + + @property + @pulumi.getter(name="userId") + def user_id(self) -> pulumi.Input[str]: + """ + The ID of the user which will receive the granted permissions. + """ + return pulumi.get(self, "user_id") + + @user_id.setter + def user_id(self, value: pulumi.Input[str]): + pulumi.set(self, "user_id", value) + + +@pulumi.input_type +class _ServiceAuthorizationState: + def __init__(__self__, *, + permission: Optional[pulumi.Input[str]] = None, + service_id: Optional[pulumi.Input[str]] = None, + user_id: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering ServiceAuthorization resources. + :param pulumi.Input[str] permission: The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + :param pulumi.Input[str] service_id: The ID of the service to grant permissions for. + :param pulumi.Input[str] user_id: The ID of the user which will receive the granted permissions. + """ + if permission is not None: + pulumi.set(__self__, "permission", permission) + if service_id is not None: + pulumi.set(__self__, "service_id", service_id) + if user_id is not None: + pulumi.set(__self__, "user_id", user_id) + + @property + @pulumi.getter + def permission(self) -> Optional[pulumi.Input[str]]: + """ + The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + """ + return pulumi.get(self, "permission") + + @permission.setter + def permission(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "permission", value) + + @property + @pulumi.getter(name="serviceId") + def service_id(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the service to grant permissions for. + """ + return pulumi.get(self, "service_id") + + @service_id.setter + def service_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_id", value) + + @property + @pulumi.getter(name="userId") + def user_id(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the user which will receive the granted permissions. + """ + return pulumi.get(self, "user_id") + + @user_id.setter + def user_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "user_id", value) + + +class ServiceAuthorization(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + permission: Optional[pulumi.Input[str]] = None, + service_id: Optional[pulumi.Input[str]] = None, + user_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Configures authorization with granular permissions to services. Users can be granted rights for services on different levels. + + The Service Authorization resource requires a user id, service id and an optional permission. + + ## Example Usage + + Basic usage: + + ```python + import pulumi + import pulumi_fastly as fastly + + demo = fastly.ServiceVcl("demo") + #... + user = fastly.User("user") + # ... + auth = fastly.ServiceAuthorization("auth", + service_id=demo.id, + user_id=user.id, + permission="purge_all") + ``` + + ## Import + + A Fastly Service Authorization can be imported using their user ID, e.g. + + ```sh + $ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] permission: The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + :param pulumi.Input[str] service_id: The ID of the service to grant permissions for. + :param pulumi.Input[str] user_id: The ID of the user which will receive the granted permissions. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ServiceAuthorizationArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Configures authorization with granular permissions to services. Users can be granted rights for services on different levels. + + The Service Authorization resource requires a user id, service id and an optional permission. + + ## Example Usage + + Basic usage: + + ```python + import pulumi + import pulumi_fastly as fastly + + demo = fastly.ServiceVcl("demo") + #... + user = fastly.User("user") + # ... + auth = fastly.ServiceAuthorization("auth", + service_id=demo.id, + user_id=user.id, + permission="purge_all") + ``` + + ## Import + + A Fastly Service Authorization can be imported using their user ID, e.g. + + ```sh + $ pulumi import fastly:index/serviceAuthorization:ServiceAuthorization demo xxxxxxxxxxxxxxxxxxxx + ``` + + :param str resource_name: The name of the resource. + :param ServiceAuthorizationArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ServiceAuthorizationArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + permission: Optional[pulumi.Input[str]] = None, + service_id: Optional[pulumi.Input[str]] = None, + user_id: Optional[pulumi.Input[str]] = None, + __props__=None): + if opts is None: + opts = pulumi.ResourceOptions() + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.version is None: + opts.version = _utilities.get_version() + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ServiceAuthorizationArgs.__new__(ServiceAuthorizationArgs) + + if permission is None and not opts.urn: + raise TypeError("Missing required property 'permission'") + __props__.__dict__["permission"] = permission + if service_id is None and not opts.urn: + raise TypeError("Missing required property 'service_id'") + __props__.__dict__["service_id"] = service_id + if user_id is None and not opts.urn: + raise TypeError("Missing required property 'user_id'") + __props__.__dict__["user_id"] = user_id + super(ServiceAuthorization, __self__).__init__( + 'fastly:index/serviceAuthorization:ServiceAuthorization', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + permission: Optional[pulumi.Input[str]] = None, + service_id: Optional[pulumi.Input[str]] = None, + user_id: Optional[pulumi.Input[str]] = None) -> 'ServiceAuthorization': + """ + Get an existing ServiceAuthorization resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] permission: The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + :param pulumi.Input[str] service_id: The ID of the service to grant permissions for. + :param pulumi.Input[str] user_id: The ID of the user which will receive the granted permissions. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ServiceAuthorizationState.__new__(_ServiceAuthorizationState) + + __props__.__dict__["permission"] = permission + __props__.__dict__["service_id"] = service_id + __props__.__dict__["user_id"] = user_id + return ServiceAuthorization(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def permission(self) -> pulumi.Output[str]: + """ + The permissions to grant the user. Can be `full`, `read_only`, `purge_select` or `purge_all`. + """ + return pulumi.get(self, "permission") + + @property + @pulumi.getter(name="serviceId") + def service_id(self) -> pulumi.Output[str]: + """ + The ID of the service to grant permissions for. + """ + return pulumi.get(self, "service_id") + + @property + @pulumi.getter(name="userId") + def user_id(self) -> pulumi.Output[str]: + """ + The ID of the user which will receive the granted permissions. + """ + return pulumi.get(self, "user_id") + diff --git a/sdk/python/pulumi_fastly/service_compute.py b/sdk/python/pulumi_fastly/service_compute.py index c4be481e..ee4c28b3 100644 --- a/sdk/python/pulumi_fastly/service_compute.py +++ b/sdk/python/pulumi_fastly/service_compute.py @@ -20,12 +20,8 @@ def __init__(__self__, *, activate: Optional[pulumi.Input[bool]] = None, backends: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeBackendArgs']]]] = None, comment: Optional[pulumi.Input[str]] = None, - default_host: Optional[pulumi.Input[str]] = None, - default_ttl: Optional[pulumi.Input[int]] = None, dictionaries: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDictionaryArgs']]]] = None, - directors: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDirectorArgs']]]] = None, force_destroy: Optional[pulumi.Input[bool]] = None, - healthchecks: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeHealthcheckArgs']]]] = None, logging_bigqueries: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingBigqueryArgs']]]] = None, logging_blobstorages: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingBlobstorageArgs']]]] = None, logging_cloudfiles: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingCloudfileArgs']]]] = None, @@ -53,8 +49,6 @@ def __init__(__self__, *, logging_sumologics: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingSumologicArgs']]]] = None, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingSyslogArgs']]]] = None, name: Optional[pulumi.Input[str]] = None, - stale_if_error: Optional[pulumi.Input[bool]] = None, - stale_if_error_ttl: Optional[pulumi.Input[int]] = None, version_comment: Optional[pulumi.Input[str]] = None): """ The set of arguments for constructing a ServiceCompute resource. @@ -62,12 +56,8 @@ def __init__(__self__, *, :param pulumi.Input['ServiceComputePackageArgs'] package: The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) :param pulumi.Input[bool] activate: Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true` :param pulumi.Input[str] comment: Description field for the service. Default `Managed by Terraform` - :param pulumi.Input[str] default_host: The default hostname - :param pulumi.Input[int] default_ttl: The default Time-to-live (TTL) for requests :param pulumi.Input[bool] force_destroy: Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false` :param pulumi.Input[str] name: The unique name for the Service to create - :param pulumi.Input[bool] stale_if_error: Enables serving a stale object if there is an error - :param pulumi.Input[int] stale_if_error_ttl: The default time-to-live (TTL) for serving the stale object for the version :param pulumi.Input[str] version_comment: Description field for the version """ pulumi.set(__self__, "domains", domains) @@ -78,18 +68,10 @@ def __init__(__self__, *, pulumi.set(__self__, "backends", backends) if comment is not None: pulumi.set(__self__, "comment", comment) - if default_host is not None: - pulumi.set(__self__, "default_host", default_host) - if default_ttl is not None: - pulumi.set(__self__, "default_ttl", default_ttl) if dictionaries is not None: pulumi.set(__self__, "dictionaries", dictionaries) - if directors is not None: - pulumi.set(__self__, "directors", directors) if force_destroy is not None: pulumi.set(__self__, "force_destroy", force_destroy) - if healthchecks is not None: - pulumi.set(__self__, "healthchecks", healthchecks) if logging_bigqueries is not None: pulumi.set(__self__, "logging_bigqueries", logging_bigqueries) if logging_blobstorages is not None: @@ -144,10 +126,6 @@ def __init__(__self__, *, pulumi.set(__self__, "logging_syslogs", logging_syslogs) if name is not None: pulumi.set(__self__, "name", name) - if stale_if_error is not None: - pulumi.set(__self__, "stale_if_error", stale_if_error) - if stale_if_error_ttl is not None: - pulumi.set(__self__, "stale_if_error_ttl", stale_if_error_ttl) if version_comment is not None: pulumi.set(__self__, "version_comment", version_comment) @@ -208,30 +186,6 @@ def comment(self) -> Optional[pulumi.Input[str]]: def comment(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "comment", value) - @property - @pulumi.getter(name="defaultHost") - def default_host(self) -> Optional[pulumi.Input[str]]: - """ - The default hostname - """ - return pulumi.get(self, "default_host") - - @default_host.setter - def default_host(self, value: Optional[pulumi.Input[str]]): - pulumi.set(self, "default_host", value) - - @property - @pulumi.getter(name="defaultTtl") - def default_ttl(self) -> Optional[pulumi.Input[int]]: - """ - The default Time-to-live (TTL) for requests - """ - return pulumi.get(self, "default_ttl") - - @default_ttl.setter - def default_ttl(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "default_ttl", value) - @property @pulumi.getter def dictionaries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDictionaryArgs']]]]: @@ -241,15 +195,6 @@ def dictionaries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceCo def dictionaries(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDictionaryArgs']]]]): pulumi.set(self, "dictionaries", value) - @property - @pulumi.getter - def directors(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDirectorArgs']]]]: - return pulumi.get(self, "directors") - - @directors.setter - def directors(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDirectorArgs']]]]): - pulumi.set(self, "directors", value) - @property @pulumi.getter(name="forceDestroy") def force_destroy(self) -> Optional[pulumi.Input[bool]]: @@ -262,15 +207,6 @@ def force_destroy(self) -> Optional[pulumi.Input[bool]]: def force_destroy(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "force_destroy", value) - @property - @pulumi.getter - def healthchecks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeHealthcheckArgs']]]]: - return pulumi.get(self, "healthchecks") - - @healthchecks.setter - def healthchecks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeHealthcheckArgs']]]]): - pulumi.set(self, "healthchecks", value) - @property @pulumi.getter(name="loggingBigqueries") def logging_bigqueries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingBigqueryArgs']]]]: @@ -517,30 +453,6 @@ def name(self) -> Optional[pulumi.Input[str]]: def name(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "name", value) - @property - @pulumi.getter(name="staleIfError") - def stale_if_error(self) -> Optional[pulumi.Input[bool]]: - """ - Enables serving a stale object if there is an error - """ - return pulumi.get(self, "stale_if_error") - - @stale_if_error.setter - def stale_if_error(self, value: Optional[pulumi.Input[bool]]): - pulumi.set(self, "stale_if_error", value) - - @property - @pulumi.getter(name="staleIfErrorTtl") - def stale_if_error_ttl(self) -> Optional[pulumi.Input[int]]: - """ - The default time-to-live (TTL) for serving the stale object for the version - """ - return pulumi.get(self, "stale_if_error_ttl") - - @stale_if_error_ttl.setter - def stale_if_error_ttl(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "stale_if_error_ttl", value) - @property @pulumi.getter(name="versionComment") def version_comment(self) -> Optional[pulumi.Input[str]]: @@ -562,13 +474,9 @@ def __init__(__self__, *, backends: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeBackendArgs']]]] = None, cloned_version: Optional[pulumi.Input[int]] = None, comment: Optional[pulumi.Input[str]] = None, - default_host: Optional[pulumi.Input[str]] = None, - default_ttl: Optional[pulumi.Input[int]] = None, dictionaries: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDictionaryArgs']]]] = None, - directors: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDirectorArgs']]]] = None, domains: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDomainArgs']]]] = None, force_destroy: Optional[pulumi.Input[bool]] = None, - healthchecks: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeHealthcheckArgs']]]] = None, logging_bigqueries: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingBigqueryArgs']]]] = None, logging_blobstorages: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingBlobstorageArgs']]]] = None, logging_cloudfiles: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingCloudfileArgs']]]] = None, @@ -597,8 +505,6 @@ def __init__(__self__, *, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingSyslogArgs']]]] = None, name: Optional[pulumi.Input[str]] = None, package: Optional[pulumi.Input['ServiceComputePackageArgs']] = None, - stale_if_error: Optional[pulumi.Input[bool]] = None, - stale_if_error_ttl: Optional[pulumi.Input[int]] = None, version_comment: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering ServiceCompute resources. @@ -606,14 +512,10 @@ def __init__(__self__, *, :param pulumi.Input[int] active_version: The currently active version of your Fastly Service :param pulumi.Input[int] cloned_version: The latest cloned version by the provider :param pulumi.Input[str] comment: Description field for the service. Default `Managed by Terraform` - :param pulumi.Input[str] default_host: The default hostname - :param pulumi.Input[int] default_ttl: The default Time-to-live (TTL) for requests :param pulumi.Input[Sequence[pulumi.Input['ServiceComputeDomainArgs']]] domains: A set of Domain names to serve as entry points for your Service :param pulumi.Input[bool] force_destroy: Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false` :param pulumi.Input[str] name: The unique name for the Service to create :param pulumi.Input['ServiceComputePackageArgs'] package: The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) - :param pulumi.Input[bool] stale_if_error: Enables serving a stale object if there is an error - :param pulumi.Input[int] stale_if_error_ttl: The default time-to-live (TTL) for serving the stale object for the version :param pulumi.Input[str] version_comment: Description field for the version """ if activate is not None: @@ -626,20 +528,12 @@ def __init__(__self__, *, pulumi.set(__self__, "cloned_version", cloned_version) if comment is not None: pulumi.set(__self__, "comment", comment) - if default_host is not None: - pulumi.set(__self__, "default_host", default_host) - if default_ttl is not None: - pulumi.set(__self__, "default_ttl", default_ttl) if dictionaries is not None: pulumi.set(__self__, "dictionaries", dictionaries) - if directors is not None: - pulumi.set(__self__, "directors", directors) if domains is not None: pulumi.set(__self__, "domains", domains) if force_destroy is not None: pulumi.set(__self__, "force_destroy", force_destroy) - if healthchecks is not None: - pulumi.set(__self__, "healthchecks", healthchecks) if logging_bigqueries is not None: pulumi.set(__self__, "logging_bigqueries", logging_bigqueries) if logging_blobstorages is not None: @@ -696,10 +590,6 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if package is not None: pulumi.set(__self__, "package", package) - if stale_if_error is not None: - pulumi.set(__self__, "stale_if_error", stale_if_error) - if stale_if_error_ttl is not None: - pulumi.set(__self__, "stale_if_error_ttl", stale_if_error_ttl) if version_comment is not None: pulumi.set(__self__, "version_comment", version_comment) @@ -760,30 +650,6 @@ def comment(self) -> Optional[pulumi.Input[str]]: def comment(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "comment", value) - @property - @pulumi.getter(name="defaultHost") - def default_host(self) -> Optional[pulumi.Input[str]]: - """ - The default hostname - """ - return pulumi.get(self, "default_host") - - @default_host.setter - def default_host(self, value: Optional[pulumi.Input[str]]): - pulumi.set(self, "default_host", value) - - @property - @pulumi.getter(name="defaultTtl") - def default_ttl(self) -> Optional[pulumi.Input[int]]: - """ - The default Time-to-live (TTL) for requests - """ - return pulumi.get(self, "default_ttl") - - @default_ttl.setter - def default_ttl(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "default_ttl", value) - @property @pulumi.getter def dictionaries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDictionaryArgs']]]]: @@ -793,15 +659,6 @@ def dictionaries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceCo def dictionaries(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDictionaryArgs']]]]): pulumi.set(self, "dictionaries", value) - @property - @pulumi.getter - def directors(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDirectorArgs']]]]: - return pulumi.get(self, "directors") - - @directors.setter - def directors(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDirectorArgs']]]]): - pulumi.set(self, "directors", value) - @property @pulumi.getter def domains(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeDomainArgs']]]]: @@ -826,15 +683,6 @@ def force_destroy(self) -> Optional[pulumi.Input[bool]]: def force_destroy(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "force_destroy", value) - @property - @pulumi.getter - def healthchecks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeHealthcheckArgs']]]]: - return pulumi.get(self, "healthchecks") - - @healthchecks.setter - def healthchecks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeHealthcheckArgs']]]]): - pulumi.set(self, "healthchecks", value) - @property @pulumi.getter(name="loggingBigqueries") def logging_bigqueries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceComputeLoggingBigqueryArgs']]]]: @@ -1093,30 +941,6 @@ def package(self) -> Optional[pulumi.Input['ServiceComputePackageArgs']]: def package(self, value: Optional[pulumi.Input['ServiceComputePackageArgs']]): pulumi.set(self, "package", value) - @property - @pulumi.getter(name="staleIfError") - def stale_if_error(self) -> Optional[pulumi.Input[bool]]: - """ - Enables serving a stale object if there is an error - """ - return pulumi.get(self, "stale_if_error") - - @stale_if_error.setter - def stale_if_error(self, value: Optional[pulumi.Input[bool]]): - pulumi.set(self, "stale_if_error", value) - - @property - @pulumi.getter(name="staleIfErrorTtl") - def stale_if_error_ttl(self) -> Optional[pulumi.Input[int]]: - """ - The default time-to-live (TTL) for serving the stale object for the version - """ - return pulumi.get(self, "stale_if_error_ttl") - - @stale_if_error_ttl.setter - def stale_if_error_ttl(self, value: Optional[pulumi.Input[int]]): - pulumi.set(self, "stale_if_error_ttl", value) - @property @pulumi.getter(name="versionComment") def version_comment(self) -> Optional[pulumi.Input[str]]: @@ -1138,13 +962,9 @@ def __init__(__self__, activate: Optional[pulumi.Input[bool]] = None, backends: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeBackendArgs']]]]] = None, comment: Optional[pulumi.Input[str]] = None, - default_host: Optional[pulumi.Input[str]] = None, - default_ttl: Optional[pulumi.Input[int]] = None, dictionaries: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDictionaryArgs']]]]] = None, - directors: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDirectorArgs']]]]] = None, domains: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDomainArgs']]]]] = None, force_destroy: Optional[pulumi.Input[bool]] = None, - healthchecks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeHealthcheckArgs']]]]] = None, logging_bigqueries: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingBigqueryArgs']]]]] = None, logging_blobstorages: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingBlobstorageArgs']]]]] = None, logging_cloudfiles: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingCloudfileArgs']]]]] = None, @@ -1173,8 +993,6 @@ def __init__(__self__, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingSyslogArgs']]]]] = None, name: Optional[pulumi.Input[str]] = None, package: Optional[pulumi.Input[pulumi.InputType['ServiceComputePackageArgs']]] = None, - stale_if_error: Optional[pulumi.Input[bool]] = None, - stale_if_error_ttl: Optional[pulumi.Input[int]] = None, version_comment: Optional[pulumi.Input[str]] = None, __props__=None): """ @@ -1196,14 +1014,10 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[bool] activate: Conditionally prevents the Service from being activated. The apply step will continue to create a new draft version but will not activate it if this is set to `false`. Default `true` :param pulumi.Input[str] comment: Description field for the service. Default `Managed by Terraform` - :param pulumi.Input[str] default_host: The default hostname - :param pulumi.Input[int] default_ttl: The default Time-to-live (TTL) for requests :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDomainArgs']]]] domains: A set of Domain names to serve as entry points for your Service :param pulumi.Input[bool] force_destroy: Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false` :param pulumi.Input[str] name: The unique name for the Service to create :param pulumi.Input[pulumi.InputType['ServiceComputePackageArgs']] package: The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) - :param pulumi.Input[bool] stale_if_error: Enables serving a stale object if there is an error - :param pulumi.Input[int] stale_if_error_ttl: The default time-to-live (TTL) for serving the stale object for the version :param pulumi.Input[str] version_comment: Description field for the version """ ... @@ -1245,13 +1059,9 @@ def _internal_init(__self__, activate: Optional[pulumi.Input[bool]] = None, backends: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeBackendArgs']]]]] = None, comment: Optional[pulumi.Input[str]] = None, - default_host: Optional[pulumi.Input[str]] = None, - default_ttl: Optional[pulumi.Input[int]] = None, dictionaries: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDictionaryArgs']]]]] = None, - directors: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDirectorArgs']]]]] = None, domains: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDomainArgs']]]]] = None, force_destroy: Optional[pulumi.Input[bool]] = None, - healthchecks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeHealthcheckArgs']]]]] = None, logging_bigqueries: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingBigqueryArgs']]]]] = None, logging_blobstorages: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingBlobstorageArgs']]]]] = None, logging_cloudfiles: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingCloudfileArgs']]]]] = None, @@ -1280,8 +1090,6 @@ def _internal_init(__self__, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingSyslogArgs']]]]] = None, name: Optional[pulumi.Input[str]] = None, package: Optional[pulumi.Input[pulumi.InputType['ServiceComputePackageArgs']]] = None, - stale_if_error: Optional[pulumi.Input[bool]] = None, - stale_if_error_ttl: Optional[pulumi.Input[int]] = None, version_comment: Optional[pulumi.Input[str]] = None, __props__=None): if opts is None: @@ -1298,15 +1106,11 @@ def _internal_init(__self__, __props__.__dict__["activate"] = activate __props__.__dict__["backends"] = backends __props__.__dict__["comment"] = comment - __props__.__dict__["default_host"] = default_host - __props__.__dict__["default_ttl"] = default_ttl __props__.__dict__["dictionaries"] = dictionaries - __props__.__dict__["directors"] = directors if domains is None and not opts.urn: raise TypeError("Missing required property 'domains'") __props__.__dict__["domains"] = domains __props__.__dict__["force_destroy"] = force_destroy - __props__.__dict__["healthchecks"] = healthchecks __props__.__dict__["logging_bigqueries"] = logging_bigqueries __props__.__dict__["logging_blobstorages"] = logging_blobstorages __props__.__dict__["logging_cloudfiles"] = logging_cloudfiles @@ -1337,8 +1141,6 @@ def _internal_init(__self__, if package is None and not opts.urn: raise TypeError("Missing required property 'package'") __props__.__dict__["package"] = package - __props__.__dict__["stale_if_error"] = stale_if_error - __props__.__dict__["stale_if_error_ttl"] = stale_if_error_ttl __props__.__dict__["version_comment"] = version_comment __props__.__dict__["active_version"] = None __props__.__dict__["cloned_version"] = None @@ -1357,13 +1159,9 @@ def get(resource_name: str, backends: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeBackendArgs']]]]] = None, cloned_version: Optional[pulumi.Input[int]] = None, comment: Optional[pulumi.Input[str]] = None, - default_host: Optional[pulumi.Input[str]] = None, - default_ttl: Optional[pulumi.Input[int]] = None, dictionaries: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDictionaryArgs']]]]] = None, - directors: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDirectorArgs']]]]] = None, domains: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDomainArgs']]]]] = None, force_destroy: Optional[pulumi.Input[bool]] = None, - healthchecks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeHealthcheckArgs']]]]] = None, logging_bigqueries: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingBigqueryArgs']]]]] = None, logging_blobstorages: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingBlobstorageArgs']]]]] = None, logging_cloudfiles: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingCloudfileArgs']]]]] = None, @@ -1392,8 +1190,6 @@ def get(resource_name: str, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeLoggingSyslogArgs']]]]] = None, name: Optional[pulumi.Input[str]] = None, package: Optional[pulumi.Input[pulumi.InputType['ServiceComputePackageArgs']]] = None, - stale_if_error: Optional[pulumi.Input[bool]] = None, - stale_if_error_ttl: Optional[pulumi.Input[int]] = None, version_comment: Optional[pulumi.Input[str]] = None) -> 'ServiceCompute': """ Get an existing ServiceCompute resource's state with the given name, id, and optional extra @@ -1406,14 +1202,10 @@ def get(resource_name: str, :param pulumi.Input[int] active_version: The currently active version of your Fastly Service :param pulumi.Input[int] cloned_version: The latest cloned version by the provider :param pulumi.Input[str] comment: Description field for the service. Default `Managed by Terraform` - :param pulumi.Input[str] default_host: The default hostname - :param pulumi.Input[int] default_ttl: The default Time-to-live (TTL) for requests :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceComputeDomainArgs']]]] domains: A set of Domain names to serve as entry points for your Service :param pulumi.Input[bool] force_destroy: Services that are active cannot be destroyed. In order to destroy the Service, set `force_destroy` to `true`. Default `false` :param pulumi.Input[str] name: The unique name for the Service to create :param pulumi.Input[pulumi.InputType['ServiceComputePackageArgs']] package: The `package` block supports uploading or modifying Wasm packages for use in a Fastly Compute@Edge service. See Fastly's documentation on [Compute@Edge](https://developer.fastly.com/learning/compute/) - :param pulumi.Input[bool] stale_if_error: Enables serving a stale object if there is an error - :param pulumi.Input[int] stale_if_error_ttl: The default time-to-live (TTL) for serving the stale object for the version :param pulumi.Input[str] version_comment: Description field for the version """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -1425,13 +1217,9 @@ def get(resource_name: str, __props__.__dict__["backends"] = backends __props__.__dict__["cloned_version"] = cloned_version __props__.__dict__["comment"] = comment - __props__.__dict__["default_host"] = default_host - __props__.__dict__["default_ttl"] = default_ttl __props__.__dict__["dictionaries"] = dictionaries - __props__.__dict__["directors"] = directors __props__.__dict__["domains"] = domains __props__.__dict__["force_destroy"] = force_destroy - __props__.__dict__["healthchecks"] = healthchecks __props__.__dict__["logging_bigqueries"] = logging_bigqueries __props__.__dict__["logging_blobstorages"] = logging_blobstorages __props__.__dict__["logging_cloudfiles"] = logging_cloudfiles @@ -1460,8 +1248,6 @@ def get(resource_name: str, __props__.__dict__["logging_syslogs"] = logging_syslogs __props__.__dict__["name"] = name __props__.__dict__["package"] = package - __props__.__dict__["stale_if_error"] = stale_if_error - __props__.__dict__["stale_if_error_ttl"] = stale_if_error_ttl __props__.__dict__["version_comment"] = version_comment return ServiceCompute(resource_name, opts=opts, __props__=__props__) @@ -1502,32 +1288,11 @@ def comment(self) -> pulumi.Output[Optional[str]]: """ return pulumi.get(self, "comment") - @property - @pulumi.getter(name="defaultHost") - def default_host(self) -> pulumi.Output[Optional[str]]: - """ - The default hostname - """ - return pulumi.get(self, "default_host") - - @property - @pulumi.getter(name="defaultTtl") - def default_ttl(self) -> pulumi.Output[Optional[int]]: - """ - The default Time-to-live (TTL) for requests - """ - return pulumi.get(self, "default_ttl") - @property @pulumi.getter def dictionaries(self) -> pulumi.Output[Optional[Sequence['outputs.ServiceComputeDictionary']]]: return pulumi.get(self, "dictionaries") - @property - @pulumi.getter - def directors(self) -> pulumi.Output[Optional[Sequence['outputs.ServiceComputeDirector']]]: - return pulumi.get(self, "directors") - @property @pulumi.getter def domains(self) -> pulumi.Output[Sequence['outputs.ServiceComputeDomain']]: @@ -1544,11 +1309,6 @@ def force_destroy(self) -> pulumi.Output[Optional[bool]]: """ return pulumi.get(self, "force_destroy") - @property - @pulumi.getter - def healthchecks(self) -> pulumi.Output[Optional[Sequence['outputs.ServiceComputeHealthcheck']]]: - return pulumi.get(self, "healthchecks") - @property @pulumi.getter(name="loggingBigqueries") def logging_bigqueries(self) -> pulumi.Output[Optional[Sequence['outputs.ServiceComputeLoggingBigquery']]]: @@ -1695,22 +1455,6 @@ def package(self) -> pulumi.Output['outputs.ServiceComputePackage']: """ return pulumi.get(self, "package") - @property - @pulumi.getter(name="staleIfError") - def stale_if_error(self) -> pulumi.Output[Optional[bool]]: - """ - Enables serving a stale object if there is an error - """ - return pulumi.get(self, "stale_if_error") - - @property - @pulumi.getter(name="staleIfErrorTtl") - def stale_if_error_ttl(self) -> pulumi.Output[Optional[int]]: - """ - The default time-to-live (TTL) for serving the stale object for the version - """ - return pulumi.get(self, "stale_if_error_ttl") - @property @pulumi.getter(name="versionComment") def version_comment(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_fastly/service_vcl.py b/sdk/python/pulumi_fastly/service_vcl.py index 2cc9416d..0e362f0c 100644 --- a/sdk/python/pulumi_fastly/service_vcl.py +++ b/sdk/python/pulumi_fastly/service_vcl.py @@ -1429,191 +1429,6 @@ def __init__(__self__, traffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname] on their documentation site for guidance. - ## Example Usage - - Basic usage: - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="localhost", - port=80, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True) - ``` - - Basic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header: - - ```python - import pulumi - import pulumi_aws as aws - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="demo.notexample.com.s3-website-us-west-2.amazonaws.com", - name="AWS S3 hosting", - override_host="demo.notexample.com.s3-website-us-west-2.amazonaws.com", - port=80, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True, - gzips=[fastly.ServiceVclGzipArgs( - content_types=[ - "text/html", - "text/css", - ], - extensions=[ - "css", - "js", - ], - name="file extensions and content types", - )], - headers=[fastly.ServiceVclHeaderArgs( - action="delete", - destination="http.x-amz-request-id", - name="remove x-amz-request-id", - type="cache", - )]) - website = aws.s3.Bucket("website", - acl="public-read", - website=aws.s3.BucketWebsiteArgs( - error_document="error.html", - index_document="index.html", - )) - ``` - - Basic usage with [custom - VCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/): - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="localhost", - port=80, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True, - vcls=[ - fastly.ServiceVclVclArgs( - content=(lambda path: open(path).read())(f"{path['module']}/my_custom_main.vcl"), - main=True, - name="my_custom_main_vcl", - ), - fastly.ServiceVclVclArgs( - content=(lambda path: open(path).read())(f"{path['module']}/my_custom_library.vcl"), - name="my_custom_library_vcl", - ), - ]) - ``` - - Basic usage with [custom Director](https://developer.fastly.com/reference/api/load-balancing/directors/director/): - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[ - fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="origin1", - port=80, - ), - fastly.ServiceVclBackendArgs( - address="127.0.0.2", - name="origin2", - port=80, - ), - ], - directors=[fastly.ServiceVclDirectorArgs( - backends=[ - "origin1", - "origin2", - ], - name="mydirector", - quorum=0, - type=3, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True) - ``` - - Basic usage with [Web Application Firewall](https://developer.fastly.com/reference/api/waf/): - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="origin1", - port=80, - )], - conditions=[ - fastly.ServiceVclConditionArgs( - name="WAF_Prefetch", - statement="req.backend.is_origin", - type="PREFETCH", - ), - fastly.ServiceVclConditionArgs( - name="WAF_always_false", - statement="false", - type="REQUEST", - ), - ], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="example.com", - )], - force_destroy=True, - response_objects=[fastly.ServiceVclResponseObjectArgs( - content="Forbidden", - content_type="text/html", - name="WAF_Response", - request_condition="WAF_always_false", - response="Forbidden", - status=403, - )], - waf=fastly.ServiceVclWafArgs( - prefetch_condition="WAF_Prefetch", - response_object="WAF_Response", - )) - ``` - - > **Note:** For an AWS S3 Bucket, the Backend address is - `.s3-website-.amazonaws.com`. The `override_host` attribute - should be set to `.s3-website-.amazonaws.com` in the `backend` block. See the - Fastly documentation on [Amazon S3][fastly-s3]. - - [fastly-s3]: https://docs.fastly.com/en/guides/amazon-s3 - [fastly-cname]: https://docs.fastly.com/en/guides/adding-cname-records - [fastly-conditionals]: https://docs.fastly.com/en/guides/using-conditions - [fastly-sumologic]: https://developer.fastly.com/reference/api/logging/sumologic/ - [fastly-gcs]: https://developer.fastly.com/reference/api/logging/gcs/ - ## Import Fastly Services can be imported using their service ID, e.g. @@ -1656,191 +1471,6 @@ def __init__(__self__, traffic to the Fastly service. See Fastly's guide on [Adding CNAME Records][fastly-cname] on their documentation site for guidance. - ## Example Usage - - Basic usage: - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="localhost", - port=80, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True) - ``` - - Basic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header: - - ```python - import pulumi - import pulumi_aws as aws - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="demo.notexample.com.s3-website-us-west-2.amazonaws.com", - name="AWS S3 hosting", - override_host="demo.notexample.com.s3-website-us-west-2.amazonaws.com", - port=80, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True, - gzips=[fastly.ServiceVclGzipArgs( - content_types=[ - "text/html", - "text/css", - ], - extensions=[ - "css", - "js", - ], - name="file extensions and content types", - )], - headers=[fastly.ServiceVclHeaderArgs( - action="delete", - destination="http.x-amz-request-id", - name="remove x-amz-request-id", - type="cache", - )]) - website = aws.s3.Bucket("website", - acl="public-read", - website=aws.s3.BucketWebsiteArgs( - error_document="error.html", - index_document="index.html", - )) - ``` - - Basic usage with [custom - VCL](https://docs.fastly.com/vcl/custom-vcl/uploading-custom-vcl/): - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="localhost", - port=80, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True, - vcls=[ - fastly.ServiceVclVclArgs( - content=(lambda path: open(path).read())(f"{path['module']}/my_custom_main.vcl"), - main=True, - name="my_custom_main_vcl", - ), - fastly.ServiceVclVclArgs( - content=(lambda path: open(path).read())(f"{path['module']}/my_custom_library.vcl"), - name="my_custom_library_vcl", - ), - ]) - ``` - - Basic usage with [custom Director](https://developer.fastly.com/reference/api/load-balancing/directors/director/): - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[ - fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="origin1", - port=80, - ), - fastly.ServiceVclBackendArgs( - address="127.0.0.2", - name="origin2", - port=80, - ), - ], - directors=[fastly.ServiceVclDirectorArgs( - backends=[ - "origin1", - "origin2", - ], - name="mydirector", - quorum=0, - type=3, - )], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="demo.notexample.com", - )], - force_destroy=True) - ``` - - Basic usage with [Web Application Firewall](https://developer.fastly.com/reference/api/waf/): - - ```python - import pulumi - import pulumi_fastly as fastly - - demo = fastly.ServiceVcl("demo", - backends=[fastly.ServiceVclBackendArgs( - address="127.0.0.1", - name="origin1", - port=80, - )], - conditions=[ - fastly.ServiceVclConditionArgs( - name="WAF_Prefetch", - statement="req.backend.is_origin", - type="PREFETCH", - ), - fastly.ServiceVclConditionArgs( - name="WAF_always_false", - statement="false", - type="REQUEST", - ), - ], - domains=[fastly.ServiceVclDomainArgs( - comment="demo", - name="example.com", - )], - force_destroy=True, - response_objects=[fastly.ServiceVclResponseObjectArgs( - content="Forbidden", - content_type="text/html", - name="WAF_Response", - request_condition="WAF_always_false", - response="Forbidden", - status=403, - )], - waf=fastly.ServiceVclWafArgs( - prefetch_condition="WAF_Prefetch", - response_object="WAF_Response", - )) - ``` - - > **Note:** For an AWS S3 Bucket, the Backend address is - `.s3-website-.amazonaws.com`. The `override_host` attribute - should be set to `.s3-website-.amazonaws.com` in the `backend` block. See the - Fastly documentation on [Amazon S3][fastly-s3]. - - [fastly-s3]: https://docs.fastly.com/en/guides/amazon-s3 - [fastly-cname]: https://docs.fastly.com/en/guides/adding-cname-records - [fastly-conditionals]: https://docs.fastly.com/en/guides/using-conditions - [fastly-sumologic]: https://developer.fastly.com/reference/api/logging/sumologic/ - [fastly-gcs]: https://developer.fastly.com/reference/api/logging/gcs/ - ## Import Fastly Services can be imported using their service ID, e.g.