From 4b4bfe0ffad911003658e421f6599b3ebb9183a1 Mon Sep 17 00:00:00 2001 From: aq17 Date: Wed, 19 Apr 2023 13:47:45 -0700 Subject: [PATCH 1/3] make tfgen --- .../bridge-metadata.json | 918 +++ .../cmd/pulumi-resource-fastly/schema.json | 5128 +++-------------- provider/go.mod | 47 +- provider/go.sum | 109 +- provider/resources.go | 11 +- upstream | 2 +- 6 files changed, 1888 insertions(+), 4327 deletions(-) create mode 100644 provider/cmd/pulumi-resource-fastly/bridge-metadata.json diff --git a/provider/cmd/pulumi-resource-fastly/bridge-metadata.json b/provider/cmd/pulumi-resource-fastly/bridge-metadata.json new file mode 100644 index 00000000..5dffd7ab --- /dev/null +++ b/provider/cmd/pulumi-resource-fastly/bridge-metadata.json @@ -0,0 +1,918 @@ +{ + "auto-aliasing": { + "resources": { + "fastly_service_acl_entries": { + "current": "fastly:index/serviceACLEntries:ServiceACLEntries" + }, + "fastly_service_authorization": { + "current": "fastly:index/serviceAuthorization:ServiceAuthorization" + }, + "fastly_service_compute": { + "current": "fastly:index/serviceCompute:ServiceCompute" + }, + "fastly_service_dictionary_items": { + "current": "fastly:index/serviceDictionaryItems:ServiceDictionaryItems" + }, + "fastly_service_dynamic_snippet_content": { + "current": "fastly:index/serviceDynamicSnippetContent:ServiceDynamicSnippetContent" + }, + "fastly_service_vcl": { + "current": "fastly:index/serviceVcl:ServiceVcl" + }, + "fastly_service_waf_configuration": { + "current": "fastly:index/serviceWafConfiguration:ServiceWafConfiguration" + }, + "fastly_tls_activation": { + "current": "fastly:index/tlsActivation:TlsActivation" + }, + "fastly_tls_certificate": { + "current": "fastly:index/tlsCertificate:TlsCertificate" + }, + "fastly_tls_platform_certificate": { + "current": "fastly:index/tlsPlatformCertificate:TlsPlatformCertificate" + }, + "fastly_tls_private_key": { + "current": "fastly:index/tlsPrivateKey:TlsPrivateKey" + }, + "fastly_tls_subscription": { + "current": "fastly:index/tlsSubscription:TlsSubscription" + }, + "fastly_tls_subscription_validation": { + "current": "fastly:index/tlsSubscriptionValidation:TlsSubscriptionValidation" + }, + "fastly_user": { + "current": "fastly:index/user:User" + } + }, + "datasources": { + "fastly_datacenters": { + "current": "fastly:index/getDatacenters:getDatacenters" + }, + "fastly_dictionaries": { + "current": "fastly:index/getDictionaries:getDictionaries" + }, + "fastly_ip_ranges": { + "current": "fastly:index/getFastlyIpRanges:getFastlyIpRanges" + }, + "fastly_services": { + "current": "fastly:index/getServices:getServices" + }, + "fastly_tls_activation": { + "current": "fastly:index/getTlsActivation:getTlsActivation" + }, + "fastly_tls_activation_ids": { + "current": "fastly:index/getTlsActivationIds:getTlsActivationIds" + }, + "fastly_tls_certificate": { + "current": "fastly:index/getTlsCertificate:getTlsCertificate" + }, + "fastly_tls_certificate_ids": { + "current": "fastly:index/getTlsCertificateIds:getTlsCertificateIds" + }, + "fastly_tls_configuration": { + "current": "fastly:index/getTlsConfiguration:getTlsConfiguration" + }, + "fastly_tls_configuration_ids": { + "current": "fastly:index/getTlsConfigurationIds:getTlsConfigurationIds" + }, + "fastly_tls_domain": { + "current": "fastly:index/getTlsDomain:getTlsDomain" + }, + "fastly_tls_platform_certificate": { + "current": "fastly:index/getTlsPlatformCertificate:getTlsPlatformCertificate" + }, + "fastly_tls_platform_certificate_ids": { + "current": "fastly:index/getTlsPlatformCertificateIds:getTlsPlatformCertificateIds" + }, + "fastly_tls_private_key": { + "current": "fastly:index/getTlsPrivateKey:getTlsPrivateKey" + }, + "fastly_tls_private_key_ids": { + "current": "fastly:index/getTlsPrivateKeyIds:getTlsPrivateKeyIds" + }, + "fastly_tls_subscription": { + "current": "fastly:index/getTlsSubscription:getTlsSubscription" + }, + "fastly_tls_subscription_ids": { + "current": "fastly:index/getTlsSubscriptionIds:getTlsSubscriptionIds" + }, + "fastly_waf_rules": { + "current": "fastly:index/getWafRules:getWafRules" + } + } + }, + "renames": { + "resources": { + "fastly:index/serviceACLEntries:ServiceACLEntries": "fastly_service_acl_entries", + "fastly:index/serviceAuthorization:ServiceAuthorization": "fastly_service_authorization", + "fastly:index/serviceCompute:ServiceCompute": "fastly_service_compute", + "fastly:index/serviceDictionaryItems:ServiceDictionaryItems": "fastly_service_dictionary_items", + "fastly:index/serviceDynamicSnippetContent:ServiceDynamicSnippetContent": "fastly_service_dynamic_snippet_content", + "fastly:index/serviceVcl:ServiceVcl": "fastly_service_vcl", + "fastly:index/serviceWafConfiguration:ServiceWafConfiguration": "fastly_service_waf_configuration", + "fastly:index/tlsActivation:TlsActivation": "fastly_tls_activation", + "fastly:index/tlsCertificate:TlsCertificate": "fastly_tls_certificate", + "fastly:index/tlsPlatformCertificate:TlsPlatformCertificate": "fastly_tls_platform_certificate", + "fastly:index/tlsPrivateKey:TlsPrivateKey": "fastly_tls_private_key", + "fastly:index/tlsSubscription:TlsSubscription": "fastly_tls_subscription", + "fastly:index/tlsSubscriptionValidation:TlsSubscriptionValidation": "fastly_tls_subscription_validation", + "fastly:index/user:User": "fastly_user" + }, + "functions": { + "fastly:index/getDatacenters:getDatacenters": "fastly_datacenters", + "fastly:index/getDictionaries:getDictionaries": "fastly_dictionaries", + "fastly:index/getFastlyIpRanges:getFastlyIpRanges": "fastly_ip_ranges", + "fastly:index/getServices:getServices": "fastly_services", + "fastly:index/getTlsActivation:getTlsActivation": "fastly_tls_activation", + "fastly:index/getTlsActivationIds:getTlsActivationIds": "fastly_tls_activation_ids", + "fastly:index/getTlsCertificate:getTlsCertificate": "fastly_tls_certificate", + "fastly:index/getTlsCertificateIds:getTlsCertificateIds": "fastly_tls_certificate_ids", + "fastly:index/getTlsConfiguration:getTlsConfiguration": "fastly_tls_configuration", + "fastly:index/getTlsConfigurationIds:getTlsConfigurationIds": "fastly_tls_configuration_ids", + "fastly:index/getTlsDomain:getTlsDomain": "fastly_tls_domain", + "fastly:index/getTlsPlatformCertificate:getTlsPlatformCertificate": "fastly_tls_platform_certificate", + "fastly:index/getTlsPlatformCertificateIds:getTlsPlatformCertificateIds": "fastly_tls_platform_certificate_ids", + "fastly:index/getTlsPrivateKey:getTlsPrivateKey": "fastly_tls_private_key", + "fastly:index/getTlsPrivateKeyIds:getTlsPrivateKeyIds": "fastly_tls_private_key_ids", + "fastly:index/getTlsSubscription:getTlsSubscription": "fastly_tls_subscription", + "fastly:index/getTlsSubscriptionIds:getTlsSubscriptionIds": "fastly_tls_subscription_ids", + "fastly:index/getWafRules:getWafRules": "fastly_waf_rules" + }, + "renamedProperties": { + "fastly:index/ServiceComputeBackend:ServiceComputeBackend": { + "betweenBytesTimeout": "between_bytes_timeout", + "connectTimeout": "connect_timeout", + "errorThreshold": "error_threshold", + "firstByteTimeout": "first_byte_timeout", + "keepaliveTime": "keepalive_time", + "maxConn": "max_conn", + "maxTlsVersion": "max_tls_version", + "minTlsVersion": "min_tls_version", + "overrideHost": "override_host", + "sslCaCert": "ssl_ca_cert", + "sslCertHostname": "ssl_cert_hostname", + "sslCheckCert": "ssl_check_cert", + "sslCiphers": "ssl_ciphers", + "sslClientCert": "ssl_client_cert", + "sslClientKey": "ssl_client_key", + "sslSniHostname": "ssl_sni_hostname", + "useSsl": "use_ssl" + }, + "fastly:index/ServiceComputeDictionary:ServiceComputeDictionary": { + "dictionaryId": "dictionary_id", + "forceDestroy": "force_destroy", + "writeOnly": "write_only" + }, + "fastly:index/ServiceComputeLoggingBigquery:ServiceComputeLoggingBigquery": { + "accountName": "account_name", + "projectId": "project_id", + "secretKey": "secret_key" + }, + "fastly:index/ServiceComputeLoggingBlobstorage:ServiceComputeLoggingBlobstorage": { + "accountName": "account_name", + "compressionCodec": "compression_codec", + "fileMaxBytes": "file_max_bytes", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "sasToken": "sas_token", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingCloudfile:ServiceComputeLoggingCloudfile": { + "accessKey": "access_key", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingDigitalocean:ServiceComputeLoggingDigitalocean": { + "accessKey": "access_key", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "secretKey": "secret_key", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingElasticsearch:ServiceComputeLoggingElasticsearch": { + "requestMaxBytes": "request_max_bytes", + "requestMaxEntries": "request_max_entries", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname" + }, + "fastly:index/ServiceComputeLoggingFtp:ServiceComputeLoggingFtp": { + "compressionCodec": "compression_codec", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingGc:ServiceComputeLoggingGc": { + "accountName": "account_name", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "secretKey": "secret_key", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingGooglepubsub:ServiceComputeLoggingGooglepubsub": { + "accountName": "account_name", + "projectId": "project_id", + "secretKey": "secret_key" + }, + "fastly:index/ServiceComputeLoggingHttp:ServiceComputeLoggingHttp": { + "contentType": "content_type", + "headerName": "header_name", + "headerValue": "header_value", + "jsonFormat": "json_format", + "messageType": "message_type", + "requestMaxBytes": "request_max_bytes", + "requestMaxEntries": "request_max_entries", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname" + }, + "fastly:index/ServiceComputeLoggingKafka:ServiceComputeLoggingKafka": { + "authMethod": "auth_method", + "compressionCodec": "compression_codec", + "parseLogKeyvals": "parse_log_keyvals", + "requestMaxBytes": "request_max_bytes", + "requiredAcks": "required_acks", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname", + "useTls": "use_tls" + }, + "fastly:index/ServiceComputeLoggingKinese:ServiceComputeLoggingKinese": { + "accessKey": "access_key", + "iamRole": "iam_role", + "secretKey": "secret_key" + }, + "fastly:index/ServiceComputeLoggingLogentry:ServiceComputeLoggingLogentry": { + "useTls": "use_tls" + }, + "fastly:index/ServiceComputeLoggingOpenstack:ServiceComputeLoggingOpenstack": { + "accessKey": "access_key", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingS3:ServiceComputeLoggingS3": { + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "s3AccessKey": "s3_access_key", + "s3IamRole": "s3_iam_role", + "s3SecretKey": "s3_secret_key", + "serverSideEncryption": "server_side_encryption", + "serverSideEncryptionKmsKeyId": "server_side_encryption_kms_key_id", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingSftp:ServiceComputeLoggingSftp": { + "compressionCodec": "compression_codec", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "secretKey": "secret_key", + "sshKnownHosts": "ssh_known_hosts", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceComputeLoggingSplunk:ServiceComputeLoggingSplunk": { + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname", + "useTls": "use_tls" + }, + "fastly:index/ServiceComputeLoggingSumologic:ServiceComputeLoggingSumologic": { + "messageType": "message_type" + }, + "fastly:index/ServiceComputeLoggingSyslog:ServiceComputeLoggingSyslog": { + "messageType": "message_type", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname", + "useTls": "use_tls" + }, + "fastly:index/ServiceComputePackage:ServiceComputePackage": { + "sourceCodeHash": "source_code_hash" + }, + "fastly:index/ServiceVclAcl:ServiceVclAcl": { + "aclId": "acl_id", + "forceDestroy": "force_destroy" + }, + "fastly:index/ServiceVclBackend:ServiceVclBackend": { + "autoLoadbalance": "auto_loadbalance", + "betweenBytesTimeout": "between_bytes_timeout", + "connectTimeout": "connect_timeout", + "errorThreshold": "error_threshold", + "firstByteTimeout": "first_byte_timeout", + "keepaliveTime": "keepalive_time", + "maxConn": "max_conn", + "maxTlsVersion": "max_tls_version", + "minTlsVersion": "min_tls_version", + "overrideHost": "override_host", + "requestCondition": "request_condition", + "sslCaCert": "ssl_ca_cert", + "sslCertHostname": "ssl_cert_hostname", + "sslCheckCert": "ssl_check_cert", + "sslCiphers": "ssl_ciphers", + "sslClientCert": "ssl_client_cert", + "sslClientKey": "ssl_client_key", + "sslSniHostname": "ssl_sni_hostname", + "useSsl": "use_ssl" + }, + "fastly:index/ServiceVclCacheSetting:ServiceVclCacheSetting": { + "cacheCondition": "cache_condition", + "staleTtl": "stale_ttl" + }, + "fastly:index/ServiceVclDictionary:ServiceVclDictionary": { + "dictionaryId": "dictionary_id", + "forceDestroy": "force_destroy", + "writeOnly": "write_only" + }, + "fastly:index/ServiceVclDynamicsnippet:ServiceVclDynamicsnippet": { + "snippetId": "snippet_id" + }, + "fastly:index/ServiceVclGzip:ServiceVclGzip": { + "cacheCondition": "cache_condition", + "contentTypes": "content_types" + }, + "fastly:index/ServiceVclHeader:ServiceVclHeader": { + "cacheCondition": "cache_condition", + "ignoreIfSet": "ignore_if_set", + "requestCondition": "request_condition", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclHealthcheck:ServiceVclHealthcheck": { + "checkInterval": "check_interval", + "expectedResponse": "expected_response", + "httpVersion": "http_version" + }, + "fastly:index/ServiceVclLoggingBigquery:ServiceVclLoggingBigquery": { + "accountName": "account_name", + "projectId": "project_id", + "responseCondition": "response_condition", + "secretKey": "secret_key" + }, + "fastly:index/ServiceVclLoggingBlobstorage:ServiceVclLoggingBlobstorage": { + "accountName": "account_name", + "compressionCodec": "compression_codec", + "fileMaxBytes": "file_max_bytes", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "responseCondition": "response_condition", + "sasToken": "sas_token", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingCloudfile:ServiceVclLoggingCloudfile": { + "accessKey": "access_key", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "responseCondition": "response_condition", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingDatadog:ServiceVclLoggingDatadog": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingDigitalocean:ServiceVclLoggingDigitalocean": { + "accessKey": "access_key", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "responseCondition": "response_condition", + "secretKey": "secret_key", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingElasticsearch:ServiceVclLoggingElasticsearch": { + "formatVersion": "format_version", + "requestMaxBytes": "request_max_bytes", + "requestMaxEntries": "request_max_entries", + "responseCondition": "response_condition", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname" + }, + "fastly:index/ServiceVclLoggingFtp:ServiceVclLoggingFtp": { + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "responseCondition": "response_condition", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingGc:ServiceVclLoggingGc": { + "accountName": "account_name", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "responseCondition": "response_condition", + "secretKey": "secret_key", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingGooglepubsub:ServiceVclLoggingGooglepubsub": { + "accountName": "account_name", + "formatVersion": "format_version", + "projectId": "project_id", + "responseCondition": "response_condition", + "secretKey": "secret_key" + }, + "fastly:index/ServiceVclLoggingHerokus:ServiceVclLoggingHerokus": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingHoneycomb:ServiceVclLoggingHoneycomb": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingHttp:ServiceVclLoggingHttp": { + "contentType": "content_type", + "formatVersion": "format_version", + "headerName": "header_name", + "headerValue": "header_value", + "jsonFormat": "json_format", + "messageType": "message_type", + "requestMaxBytes": "request_max_bytes", + "requestMaxEntries": "request_max_entries", + "responseCondition": "response_condition", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname" + }, + "fastly:index/ServiceVclLoggingKafka:ServiceVclLoggingKafka": { + "authMethod": "auth_method", + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "parseLogKeyvals": "parse_log_keyvals", + "requestMaxBytes": "request_max_bytes", + "requiredAcks": "required_acks", + "responseCondition": "response_condition", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname", + "useTls": "use_tls" + }, + "fastly:index/ServiceVclLoggingKinese:ServiceVclLoggingKinese": { + "accessKey": "access_key", + "formatVersion": "format_version", + "iamRole": "iam_role", + "responseCondition": "response_condition", + "secretKey": "secret_key" + }, + "fastly:index/ServiceVclLoggingLogentry:ServiceVclLoggingLogentry": { + "formatVersion": "format_version", + "responseCondition": "response_condition", + "useTls": "use_tls" + }, + "fastly:index/ServiceVclLoggingLoggly:ServiceVclLoggingLoggly": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingLogshuttle:ServiceVclLoggingLogshuttle": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingNewrelic:ServiceVclLoggingNewrelic": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingOpenstack:ServiceVclLoggingOpenstack": { + "accessKey": "access_key", + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "responseCondition": "response_condition", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingPapertrail:ServiceVclLoggingPapertrail": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingS3:ServiceVclLoggingS3": { + "bucketName": "bucket_name", + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "responseCondition": "response_condition", + "s3AccessKey": "s3_access_key", + "s3IamRole": "s3_iam_role", + "s3SecretKey": "s3_secret_key", + "serverSideEncryption": "server_side_encryption", + "serverSideEncryptionKmsKeyId": "server_side_encryption_kms_key_id", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingScalyr:ServiceVclLoggingScalyr": { + "formatVersion": "format_version", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingSftp:ServiceVclLoggingSftp": { + "compressionCodec": "compression_codec", + "formatVersion": "format_version", + "gzipLevel": "gzip_level", + "messageType": "message_type", + "publicKey": "public_key", + "responseCondition": "response_condition", + "secretKey": "secret_key", + "sshKnownHosts": "ssh_known_hosts", + "timestampFormat": "timestamp_format" + }, + "fastly:index/ServiceVclLoggingSplunk:ServiceVclLoggingSplunk": { + "formatVersion": "format_version", + "responseCondition": "response_condition", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname", + "useTls": "use_tls" + }, + "fastly:index/ServiceVclLoggingSumologic:ServiceVclLoggingSumologic": { + "formatVersion": "format_version", + "messageType": "message_type", + "responseCondition": "response_condition" + }, + "fastly:index/ServiceVclLoggingSyslog:ServiceVclLoggingSyslog": { + "formatVersion": "format_version", + "messageType": "message_type", + "responseCondition": "response_condition", + "tlsCaCert": "tls_ca_cert", + "tlsClientCert": "tls_client_cert", + "tlsClientKey": "tls_client_key", + "tlsHostname": "tls_hostname", + "useTls": "use_tls" + }, + "fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement": { + "brotliCompression": "brotli_compression", + "domainInspector": "domain_inspector", + "imageOptimizer": "image_optimizer", + "originInspector": "origin_inspector" + }, + "fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter": { + "clientKey": "client_key", + "featureRevision": "feature_revision", + "httpMethods": "http_methods", + "loggerType": "logger_type", + "penaltyBoxDuration": "penalty_box_duration", + "ratelimiterId": "ratelimiter_id", + "responseObjectName": "response_object_name", + "rpsLimit": "rps_limit", + "uriDictionaryName": "uri_dictionary_name", + "windowSize": "window_size" + }, + "fastly:index/ServiceVclRateLimiterResponse:ServiceVclRateLimiterResponse": { + "contentType": "content_type" + }, + "fastly:index/ServiceVclRequestSetting:ServiceVclRequestSetting": { + "bypassBusyWait": "bypass_busy_wait", + "defaultHost": "default_host", + "forceMiss": "force_miss", + "forceSsl": "force_ssl", + "geoHeaders": "geo_headers", + "hashKeys": "hash_keys", + "maxStaleAge": "max_stale_age", + "requestCondition": "request_condition", + "timerSupport": "timer_support" + }, + "fastly:index/ServiceVclResponseObject:ServiceVclResponseObject": { + "cacheCondition": "cache_condition", + "contentType": "content_type", + "requestCondition": "request_condition" + }, + "fastly:index/ServiceVclWaf:ServiceVclWaf": { + "prefetchCondition": "prefetch_condition", + "responseObject": "response_object", + "wafId": "waf_id" + }, + "fastly:index/ServiceWafConfigurationRule:ServiceWafConfigurationRule": { + "modsecRuleId": "modsec_rule_id" + }, + "fastly:index/ServiceWafConfigurationRuleExclusion:ServiceWafConfigurationRuleExclusion": { + "exclusionType": "exclusion_type", + "modsecRuleIds": "modsec_rule_ids" + }, + "fastly:index/TlsSubscriptionManagedDnsChallenge:TlsSubscriptionManagedDnsChallenge": { + "recordName": "record_name", + "recordType": "record_type", + "recordValue": "record_value" + }, + "fastly:index/TlsSubscriptionManagedHttpChallenge:TlsSubscriptionManagedHttpChallenge": { + "recordName": "record_name", + "recordType": "record_type", + "recordValues": "record_values" + }, + "fastly:index/getDictionaries:getDictionaries": { + "serviceId": "service_id", + "serviceVersion": "service_version" + }, + "fastly:index/getDictionariesDictionary:getDictionariesDictionary": { + "writeOnly": "write_only" + }, + "fastly:index/getFastlyIpRanges:getFastlyIpRanges": { + "cidrBlocks": "cidr_blocks", + "ipv6CidrBlocks": "ipv6_cidr_blocks" + }, + "fastly:index/getServicesDetail:getServicesDetail": { + "createdAt": "created_at", + "customerId": "customer_id", + "updatedAt": "updated_at" + }, + "fastly:index/getTlsActivation:getTlsActivation": { + "certificateId": "certificate_id", + "configurationId": "configuration_id", + "createdAt": "created_at" + }, + "fastly:index/getTlsActivationIds:getTlsActivationIds": { + "certificateId": "certificate_id" + }, + "fastly:index/getTlsCertificate:getTlsCertificate": { + "createdAt": "created_at", + "issuedTo": "issued_to", + "serialNumber": "serial_number", + "signatureAlgorithm": "signature_algorithm", + "updatedAt": "updated_at" + }, + "fastly:index/getTlsConfiguration:getTlsConfiguration": { + "createdAt": "created_at", + "dnsRecords": "dns_records", + "httpProtocols": "http_protocols", + "tlsProtocols": "tls_protocols", + "tlsService": "tls_service", + "updatedAt": "updated_at" + }, + "fastly:index/getTlsConfigurationDnsRecord:getTlsConfigurationDnsRecord": { + "recordType": "record_type", + "recordValue": "record_value" + }, + "fastly:index/getTlsDomain:getTlsDomain": { + "tlsActivationIds": "tls_activation_ids", + "tlsCertificateIds": "tls_certificate_ids", + "tlsSubscriptionIds": "tls_subscription_ids" + }, + "fastly:index/getTlsPlatformCertificate:getTlsPlatformCertificate": { + "configurationId": "configuration_id", + "createdAt": "created_at", + "notAfter": "not_after", + "notBefore": "not_before", + "updatedAt": "updated_at" + }, + "fastly:index/getTlsPrivateKey:getTlsPrivateKey": { + "createdAt": "created_at", + "keyLength": "key_length", + "keyType": "key_type", + "publicKeySha1": "public_key_sha1" + }, + "fastly:index/getTlsSubscription:getTlsSubscription": { + "certificateAuthority": "certificate_authority", + "commonName": "common_name", + "configurationId": "configuration_id", + "createdAt": "created_at", + "updatedAt": "updated_at" + }, + "fastly:index/getWafRules:getWafRules": { + "excludeModsecRuleIds": "exclude_modsec_rule_ids", + "modsecRuleIds": "modsec_rule_ids" + }, + "fastly:index/getWafRulesRule:getWafRulesRule": { + "latestRevisionNumber": "latest_revision_number", + "modsecRuleId": "modsec_rule_id" + }, + "fastly:index/serviceACLEntries:ServiceACLEntries": { + "aclId": "acl_id", + "entries": "entry", + "manageEntries": "manage_entries", + "serviceId": "service_id" + }, + "fastly:index/serviceAuthorization:ServiceAuthorization": { + "serviceId": "service_id", + "userId": "user_id" + }, + "fastly:index/serviceCompute:ServiceCompute": { + "activeVersion": "active_version", + "backends": "backend", + "clonedVersion": "cloned_version", + "dictionaries": "dictionary", + "domains": "domain", + "forceDestroy": "force_destroy", + "forceRefresh": "force_refresh", + "loggingBigqueries": "logging_bigquery", + "loggingBlobstorages": "logging_blobstorage", + "loggingCloudfiles": "logging_cloudfiles", + "loggingDatadogs": "logging_datadog", + "loggingDigitaloceans": "logging_digitalocean", + "loggingElasticsearches": "logging_elasticsearch", + "loggingFtps": "logging_ftp", + "loggingGcs": "logging_gcs", + "loggingGooglepubsubs": "logging_googlepubsub", + "loggingHeroku": "logging_heroku", + "loggingHoneycombs": "logging_honeycomb", + "loggingHttps": "logging_https", + "loggingKafkas": "logging_kafka", + "loggingKineses": "logging_kinesis", + "loggingLogentries": "logging_logentries", + "loggingLogglies": "logging_loggly", + "loggingLogshuttles": "logging_logshuttle", + "loggingNewrelics": "logging_newrelic", + "loggingOpenstacks": "logging_openstack", + "loggingPapertrails": "logging_papertrail", + "loggingS3s": "logging_s3", + "loggingScalyrs": "logging_scalyr", + "loggingSftps": "logging_sftp", + "loggingSplunks": "logging_splunk", + "loggingSumologics": "logging_sumologic", + "loggingSyslogs": "logging_syslog", + "productEnablement": "product_enablement", + "versionComment": "version_comment" + }, + "fastly:index/serviceDictionaryItems:ServiceDictionaryItems": { + "dictionaryId": "dictionary_id", + "manageItems": "manage_items", + "serviceId": "service_id" + }, + "fastly:index/serviceDynamicSnippetContent:ServiceDynamicSnippetContent": { + "manageSnippets": "manage_snippets", + "serviceId": "service_id", + "snippetId": "snippet_id" + }, + "fastly:index/serviceVcl:ServiceVcl": { + "acls": "acl", + "activeVersion": "active_version", + "backends": "backend", + "cacheSettings": "cache_setting", + "clonedVersion": "cloned_version", + "conditions": "condition", + "defaultHost": "default_host", + "defaultTtl": "default_ttl", + "dictionaries": "dictionary", + "directors": "director", + "domains": "domain", + "dynamicsnippets": "dynamicsnippet", + "forceDestroy": "force_destroy", + "forceRefresh": "force_refresh", + "gzips": "gzip", + "headers": "header", + "healthchecks": "healthcheck", + "loggingBigqueries": "logging_bigquery", + "loggingBlobstorages": "logging_blobstorage", + "loggingCloudfiles": "logging_cloudfiles", + "loggingDatadogs": "logging_datadog", + "loggingDigitaloceans": "logging_digitalocean", + "loggingElasticsearches": "logging_elasticsearch", + "loggingFtps": "logging_ftp", + "loggingGcs": "logging_gcs", + "loggingGooglepubsubs": "logging_googlepubsub", + "loggingHerokus": "logging_heroku", + "loggingHoneycombs": "logging_honeycomb", + "loggingHttps": "logging_https", + "loggingKafkas": "logging_kafka", + "loggingKineses": "logging_kinesis", + "loggingLogentries": "logging_logentries", + "loggingLogglies": "logging_loggly", + "loggingLogshuttles": "logging_logshuttle", + "loggingNewrelics": "logging_newrelic", + "loggingOpenstacks": "logging_openstack", + "loggingPapertrails": "logging_papertrail", + "loggingS3s": "logging_s3", + "loggingScalyrs": "logging_scalyr", + "loggingSftps": "logging_sftp", + "loggingSplunks": "logging_splunk", + "loggingSumologics": "logging_sumologic", + "loggingSyslogs": "logging_syslog", + "productEnablement": "product_enablement", + "rateLimiters": "rate_limiter", + "requestSettings": "request_setting", + "responseObjects": "response_object", + "snippets": "snippet", + "staleIfError": "stale_if_error", + "staleIfErrorTtl": "stale_if_error_ttl", + "vcls": "vcl", + "versionComment": "version_comment" + }, + "fastly:index/serviceWafConfiguration:ServiceWafConfiguration": { + "allowedHttpVersions": "allowed_http_versions", + "allowedMethods": "allowed_methods", + "allowedRequestContentType": "allowed_request_content_type", + "allowedRequestContentTypeCharset": "allowed_request_content_type_charset", + "argLength": "arg_length", + "argNameLength": "arg_name_length", + "clonedVersion": "cloned_version", + "combinedFileSizes": "combined_file_sizes", + "criticalAnomalyScore": "critical_anomaly_score", + "crsValidateUtf8Encoding": "crs_validate_utf8_encoding", + "errorAnomalyScore": "error_anomaly_score", + "highRiskCountryCodes": "high_risk_country_codes", + "httpViolationScoreThreshold": "http_violation_score_threshold", + "inboundAnomalyScoreThreshold": "inbound_anomaly_score_threshold", + "lfiScoreThreshold": "lfi_score_threshold", + "maxFileSize": "max_file_size", + "maxNumArgs": "max_num_args", + "noticeAnomalyScore": "notice_anomaly_score", + "paranoiaLevel": "paranoia_level", + "phpInjectionScoreThreshold": "php_injection_score_threshold", + "rceScoreThreshold": "rce_score_threshold", + "restrictedExtensions": "restricted_extensions", + "restrictedHeaders": "restricted_headers", + "rfiScoreThreshold": "rfi_score_threshold", + "ruleExclusions": "rule_exclusion", + "rules": "rule", + "sessionFixationScoreThreshold": "session_fixation_score_threshold", + "sqlInjectionScoreThreshold": "sql_injection_score_threshold", + "totalArgLength": "total_arg_length", + "wafId": "waf_id", + "warningAnomalyScore": "warning_anomaly_score", + "xssScoreThreshold": "xss_score_threshold" + }, + "fastly:index/tlsActivation:TlsActivation": { + "certificateId": "certificate_id", + "configurationId": "configuration_id", + "createdAt": "created_at" + }, + "fastly:index/tlsCertificate:TlsCertificate": { + "certificateBody": "certificate_body", + "createdAt": "created_at", + "issuedTo": "issued_to", + "serialNumber": "serial_number", + "signatureAlgorithm": "signature_algorithm", + "updatedAt": "updated_at" + }, + "fastly:index/tlsPlatformCertificate:TlsPlatformCertificate": { + "allowUntrustedRoot": "allow_untrusted_root", + "certificateBody": "certificate_body", + "configurationId": "configuration_id", + "createdAt": "created_at", + "intermediatesBlob": "intermediates_blob", + "notAfter": "not_after", + "notBefore": "not_before", + "updatedAt": "updated_at" + }, + "fastly:index/tlsPrivateKey:TlsPrivateKey": { + "createdAt": "created_at", + "keyLength": "key_length", + "keyPem": "key_pem", + "keyType": "key_type", + "publicKeySha1": "public_key_sha1" + }, + "fastly:index/tlsSubscription:TlsSubscription": { + "certificateAuthority": "certificate_authority", + "certificateId": "certificate_id", + "commonName": "common_name", + "configurationId": "configuration_id", + "createdAt": "created_at", + "forceDestroy": "force_destroy", + "forceUpdate": "force_update", + "managedDnsChallenge": "managed_dns_challenge", + "managedDnsChallenges": "managed_dns_challenges", + "managedHttpChallenges": "managed_http_challenges", + "updatedAt": "updated_at" + }, + "fastly:index/tlsSubscriptionValidation:TlsSubscriptionValidation": { + "subscriptionId": "subscription_id" + }, + "fastly:index:Provider": { + "apiKey": "api_key", + "baseUrl": "base_url", + "forceHttp2": "force_http2", + "noAuth": "no_auth" + } + }, + "renamedConfigProperties": { + "apiKey": "api_key", + "baseUrl": "base_url", + "forceHttp2": "force_http2", + "noAuth": "no_auth" + } + } +} \ 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 d2dd1f6f..76f51d7f 100644 --- a/provider/cmd/pulumi-resource-fastly/schema.json +++ b/provider/cmd/pulumi-resource-fastly/schema.json @@ -75,48 +75,23 @@ "properties": { "comment": { "type": "string", - "description": "A personal freeform descriptive note\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A personal freeform descriptive note\n" }, "id": { "type": "string", - "description": "The unique ID of the entry\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The unique ID of the entry\n" }, "ip": { "type": "string", - "description": "An IP address that is the focus for the ACL\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "An IP address that is the focus for the ACL\n" }, "negated": { "type": "boolean", - "description": "A boolean that will negate the match if true\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A boolean that will negate the match if true\n" }, "subnet": { "type": "string", - "description": "An optional subnet mask applied to the IP address\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "An optional subnet mask applied to the IP address\n" } }, "type": "object", @@ -136,212 +111,97 @@ "properties": { "address": { "type": "string", - "description": "An IPv4, hostname, or IPv6 address for the Backend\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "An IPv4, hostname, or IPv6 address for the Backend\n" }, "betweenBytesTimeout": { "type": "integer", - "description": "How long to wait between bytes in milliseconds. Default `10000`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long to wait between bytes in milliseconds. Default `10000`\n" }, "connectTimeout": { "type": "integer", - "description": "How long to wait for a timeout in milliseconds. Default `1000`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long to wait for a timeout in milliseconds. Default `1000`\n" }, "errorThreshold": { "type": "integer", - "description": "Number of errors to allow before the Backend is marked as down. Default `0`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Number of errors to allow before the Backend is marked as down. Default `0`\n" }, "firstByteTimeout": { "type": "integer", - "description": "How long to wait for the first bytes in milliseconds. Default `15000`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long to wait for the first bytes in milliseconds. Default `15000`\n" }, "healthcheck": { "type": "string", - "description": "Name of a defined `healthcheck` to assign to this backend\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of a defined `healthcheck` to assign to this backend\n" }, "keepaliveTime": { "type": "integer", - "description": "How long in seconds to keep a persistent connection to the backend between requests.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long in seconds to keep a persistent connection to the backend between requests.\n" }, "maxConn": { "type": "integer", - "description": "Maximum number of connections for this Backend. Default `200`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum number of connections for this Backend. Default `200`\n" }, "maxTlsVersion": { "type": "string", - "description": "Maximum allowed TLS version on SSL connections to this backend.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum allowed TLS version on SSL connections to this backend.\n" }, "minTlsVersion": { "type": "string", - "description": "Minimum allowed TLS version on SSL connections to this backend.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Minimum allowed TLS version on SSL connections to this backend.\n" }, "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 - } - } + "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" }, "overrideHost": { "type": "string", - "description": "The hostname to override the Host header\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The hostname to override the Host header\n" }, "port": { "type": "integer", - "description": "The port number on which the Backend responds. Default `80`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port number on which the Backend responds. Default `80`\n" }, "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 - } - } + "description": "The POP of the shield designated to reduce inbound load. Valid values for `shield` are included in the `GET /datacenters` API response\n" }, "sslCaCert": { "type": "string", - "description": "CA certificate attached to origin.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "CA certificate attached to origin.\n" }, "sslCertHostname": { "type": "string", - "description": "Configure certificate validation. Does not affect SNI at all\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Configure certificate validation. Does not affect SNI at all\n" }, "sslCheckCert": { "type": "boolean", - "description": "Be strict about checking SSL certs. Default `true`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Be strict about checking SSL certs. Default `true`\n" }, "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 - } - } + "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" }, "sslClientCert": { "type": "string", "description": "Client certificate attached to origin. Used when connecting to the backend\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "sslClientKey": { "type": "string", "description": "Client key attached to origin. Used when connecting to the backend\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "sslSniHostname": { "type": "string", - "description": "Configure SNI in the TLS handshake. Does not affect cert validation at all\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Configure SNI in the TLS handshake. Does not affect cert validation at all\n" }, "useSsl": { "type": "boolean", - "description": "Whether or not to use SSL to reach the Backend. Default `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether or not to use SSL to reach the Backend. Default `false`\n" }, "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 - } - } + "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" } }, "type": "object", @@ -354,38 +214,18 @@ "properties": { "dictionaryId": { "type": "string", - "description": "The ID of the dictionary\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of the dictionary\n" }, "forceDestroy": { "type": "boolean", - "description": "Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n" }, "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 - } - } + "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" }, "writeOnly": { - "type": "boolean", - "language": { - "python": { - "mapCase": false - } - } + "type": "boolean" } }, "type": "object", @@ -405,21 +245,11 @@ "properties": { "comment": { "type": "string", - "description": "An optional comment about the Domain.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "An optional comment about the Domain.\n" }, "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 - } - } + "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" } }, "type": "object", @@ -431,77 +261,37 @@ "properties": { "accountName": { "type": "string", - "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n" }, "dataset": { "type": "string", - "description": "The ID of your BigQuery dataset\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your BigQuery dataset\n" }, "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 - } - }, "secret": true }, "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 - } - } + "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" }, "projectId": { "type": "string", - "description": "The ID of your GCP project\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your GCP project\n" }, "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 - } - }, "secret": true }, "table": { "type": "string", - "description": "The ID of your BigQuery table\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your BigQuery table\n" }, "template": { "type": "string", - "description": "BigQuery table name suffix template\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "BigQuery table name suffix template\n" } }, "type": "object", @@ -518,112 +308,52 @@ "properties": { "accountName": { "type": "string", - "description": "The unique Azure Blob Storage namespace in which your data objects are stored\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The unique Azure Blob Storage namespace in which your data objects are stored\n" }, "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 - } - } + "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" }, "container": { "type": "string", - "description": "The name of the Azure Blob Storage container in which to store logs\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the Azure Blob Storage container in which to store logs\n" }, "fileMaxBytes": { "type": "integer", - "description": "Maximum size of an uploaded log file, if non-zero.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum size of an uploaded log file, if non-zero.\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred in seconds. Default `3600`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred in seconds. Default `3600`\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "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 - } - }, "secret": true }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" } }, "type": "object", @@ -639,111 +369,51 @@ "accessKey": { "type": "string", "description": "Your Cloud File account access key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "bucketName": { "type": "string", - "description": "The name of your Cloud Files container\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of your Cloud Files container\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "path": { "type": "string", - "description": "The path to upload logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The path to upload logs to\n" }, "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 - } - } + "description": "How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n" }, "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 - } - } + "description": "The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "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 - } - } + "description": "The region to stream logs to. One of: DFW (Dallas), ORD (Chicago), IAD (Northern Virginia), LON (London), SYD (Sydney), HKG (Hong Kong)\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "user": { "type": "string", - "description": "The username for your Cloud Files account\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for your Cloud Files account\n" } }, "type": "object", @@ -758,30 +428,15 @@ "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 - } - } + "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" }, "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 - } - } + "description": "The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n" }, "token": { "type": "string", "description": "The API key from your Datadog account\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -796,112 +451,52 @@ "accessKey": { "type": "string", "description": "Your DigitalOcean Spaces account access key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "bucketName": { "type": "string", - "description": "The name of the DigitalOcean Space\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the DigitalOcean Space\n" }, "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 - } - } + "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" }, "domain": { "type": "string", - "description": "The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "path": { "type": "string", - "description": "The path to upload logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The path to upload logs to\n" }, "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 - } - } + "description": "How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "secretKey": { "type": "string", "description": "Your DigitalOcean Spaces account secret key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" } }, "type": "object", @@ -916,113 +511,53 @@ "properties": { "index": { "type": "string", - "description": "The name of the Elasticsearch index to send documents (logs) to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the Elasticsearch index to send documents (logs) to\n" }, "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 - } - } + "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" }, "password": { "type": "string", "description": "BasicAuth password for Elasticsearch\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "pipeline": { "type": "string", - "description": "The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n" }, "requestMaxBytes": { "type": "integer", - "description": "The maximum number of logs sent in one request. Defaults to `0` for unbounded\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of logs sent in one request. Defaults to `0` for unbounded\n" }, "requestMaxEntries": { "type": "integer", - "description": "The maximum number of bytes sent in one request. Defaults to `0` for unbounded\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of bytes sent in one request. Defaults to `0` for unbounded\n" }, "tlsCaCert": { "type": "string", - "description": "A secure certificate to authenticate the server with. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A secure certificate to authenticate the server with. Must be in PEM format\n" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "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" }, "url": { "type": "string", - "description": "The Elasticsearch URL to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Elasticsearch URL to stream logs to\n" }, "user": { "type": "string", - "description": "BasicAuth username for Elasticsearch\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "BasicAuth username for Elasticsearch\n" } }, "type": "object", @@ -1036,112 +571,52 @@ "properties": { "address": { "type": "string", - "description": "The FTP address to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The FTP address to stream logs to\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "password": { "type": "string", "description": "The password for the server (for anonymous use an email address)\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "description": "The path to upload log files to. If the path ends in `/` then it is treated as a directory\n" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds (Default `3600`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds (Default `3600`)\n" }, "port": { "type": "integer", - "description": "The port number. Default: `21`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port number. Default: `21`\n" }, "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 - } - } + "description": "The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "user": { "type": "string", - "description": "The username for the server (can be `anonymous`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for the server (can be `anonymous`)\n" } }, "type": "object", @@ -1157,103 +632,48 @@ "properties": { "accountName": { "type": "string", - "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n" }, "bucketName": { "type": "string", - "description": "The name of the bucket in which to store the logs\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the bucket in which to store the logs\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds (Default 3600)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds (Default 3600)\n" }, "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 - } - }, "secret": true }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "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 - } - } + "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" } }, "type": "object", @@ -1266,58 +686,28 @@ "properties": { "accountName": { "type": "string", - "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n" }, "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 - } - } + "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" }, "projectId": { "type": "string", - "description": "The ID of your Google Cloud Platform project\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your Google Cloud Platform project\n" }, "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 - } - }, "secret": true }, "topic": { "type": "string", - "description": "The Google Cloud Pub/Sub topic to which logs will be published\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Google Cloud Pub/Sub topic to which logs will be published\n" }, "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 - } - } + "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" } }, "type": "object", @@ -1333,31 +723,16 @@ "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 - } - } + "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" }, "token": { "type": "string", "description": "The token to use for authentication (https://www.heroku.com/docs/customer-token-authentication-token/)\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "url": { "type": "string", - "description": "The URL to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The URL to stream logs to\n" } }, "type": "object", @@ -1371,30 +746,15 @@ "properties": { "dataset": { "type": "string", - "description": "The Honeycomb Dataset you want to log to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Honeycomb Dataset you want to log to\n" }, "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 - } - } + "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" }, "token": { "type": "string", "description": "The Write Key from the Account page of your Honeycomb account\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -1409,130 +769,60 @@ "properties": { "contentType": { "type": "string", - "description": "Value of the `Content-Type` header sent with the request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Value of the `Content-Type` header sent with the request\n" }, "headerName": { "type": "string", - "description": "Custom header sent with the request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Custom header sent with the request\n" }, "headerValue": { "type": "string", - "description": "Value of the custom header sent with the request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Value of the custom header sent with the request\n" }, "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 - } - } + "description": "Formats log entries as JSON. Can be either disabled (`0`), array of json (`1`), or newline delimited json (`2`)\n" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "method": { "type": "string", - "description": "HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n" }, "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 - } - } + "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" }, "requestMaxBytes": { "type": "integer", - "description": "The maximum number of bytes sent in one request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of bytes sent in one request\n" }, "requestMaxEntries": { "type": "integer", - "description": "The maximum number of logs sent in one request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of logs sent in one request\n" }, "tlsCaCert": { "type": "string", - "description": "A secure certificate to authenticate the server with. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A secure certificate to authenticate the server with. Must be in PEM format\n" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "tlsHostname": { "type": "string", - "description": "Used during the TLS handshake to validate the certificate\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Used during the TLS handshake to validate the certificate\n" }, "url": { "type": "string", - "description": "URL that log data will be sent to. Must use the https protocol\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "URL that log data will be sent to. Must use the https protocol\n" } }, "type": "object", @@ -1545,140 +835,65 @@ "properties": { "authMethod": { "type": "string", - "description": "SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n" }, "brokers": { "type": "string", - "description": "A comma-separated list of IP addresses or hostnames of Kafka brokers\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A comma-separated list of IP addresses or hostnames of Kafka brokers\n" }, "compressionCodec": { "type": "string", - "description": "The codec used for compression of your logs. One of: `gzip`, `snappy`, `lz4`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The codec used for compression of your logs. One of: `gzip`, `snappy`, `lz4`\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Enables parsing of key=value tuples from the beginning of a logline, turning them into record headers\n" }, "password": { "type": "string", "description": "SASL Pass\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "requestMaxBytes": { "type": "integer", - "description": "Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n" }, "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` Wait for all in-sync replicas to respond\n", - "language": { - "python": { - "mapCase": false - } - } + "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` Wait for all in-sync replicas to respond\n" }, "tlsCaCert": { "type": "string", - "description": "A secure certificate to authenticate the server with. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A secure certificate to authenticate the server with. Must be in PEM format\n" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "description": "The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n" }, "topic": { "type": "string", - "description": "The Kafka topic to send logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Kafka topic to send logs to\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging. Can be either `true` or `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging. Can be either `true` or `false`\n" }, "user": { "type": "string", - "description": "SASL User\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "SASL User\n" } }, "type": "object", @@ -1693,58 +908,28 @@ "accessKey": { "type": "string", "description": "The AWS access key to be used to write to the stream\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "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" }, "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 - } - } + "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" }, "region": { "type": "string", - "description": "The AWS region the stream resides in. (Default: `us-east-1`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The AWS region the stream resides in. (Default: `us-east-1`)\n" }, "secretKey": { "type": "string", "description": "The AWS secret access key to authenticate with\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "topic": { "type": "string", - "description": "The Kinesis stream name\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Kinesis stream name\n" } }, "type": "object", @@ -1757,39 +942,19 @@ "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 - } - } + "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" }, "port": { "type": "integer", - "description": "The port number configured in Logentries\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port number configured in Logentries\n" }, "token": { "type": "string", - "description": "Use token based authentication (https://logentries.com/doc/input-token/)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Use token based authentication (https://logentries.com/doc/input-token/)\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging\n" } }, "type": "object", @@ -1802,21 +967,11 @@ "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 - } - } + "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" }, "token": { "type": "string", "description": "The token to use for authentication (https://www.loggly.com/docs/customer-token-authentication-token/).\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -1830,31 +985,16 @@ "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 - } - } + "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" }, "token": { "type": "string", "description": "The data authentication token associated with this endpoint\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "url": { "type": "string", - "description": "Your Log Shuttle endpoint URL\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Your Log Shuttle endpoint URL\n" } }, "type": "object", @@ -1868,30 +1008,15 @@ "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 - } - } + "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" }, "region": { "type": "string", - "description": "The region that log data will be sent to. Default: `US`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The region that log data will be sent to. Default: `US`\n" }, "token": { "type": "string", "description": "The Insert API key from the Account page of your New Relic account\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -1906,111 +1031,51 @@ "accessKey": { "type": "string", "description": "Your OpenStack account access key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "bucketName": { "type": "string", - "description": "The name of your OpenStack container\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of your OpenStack container\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "url": { "type": "string", - "description": "Your OpenStack auth url\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Your OpenStack auth url\n" }, "user": { "type": "string", - "description": "The username for your OpenStack account\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for your OpenStack account\n" } }, "type": "object", @@ -2026,30 +1091,15 @@ "properties": { "address": { "type": "string", - "description": "The address of the Papertrail endpoint\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The address of the Papertrail endpoint\n" }, "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 - } - } + "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" }, "port": { "type": "integer", - "description": "The port associated with the address where the Papertrail endpoint can be accessed\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port associated with the address where the Papertrail endpoint can be accessed\n" } }, "type": "object", @@ -2063,158 +1113,73 @@ "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 - } - } + "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" }, "bucketName": { "type": "string", - "description": "The name of the bucket in which to store the logs\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the bucket in which to store the logs\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "redundancy": { "type": "string", - "description": "The S3 storage class (redundancy level). Should be one of: `standard`, `intelligent_tiering`, `standard_ia`, `onezone_ia`, `glacier`, `glacier_ir`, `deep_archive`, or `reduced_redundancy`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The S3 storage class (redundancy level). Should be one of: `standard`, `intelligent_tiering`, `standard_ia`, `onezone_ia`, `glacier`, `glacier_ir`, `deep_archive`, or `reduced_redundancy`\n" }, "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 - } - }, "secret": true }, "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 - } - } + "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" }, "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 - } - }, "secret": true }, "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 - } - } + "description": "Specify what type of server side encryption should be used. Can be either `AES256` or `aws:kms`\n" }, "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 - } - } + "description": "Optional server-side KMS Key Id. Must be set if server*side*encryption is set to `aws:kms`\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" } }, "type": "object", @@ -2227,30 +1192,15 @@ "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 - } - } + "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" }, "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 - } - } + "description": "The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n" }, "token": { "type": "string", "description": "The token to use for authentication (https://www.scalyr.com/keys)\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -2264,131 +1214,61 @@ "properties": { "address": { "type": "string", - "description": "The SFTP address to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The SFTP address to stream logs to\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - }, "secret": true }, "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 - } - } + "description": "The path to upload log files to. If the path ends in `/` then it is treated as a directory\n" }, "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 - } - } + "description": "How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n" }, "port": { "type": "integer", - "description": "The port the SFTP service listens on. (Default: `22`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port the SFTP service listens on. (Default: `22`)\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "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 - } - }, "secret": true }, "sshKnownHosts": { "type": "string", - "description": "A list of host keys for all hosts we can connect to over SFTP\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A list of host keys for all hosts we can connect to over SFTP\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "user": { "type": "string", - "description": "The username for the server\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for the server\n" } }, "type": "object", @@ -2404,77 +1284,37 @@ "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 - } - } + "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" }, "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 - } - } + "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" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format.\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format.\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "description": "The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n" }, "token": { "type": "string", "description": "The Splunk token to be used for authentication\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "url": { "type": "string", - "description": "The Splunk URL to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Splunk URL to stream logs to\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging. Default: `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging. Default: `false`\n" } }, "type": "object", @@ -2488,30 +1328,15 @@ "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "url": { "type": "string", - "description": "The URL to Sumologic collector endpoint\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The URL to Sumologic collector endpoint\n" } }, "type": "object", @@ -2524,94 +1349,44 @@ "properties": { "address": { "type": "string", - "description": "A hostname or IPv4 address of the Syslog endpoint\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A hostname or IPv4 address of the Syslog endpoint\n" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "port": { "type": "integer", - "description": "The port associated with the address where the Syslog endpoint can be accessed. Default `514`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port associated with the address where the Syslog endpoint can be accessed. Default `514`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - }, "secret": true }, "tlsHostname": { "type": "string", - "description": "Used during the TLS handshake to validate the certificate\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Used during the TLS handshake to validate the certificate\n" }, "token": { "type": "string", - "description": "Whether to prepend each message with a specific token\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to prepend each message with a specific token\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging. Default `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging. Default `false`\n" } }, "type": "object", @@ -2624,29 +1399,14 @@ "properties": { "content": { "type": "string", - "description": "The contents of the Wasm deployment package as a base64 encoded string (e.g. could be provided using an input variable or via external data source output variable). Conflicts with `filename`. Exactly one of these two arguments must be specified\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The contents of the Wasm deployment package as a base64 encoded string (e.g. could be provided using an input variable or via external data source output variable). Conflicts with `filename`. Exactly one of these two arguments must be specified\n" }, "filename": { "type": "string", - "description": "The path to the Wasm deployment package within your local filesystem. Conflicts with `content`. Exactly one of these two arguments must be specified\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The path to the Wasm deployment package within your local filesystem. Conflicts with `content`. Exactly one of these two arguments must be specified\n" }, "sourceCodeHash": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" } }, "type": "object", @@ -2662,30 +1422,15 @@ "properties": { "fanout": { "type": "boolean", - "description": "Enable Fanout support\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Enable Fanout support\n" }, "name": { "type": "string", - "description": "Used internally by the provider to identify modified settings\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Used internally by the provider to identify modified settings\n" }, "websockets": { "type": "boolean", - "description": "Enable WebSockets support\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Enable WebSockets support\n" } }, "type": "object", @@ -2701,30 +1446,15 @@ "properties": { "aclId": { "type": "string", - "description": "The ID of the ACL\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of the ACL\n" }, "forceDestroy": { "type": "boolean", - "description": "Allow the ACL to be deleted, even if it contains entries. Defaults to false.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Allow the ACL to be deleted, even if it contains entries. Defaults to false.\n" }, "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 - } - } + "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" } }, "type": "object", @@ -2744,230 +1474,105 @@ "properties": { "address": { "type": "string", - "description": "An IPv4, hostname, or IPv6 address for the Backend\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "An IPv4, hostname, or IPv6 address for the Backend\n" }, "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 - } - } + "description": "Denotes if this Backend should be included in the pool of backends that requests are load balanced against. Default `false`\n" }, "betweenBytesTimeout": { "type": "integer", - "description": "How long to wait between bytes in milliseconds. Default `10000`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long to wait between bytes in milliseconds. Default `10000`\n" }, "connectTimeout": { "type": "integer", - "description": "How long to wait for a timeout in milliseconds. Default `1000`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long to wait for a timeout in milliseconds. Default `1000`\n" }, "errorThreshold": { "type": "integer", - "description": "Number of errors to allow before the Backend is marked as down. Default `0`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Number of errors to allow before the Backend is marked as down. Default `0`\n" }, "firstByteTimeout": { "type": "integer", - "description": "How long to wait for the first bytes in milliseconds. Default `15000`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long to wait for the first bytes in milliseconds. Default `15000`\n" }, "healthcheck": { "type": "string", - "description": "Name of a defined `healthcheck` to assign to this backend\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of a defined `healthcheck` to assign to this backend\n" }, "keepaliveTime": { "type": "integer", - "description": "How long in seconds to keep a persistent connection to the backend between requests.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How long in seconds to keep a persistent connection to the backend between requests.\n" }, "maxConn": { "type": "integer", - "description": "Maximum number of connections for this Backend. Default `200`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum number of connections for this Backend. Default `200`\n" }, "maxTlsVersion": { "type": "string", - "description": "Maximum allowed TLS version on SSL connections to this backend.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum allowed TLS version on SSL connections to this backend.\n" }, "minTlsVersion": { "type": "string", - "description": "Minimum allowed TLS version on SSL connections to this backend.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Minimum allowed TLS version on SSL connections to this backend.\n" }, "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 - } - } + "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" }, "overrideHost": { "type": "string", - "description": "The hostname to override the Host header\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The hostname to override the Host header\n" }, "port": { "type": "integer", - "description": "The port number on which the Backend responds. Default `80`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port number on which the Backend responds. Default `80`\n" }, "requestCondition": { "type": "string", - "description": "Name of a condition, which if met, will select this backend during a request.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of a condition, which if met, will select this backend during a request.\n" }, "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 - } - } + "description": "The POP of the shield designated to reduce inbound load. Valid values for `shield` are included in the `GET /datacenters` API response\n" }, "sslCaCert": { "type": "string", - "description": "CA certificate attached to origin.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "CA certificate attached to origin.\n" }, "sslCertHostname": { "type": "string", - "description": "Configure certificate validation. Does not affect SNI at all\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Configure certificate validation. Does not affect SNI at all\n" }, "sslCheckCert": { "type": "boolean", - "description": "Be strict about checking SSL certs. Default `true`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Be strict about checking SSL certs. Default `true`\n" }, "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 - } - } + "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" }, "sslClientCert": { "type": "string", "description": "Client certificate attached to origin. Used when connecting to the backend\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "sslClientKey": { "type": "string", "description": "Client key attached to origin. Used when connecting to the backend\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "sslSniHostname": { "type": "string", - "description": "Configure SNI in the TLS handshake. Does not affect cert validation at all\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Configure SNI in the TLS handshake. Does not affect cert validation at all\n" }, "useSsl": { "type": "boolean", - "description": "Whether or not to use SSL to reach the Backend. Default `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether or not to use SSL to reach the Backend. Default `false`\n" }, "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 - } - } + "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" } }, "type": "object", @@ -2980,48 +1585,23 @@ "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 - } - } + "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" }, "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 - } - } + "description": "Name of already defined `condition` used to test whether this settings object should be used. This `condition` must be of type `CACHE`\n" }, "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 - } - } + "description": "Unique name for this Cache Setting. It is important to note that changing this attribute will delete and recreate the resource\n" }, "staleTtl": { "type": "integer", - "description": "Max \"Time To Live\" for stale (unreachable) objects\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Max \"Time To Live\" for stale (unreachable) objects\n" }, "ttl": { "type": "integer", - "description": "The Time-To-Live (TTL) for the object\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Time-To-Live (TTL) for the object\n" } }, "type": "object", @@ -3033,39 +1613,19 @@ "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 - } - } + "description": "The unique name for the condition. It is important to note that changing this attribute will delete and recreate the resource\n" }, "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 - } - } + "description": "A number used to determine the order in which multiple conditions execute. Lower numbers execute first. Default `10`\n" }, "statement": { "type": "string", - "description": "The statement used to determine if the condition is met\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The statement used to determine if the condition is met\n" }, "type": { "type": "string", - "description": "Type of condition, either `REQUEST` (req), `RESPONSE` (req, resp), or `CACHE` (req, beresp)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Type of condition, either `REQUEST` (req), `RESPONSE` (req, resp), or `CACHE` (req, beresp)\n" } }, "type": "object", @@ -3079,38 +1639,18 @@ "properties": { "dictionaryId": { "type": "string", - "description": "The ID of the dictionary\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of the dictionary\n" }, "forceDestroy": { "type": "boolean", - "description": "Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Allow the dictionary to be deleted, even if it contains entries. Defaults to false.\n" }, "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 - } - } + "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" }, "writeOnly": { - "type": "boolean", - "language": { - "python": { - "mapCase": false - } - } + "type": "boolean" } }, "type": "object", @@ -3133,66 +1673,31 @@ "items": { "type": "string" }, - "description": "Names of defined backends to map the director to. Example: `[ \"origin1\", \"origin2\" ]`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Names of defined backends to map the director to. Example: `[ \"origin1\", \"origin2\" ]`\n" }, "comment": { "type": "string", - "description": "An optional comment about the Director\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "An optional comment about the Director\n" }, "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 - } - } + "description": "Unique name for this Director. It is important to note that changing this attribute will delete and recreate the resource\n" }, "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 - } - } + "description": "Percentage of capacity that needs to be up for the director itself to be considered up. Default `75`\n" }, "retries": { "type": "integer", - "description": "How many backends to search if it fails. Default `5`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How many backends to search if it fails. Default `5`\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Type of load balance group to use. Integer, 1 to 4. Values: `1` (random), `3` (hash), `4` (client). Default `1`\n" } }, "type": "object", @@ -3205,21 +1710,11 @@ "properties": { "comment": { "type": "string", - "description": "An optional comment about the Domain.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "An optional comment about the Domain.\n" }, "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 - } - } + "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" } }, "type": "object", @@ -3231,48 +1726,23 @@ "properties": { "content": { "type": "string", - "description": "The VCL code that specifies exactly what the snippet does\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The VCL code that specifies exactly what the snippet does\n" }, "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 - } - } + "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" }, "priority": { "type": "integer", - "description": "Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to `100`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to `100`\n" }, "snippetId": { "type": "string", - "description": "The ID of the dynamic snippet\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of the dynamic snippet\n" }, "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 - } - } + "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" } }, "type": "object", @@ -3294,45 +1764,25 @@ "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 - } - } + "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" }, "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 - } - } + "description": "The content-type for each type of content you wish to have dynamically gzip'ed. Example: `[\"text/html\", \"text/css\"]`\n" }, "extensions": { "type": "array", "items": { "type": "string" }, - "description": "File extensions for each file type to dynamically gzip. Example: `[\"css\", \"js\"]`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "File extensions for each file type to dynamically gzip. Example: `[\"css\", \"js\"]`\n" }, "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 - } - } + "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" } }, "type": "object", @@ -3344,111 +1794,51 @@ "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 - } - } + "description": "The Header manipulation action to take; must be one of `set`, `append`, `delete`, `regex`, or `regex_repeat`\n" }, "cacheCondition": { "type": "string", - "description": "Name of already defined `condition` to apply. This `condition` must be of type `CACHE`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of already defined `condition` to apply. This `condition` must be of type `CACHE`\n" }, "destination": { "type": "string", - "description": "The name of the header that is going to be affected by the Action\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the header that is going to be affected by the Action\n" }, "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 - } - } + "description": "Don't add the header if it is already. (Only applies to `set` action.). Default `false`\n" }, "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 - } - } + "description": "Unique name for this header attribute. It is important to note that changing this attribute will delete and recreate the resource\n" }, "priority": { "type": "integer", - "description": "Lower priorities execute first. Default: `100`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Lower priorities execute first. Default: `100`\n" }, "regex": { "type": "string", - "description": "Regular expression to use (Only applies to `regex` and `regex_repeat` actions.)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Regular expression to use (Only applies to `regex` and `regex_repeat` actions.)\n" }, "requestCondition": { "type": "string", - "description": "Name of already defined `condition` to apply. This `condition` must be of type `REQUEST`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of already defined `condition` to apply. This `condition` must be of type `REQUEST`\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Variable to be used as a source for the header content (Does not apply to `delete` action.)\n" }, "substitution": { "type": "string", - "description": "Value to substitute in place of regular expression. (Only applies to `regex` and `regex_repeat`.)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Value to substitute in place of regular expression. (Only applies to `regex` and `regex_repeat`.)\n" }, "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 - } - } + "description": "The Request type on which to apply the selected Action; must be one of `request`, `fetch`, `cache` or `response`\n" } }, "type": "object", @@ -3476,114 +1866,54 @@ "properties": { "checkInterval": { "type": "integer", - "description": "How often to run the Healthcheck in milliseconds. Default `5000`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How often to run the Healthcheck in milliseconds. Default `5000`\n" }, "expectedResponse": { "type": "integer", - "description": "The status code expected from the host. Default `200`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The status code expected from the host. Default `200`\n" }, "headers": { "type": "array", "items": { "type": "string" }, - "description": "Custom health check HTTP headers (e.g. if your health check requires an API key to be provided).\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Custom health check HTTP headers (e.g. if your health check requires an API key to be provided).\n" }, "host": { "type": "string", - "description": "The Host header to send for this Healthcheck\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Host header to send for this Healthcheck\n" }, "httpVersion": { "type": "string", - "description": "Whether to use version 1.0 or 1.1 HTTP. Default `1.1`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use version 1.0 or 1.1 HTTP. Default `1.1`\n" }, "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 - } - } + "description": "When loading a config, the initial number of probes to be seen as OK. Default `3`\n" }, "method": { "type": "string", - "description": "Which HTTP method to use. Default `HEAD`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Which HTTP method to use. Default `HEAD`\n" }, "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 - } - } + "description": "A unique name to identify this Healthcheck. It is important to note that changing this attribute will delete and recreate the resource\n" }, "path": { "type": "string", - "description": "The path to check\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The path to check\n" }, "threshold": { "type": "integer", - "description": "How many Healthchecks must succeed to be considered healthy. Default `3`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How many Healthchecks must succeed to be considered healthy. Default `3`\n" }, "timeout": { "type": "integer", - "description": "Timeout in milliseconds. Default `500`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Timeout in milliseconds. Default `500`\n" }, "window": { "type": "integer", - "description": "The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The number of most recent Healthcheck queries to keep for this Healthcheck. Default `5`\n" } }, "type": "object", @@ -3597,104 +1927,49 @@ "properties": { "accountName": { "type": "string", - "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n" }, "dataset": { "type": "string", - "description": "The ID of your BigQuery dataset\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your BigQuery dataset\n" }, "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 - } - }, "secret": true }, "format": { "type": "string", - "description": "The logging format desired.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The logging format desired.\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "projectId": { "type": "string", - "description": "The ID of your GCP project\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your GCP project\n" }, "responseCondition": { "type": "string", - "description": "Name of a condition to apply this logging.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of a condition to apply this logging.\n" }, "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 - } - }, "secret": true }, "table": { "type": "string", - "description": "The ID of your BigQuery table\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your BigQuery table\n" }, "template": { "type": "string", - "description": "BigQuery table name suffix template\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "BigQuery table name suffix template\n" } }, "type": "object", @@ -3711,148 +1986,68 @@ "properties": { "accountName": { "type": "string", - "description": "The unique Azure Blob Storage namespace in which your data objects are stored\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The unique Azure Blob Storage namespace in which your data objects are stored\n" }, "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 - } - } + "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" }, "container": { "type": "string", - "description": "The name of the Azure Blob Storage container in which to store logs\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the Azure Blob Storage container in which to store logs\n" }, "fileMaxBytes": { "type": "integer", - "description": "Maximum size of an uploaded log file, if non-zero.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum size of an uploaded log file, if non-zero.\n" }, "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 - } - } + "description": "Apache-style string or VCL variables to use for log formatting (default: `%h %l %u %t \"%r\" %\u003es %b`)\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred in seconds. Default `3600`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred in seconds. Default `3600`\n" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply\n" }, "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 - } - }, "secret": true }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" } }, "type": "object", @@ -3868,147 +2063,67 @@ "accessKey": { "type": "string", "description": "Your Cloud File account access key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "bucketName": { "type": "string", - "description": "The name of your Cloud Files container\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of your Cloud Files container\n" }, "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 - } - } + "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" }, "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "path": { "type": "string", - "description": "The path to upload logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The path to upload logs to\n" }, "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 - } - } + "description": "How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "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 - } - } + "description": "The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "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 - } - } + "description": "The region to stream logs to. One of: DFW (Dallas), ORD (Chicago), IAD (Northern Virginia), LON (London), SYD (Sydney), HKG (Hong Kong)\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "user": { "type": "string", - "description": "The username for your Cloud Files account\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for your Cloud Files account\n" } }, "type": "object", @@ -4023,66 +2138,31 @@ "properties": { "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "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 - } - } + "description": "The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply.\n" }, "token": { "type": "string", "description": "The API key from your Datadog account\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -4097,148 +2177,68 @@ "accessKey": { "type": "string", "description": "Your DigitalOcean Spaces account access key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "bucketName": { "type": "string", - "description": "The name of the DigitalOcean Space\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the DigitalOcean Space\n" }, "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 - } - } + "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" }, "domain": { "type": "string", - "description": "The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The domain of the DigitalOcean Spaces endpoint (default `nyc3.digitaloceanspaces.com`)\n" }, "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "path": { "type": "string", - "description": "The path to upload logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The path to upload logs to\n" }, "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 - } - } + "description": "How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "secretKey": { "type": "string", "description": "Your DigitalOcean Spaces account secret key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" } }, "type": "object", @@ -4253,149 +2253,69 @@ "properties": { "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n" }, "index": { "type": "string", - "description": "The name of the Elasticsearch index to send documents (logs) to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the Elasticsearch index to send documents (logs) to\n" }, "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 - } - } + "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" }, "password": { "type": "string", "description": "BasicAuth password for Elasticsearch\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "pipeline": { "type": "string", - "description": "The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of the Elasticsearch ingest pipeline to apply pre-process transformations to before indexing\n" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "requestMaxBytes": { "type": "integer", - "description": "The maximum number of logs sent in one request. Defaults to `0` for unbounded\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of logs sent in one request. Defaults to `0` for unbounded\n" }, "requestMaxEntries": { "type": "integer", - "description": "The maximum number of bytes sent in one request. Defaults to `0` for unbounded\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of bytes sent in one request. Defaults to `0` for unbounded\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply\n" }, "tlsCaCert": { "type": "string", - "description": "A secure certificate to authenticate the server with. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A secure certificate to authenticate the server with. Must be in PEM format\n" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "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" }, "url": { "type": "string", - "description": "The Elasticsearch URL to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Elasticsearch URL to stream logs to\n" }, "user": { "type": "string", - "description": "BasicAuth username for Elasticsearch\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "BasicAuth username for Elasticsearch\n" } }, "type": "object", @@ -4409,148 +2329,68 @@ "properties": { "address": { "type": "string", - "description": "The FTP address to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The FTP address to stream logs to\n" }, "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 - } - } + "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" }, "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "password": { "type": "string", "description": "The password for the server (for anonymous use an email address)\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "description": "The path to upload log files to. If the path ends in `/` then it is treated as a directory\n" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds (Default `3600`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds (Default `3600`)\n" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "port": { "type": "integer", - "description": "The port number. Default: `21`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port number. Default: `21`\n" }, "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 - } - } + "description": "The PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply.\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "user": { "type": "string", - "description": "The username for the server (can be `anonymous`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for the server (can be `anonymous`)\n" } }, "type": "object", @@ -4566,139 +2406,64 @@ "properties": { "accountName": { "type": "string", - "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n" }, "bucketName": { "type": "string", - "description": "The name of the bucket in which to store the logs\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the bucket in which to store the logs\n" }, "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 - } - } + "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" }, "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds (Default 3600)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds (Default 3600)\n" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "responseCondition": { "type": "string", - "description": "Name of a condition to apply this logging.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of a condition to apply this logging.\n" }, "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 - } - }, "secret": true }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "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 - } - } + "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" } }, "type": "object", @@ -4711,94 +2476,44 @@ "properties": { "accountName": { "type": "string", - "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The google account name used to obtain temporary credentials (default none). You may optionally provide this via an environment variable, `FASTLY_GCS_ACCOUNT_NAME`.\n" }, "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "projectId": { "type": "string", - "description": "The ID of your Google Cloud Platform project\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of your Google Cloud Platform project\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "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 - } - }, "secret": true }, "topic": { "type": "string", - "description": "The Google Cloud Pub/Sub topic to which logs will be published\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Google Cloud Pub/Sub topic to which logs will be published\n" }, "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 - } - } + "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" } }, "type": "object", @@ -4814,67 +2529,32 @@ "properties": { "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "token": { "type": "string", "description": "The token to use for authentication (https://www.heroku.com/docs/customer-token-authentication-token/)\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "url": { "type": "string", - "description": "The URL to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The URL to stream logs to\n" } }, "type": "object", @@ -4888,66 +2568,31 @@ "properties": { "dataset": { "type": "string", - "description": "The Honeycomb Dataset you want to log to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Honeycomb Dataset you want to log to\n" }, "format": { "type": "string", - "description": "Apache style log formatting. Your log must produce valid JSON that Honeycomb can ingest.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting. Your log must produce valid JSON that Honeycomb can ingest.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "token": { "type": "string", "description": "The Write Key from the Account page of your Honeycomb account\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -4962,166 +2607,76 @@ "properties": { "contentType": { "type": "string", - "description": "Value of the `Content-Type` header sent with the request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Value of the `Content-Type` header sent with the request\n" }, "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n" }, "headerName": { "type": "string", - "description": "Custom header sent with the request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Custom header sent with the request\n" }, "headerValue": { "type": "string", - "description": "Value of the custom header sent with the request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Value of the custom header sent with the request\n" }, "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 - } - } + "description": "Formats log entries as JSON. Can be either disabled (`0`), array of json (`1`), or newline delimited json (`2`)\n" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "method": { "type": "string", - "description": "HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "HTTP method used for request. Can be either `POST` or `PUT`. Default `POST`\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed\n" }, "requestMaxBytes": { "type": "integer", - "description": "The maximum number of bytes sent in one request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of bytes sent in one request\n" }, "requestMaxEntries": { "type": "integer", - "description": "The maximum number of logs sent in one request\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The maximum number of logs sent in one request\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply\n" }, "tlsCaCert": { "type": "string", - "description": "A secure certificate to authenticate the server with. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A secure certificate to authenticate the server with. Must be in PEM format\n" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "tlsHostname": { "type": "string", - "description": "Used during the TLS handshake to validate the certificate\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Used during the TLS handshake to validate the certificate\n" }, "url": { "type": "string", - "description": "URL that log data will be sent to. Must use the https protocol\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "URL that log data will be sent to. Must use the https protocol\n" } }, "type": "object", @@ -5134,176 +2689,81 @@ "properties": { "authMethod": { "type": "string", - "description": "SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "SASL authentication method. One of: plain, scram-sha-256, scram-sha-512\n" }, "brokers": { "type": "string", - "description": "A comma-separated list of IP addresses or hostnames of Kafka brokers\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A comma-separated list of IP addresses or hostnames of Kafka brokers\n" }, "compressionCodec": { "type": "string", - "description": "The codec used for compression of your logs. One of: `gzip`, `snappy`, `lz4`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The codec used for compression of your logs. One of: `gzip`, `snappy`, `lz4`\n" }, "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Enables parsing of key=value tuples from the beginning of a logline, turning them into record headers\n" }, "password": { "type": "string", "description": "SASL Pass\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "requestMaxBytes": { "type": "integer", - "description": "Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Maximum size of log batch, if non-zero. Defaults to 0 for unbounded\n" }, "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` Wait for all in-sync replicas to respond\n", - "language": { - "python": { - "mapCase": false - } - } + "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` Wait for all in-sync replicas to respond\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "tlsCaCert": { "type": "string", - "description": "A secure certificate to authenticate the server with. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A secure certificate to authenticate the server with. Must be in PEM format\n" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "description": "The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n" }, "topic": { "type": "string", - "description": "The Kafka topic to send logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Kafka topic to send logs to\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging. Can be either `true` or `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging. Can be either `true` or `false`\n" }, "user": { "type": "string", - "description": "SASL User\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "SASL User\n" } }, "type": "object", @@ -5318,94 +2778,44 @@ "accessKey": { "type": "string", "description": "The AWS access key to be used to write to the stream\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "region": { "type": "string", - "description": "The AWS region the stream resides in. (Default: `us-east-1`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The AWS region the stream resides in. (Default: `us-east-1`)\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "secretKey": { "type": "string", "description": "The AWS secret access key to authenticate with\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "topic": { "type": "string", - "description": "The Kinesis stream name\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Kinesis stream name\n" } }, "type": "object", @@ -5418,75 +2828,35 @@ "properties": { "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "port": { "type": "integer", - "description": "The port number configured in Logentries\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port number configured in Logentries\n" }, "responseCondition": { "type": "string", - "description": "Name of blockAttributes condition to apply this logging.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of blockAttributes condition to apply this logging.\n" }, "token": { "type": "string", - "description": "Use token based authentication (https://logentries.com/doc/input-token/)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Use token based authentication (https://logentries.com/doc/input-token/)\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging\n" } }, "type": "object", @@ -5499,57 +2869,27 @@ "properties": { "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "token": { "type": "string", "description": "The token to use for authentication (https://www.loggly.com/docs/customer-token-authentication-token/).\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -5563,67 +2903,32 @@ "properties": { "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "token": { "type": "string", "description": "The data authentication token associated with this endpoint\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "url": { "type": "string", - "description": "Your Log Shuttle endpoint URL\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Your Log Shuttle endpoint URL\n" } }, "type": "object", @@ -5637,66 +2942,31 @@ "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 - } - } + "description": "Apache style log formatting. Your log must produce valid JSON that New Relic Logs can ingest.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "region": { "type": "string", - "description": "The region that log data will be sent to. Default: `US`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The region that log data will be sent to. Default: `US`\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply.\n" }, "token": { "type": "string", "description": "The Insert API key from the Account page of your New Relic account\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -5711,147 +2981,67 @@ "accessKey": { "type": "string", "description": "Your OpenStack account access key\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "bucketName": { "type": "string", - "description": "The name of your OpenStack container\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of your OpenStack container\n" }, "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 - } - } + "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" }, "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either `1` or `2`. (default: `2`).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n" }, "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 - } - } + "description": "Where in the generated VCL the logging call should be placed. Can be `none` or `waf_debug`.\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "url": { "type": "string", - "description": "Your OpenStack auth url\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Your OpenStack auth url\n" }, "user": { "type": "string", - "description": "The username for your OpenStack account\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for your OpenStack account\n" } }, "type": "object", @@ -5867,66 +3057,31 @@ "properties": { "address": { "type": "string", - "description": "The address of the Papertrail endpoint\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The address of the Papertrail endpoint\n" }, "format": { "type": "string", - "description": "A Fastly [log format string](https://docs.fastly.com/en/guides/custom-log-formats)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A Fastly [log format string](https://docs.fastly.com/en/guides/custom-log-formats)\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "port": { "type": "integer", - "description": "The port associated with the address where the Papertrail endpoint can be accessed\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port associated with the address where the Papertrail endpoint can be accessed\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute\n" } }, "type": "object", @@ -5940,194 +3095,89 @@ "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 - } - } + "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" }, "bucketName": { "type": "string", - "description": "The name of the bucket in which to store the logs\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the bucket in which to store the logs\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "period": { "type": "integer", - "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "How frequently the logs should be transferred, in seconds. Default `3600`\n" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "redundancy": { "type": "string", - "description": "The S3 storage class (redundancy level). Should be one of: `standard`, `intelligent_tiering`, `standard_ia`, `onezone_ia`, `glacier`, `glacier_ir`, `deep_archive`, or `reduced_redundancy`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The S3 storage class (redundancy level). Should be one of: `standard`, `intelligent_tiering`, `standard_ia`, `onezone_ia`, `glacier`, `glacier_ir`, `deep_archive`, or `reduced_redundancy`\n" }, "responseCondition": { "type": "string", - "description": "Name of blockAttributes condition to apply this logging.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of blockAttributes condition to apply this logging.\n" }, "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 - } - }, "secret": true }, "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 - } - } + "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" }, "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 - } - }, "secret": true }, "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 - } - } + "description": "Specify what type of server side encryption should be used. Can be either `AES256` or `aws:kms`\n" }, "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 - } - } + "description": "Optional server-side KMS Key Id. Must be set if server*side*encryption is set to `aws:kms`\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" } }, "type": "object", @@ -6140,66 +3190,31 @@ "properties": { "format": { "type": "string", - "description": "Apache style log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache style log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "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 - } - } + "description": "The region that log data will be sent to. One of `US` or `EU`. Defaults to `US` if undefined\n" }, "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 - } - } + "description": "The name of an existing condition in the configured endpoint, or leave blank to always execute.\n" }, "token": { "type": "string", "description": "The token to use for authentication (https://www.scalyr.com/keys)\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true } }, @@ -6213,167 +3228,77 @@ "properties": { "address": { "type": "string", - "description": "The SFTP address to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The SFTP address to stream logs to\n" }, "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 - } - } + "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" }, "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting.\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2).\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "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 - } - }, "secret": true }, "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 - } - } + "description": "The path to upload log files to. If the path ends in `/` then it is treated as a directory\n" }, "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 - } - } + "description": "How frequently log files are finalized so they can be available for reading (in seconds, default `3600`)\n" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "port": { "type": "integer", - "description": "The port the SFTP service listens on. (Default: `22`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port the SFTP service listens on. (Default: `22`)\n" }, "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 - } - } + "description": "A PGP public key that Fastly will use to encrypt your log files before writing them to disk\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply.\n" }, "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 - } - }, "secret": true }, "sshKnownHosts": { "type": "string", - "description": "A list of host keys for all hosts we can connect to over SFTP\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A list of host keys for all hosts we can connect to over SFTP\n" }, "timestampFormat": { "type": "string", - "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The `strftime` specified timestamp formatting (default `%Y-%m-%dT%H:%M:%S.000`)\n" }, "user": { "type": "string", - "description": "The username for the server\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The username for the server\n" } }, "type": "object", @@ -6389,113 +3314,53 @@ "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 - } - } + "description": "Apache-style string or VCL variables to use for log formatting (default: `%h %l %u %t \"%r\" %\u003es %b`)\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (default: 2)\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed\n" }, "responseCondition": { "type": "string", - "description": "The name of the condition to apply\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the condition to apply\n" }, "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 - } - } + "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" }, "tlsClientCert": { "type": "string", - "description": "The client certificate used to make authenticated requests. Must be in PEM format.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The client certificate used to make authenticated requests. Must be in PEM format.\n" }, "tlsClientKey": { "type": "string", "description": "The client private key used to make authenticated requests. Must be in PEM format.\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "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 - } - } + "description": "The hostname used to verify the server's certificate. It can either be the Common Name or a Subject Alternative Name (SAN)\n" }, "token": { "type": "string", "description": "The Splunk token to be used for authentication\n", - "language": { - "python": { - "mapCase": false - } - }, "secret": true }, "url": { "type": "string", - "description": "The Splunk URL to stream logs to\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Splunk URL to stream logs to\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging. Default: `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging. Default: `false`\n" } }, "type": "object", @@ -6509,66 +3374,31 @@ "properties": { "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting\n" }, "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 - } - } + "description": "The version of the custom logging format used for the configured endpoint. Can be either 1 or 2. (Default: 2)\n" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "responseCondition": { "type": "string", - "description": "Name of blockAttributes condition to apply this logging.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of blockAttributes condition to apply this logging.\n" }, "url": { "type": "string", - "description": "The URL to Sumologic collector endpoint\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The URL to Sumologic collector endpoint\n" } }, "type": "object", @@ -6581,130 +3411,60 @@ "properties": { "address": { "type": "string", - "description": "A hostname or IPv4 address of the Syslog endpoint\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A hostname or IPv4 address of the Syslog endpoint\n" }, "format": { "type": "string", - "description": "Apache-style string or VCL variables to use for log formatting\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Apache-style string or VCL variables to use for log formatting\n" }, "formatVersion": { "type": "integer", - "description": "The version of the custom logging format. Can be either 1 or 2. (Default: 2)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The version of the custom logging format. Can be either 1 or 2. (Default: 2)\n" }, "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 - } - } + "description": "How the message should be formatted. Can be either `classic`, `loggly`, `logplex` or `blank`. Default is `classic`\n" }, "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 - } - } + "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" }, "placement": { "type": "string", - "description": "Where in the generated VCL the logging call should be placed.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Where in the generated VCL the logging call should be placed.\n" }, "port": { "type": "integer", - "description": "The port associated with the address where the Syslog endpoint can be accessed. Default `514`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The port associated with the address where the Syslog endpoint can be accessed. Default `514`\n" }, "responseCondition": { "type": "string", - "description": "Name of blockAttributes condition to apply this logging.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of blockAttributes condition to apply this logging.\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "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 - } - }, "secret": true }, "tlsHostname": { "type": "string", - "description": "Used during the TLS handshake to validate the certificate\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Used during the TLS handshake to validate the certificate\n" }, "token": { "type": "string", - "description": "Whether to prepend each message with a specific token\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to prepend each message with a specific token\n" }, "useTls": { "type": "boolean", - "description": "Whether to use TLS for secure logging. Default `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Whether to use TLS for secure logging. Default `false`\n" } }, "type": "object", @@ -6717,178 +3477,187 @@ "properties": { "brotliCompression": { "type": "boolean", - "description": "Enable Brotli Compression support\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Enable Brotli Compression support\n" }, "domainInspector": { "type": "boolean", - "description": "Enable Domain Inspector support\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Enable Domain Inspector support\n" + }, + "imageOptimizer": { + "type": "boolean", + "description": "Enable Image Optimizer support (requires at least one backend with a `shield` attribute)\n" + }, + "name": { + "type": "string", + "description": "Used internally by the provider to identify modified settings\n" + }, + "originInspector": { + "type": "boolean", + "description": "Enable Origin Inspector support\n" + }, + "websockets": { + "type": "boolean", + "description": "Enable WebSockets support\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "name" + ] + } + } + }, + "fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter": { + "properties": { + "action": { + "type": "string", + "description": "The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object)\n" + }, + "clientKey": { + "type": "string", + "description": "Comma-separated list of VCL variables used to generate a counter key to identify a client\n" + }, + "featureRevision": { + "type": "integer", + "description": "Revision number of the rate limiting feature implementation\n" }, - "imageOptimizer": { - "type": "boolean", - "description": "Enable Image Optimizer support (requires at least one backend with a `shield` attribute)\n", - "language": { - "python": { - "mapCase": false - } - } + "httpMethods": { + "type": "string", + "description": "Comma-separated list of HTTP methods to apply rate limiting to\n" + }, + "loggerType": { + "type": "string", + "description": "Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog)\n" }, "name": { "type": "string", - "description": "Used internally by the provider to identify modified settings\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A unique human readable name for the rate limiting rule\n" }, - "originInspector": { - "type": "boolean", - "description": "Enable Origin Inspector support\n", - "language": { - "python": { - "mapCase": false - } - } + "penaltyBoxDuration": { + "type": "integer", + "description": "Length of time in minutes that the rate limiter is in effect after the initial violation is detected\n" }, - "websockets": { - "type": "boolean", - "description": "Enable WebSockets support\n", - "language": { - "python": { - "mapCase": false - } - } + "ratelimiterId": { + "type": "string", + "description": "Alphanumeric string identifying the rate limiter\n" + }, + "response": { + "$ref": "#/types/fastly:index/ServiceVclRateLimiterResponse:ServiceVclRateLimiterResponse", + "description": "Custom response to be sent when the rate limit is exceeded. Required if action is response\n" + }, + "responseObjectName": { + "type": "string", + "description": "Name of existing response object. Required if action is response_object\n" + }, + "rpsLimit": { + "type": "integer", + "description": "Upper limit of requests per second allowed by the rate limiter\n" + }, + "uriDictionaryName": { + "type": "string", + "description": "The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited\n" + }, + "windowSize": { + "type": "integer", + "description": "Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60)\n" } }, "type": "object", + "required": [ + "action", + "clientKey", + "httpMethods", + "name", + "penaltyBoxDuration", + "rpsLimit", + "windowSize" + ], "language": { "nodejs": { "requiredOutputs": [ - "name" + "action", + "clientKey", + "httpMethods", + "name", + "penaltyBoxDuration", + "ratelimiterId", + "rpsLimit", + "windowSize" ] } } }, + "fastly:index/ServiceVclRateLimiterResponse:ServiceVclRateLimiterResponse": { + "properties": { + "content": { + "type": "string" + }, + "contentType": { + "type": "string" + }, + "status": { + "type": "integer" + } + }, + "type": "object", + "required": [ + "content", + "contentType", + "status" + ] + }, "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 - } - } + "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" }, "bypassBusyWait": { "type": "boolean", - "description": "Disable collapsed forwarding, so you don't wait for other objects to origin\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Disable collapsed forwarding, so you don't wait for other objects to origin\n" }, "defaultHost": { "type": "string", - "description": "Sets the host header\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Sets the host header\n" }, "forceMiss": { "type": "boolean", - "description": "Force a cache miss for the request. If specified, can be `true` or `false`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Force a cache miss for the request. If specified, can be `true` or `false`\n" }, "forceSsl": { "type": "boolean", - "description": "Forces the request to use SSL (Redirects a non-SSL request to SSL)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Forces the request to use SSL (Redirects a non-SSL request to SSL)\n" }, "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 - } - } + "deprecationMessage": "'geo_headers' attribute has been deprecated and will be removed in the next major version release" }, "hashKeys": { "type": "string", - "description": "Comma separated list of varnish request object fields that should be in the hash key\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Comma separated list of varnish request object fields that should be in the hash key\n" }, "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 - } - } + "description": "How old an object is allowed to be to serve `stale-if-error` or `stale-while-revalidate`, in seconds\n" }, "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 - } - } + "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" }, "requestCondition": { "type": "string", - "description": "Name of already defined `condition` to determine if this request setting should be applied\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Name of already defined `condition` to determine if this request setting should be applied\n" }, "timerSupport": { "type": "boolean", - "description": "Injects the X-Timer info into the request for viewing origin fetch durations\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Injects the X-Timer info into the request for viewing origin fetch durations\n" }, "xff": { "type": "string", - "description": "X-Forwarded-For, should be `clear`, `leave`, `append`, `append_all`, or `overwrite`. Default `append`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "X-Forwarded-For, should be `clear`, `leave`, `append`, `append_all`, or `overwrite`. Default `append`\n" } }, "type": "object", @@ -6900,66 +3669,31 @@ "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 - } - } + "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" }, "content": { "type": "string", - "description": "The content to deliver for the response object\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The content to deliver for the response object\n" }, "contentType": { "type": "string", - "description": "The MIME type of the content\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The MIME type of the content\n" }, "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 - } - } + "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" }, "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 - } - } + "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" }, "response": { "type": "string", - "description": "The HTTP Response. Default `OK`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The HTTP Response. Default `OK`\n" }, "status": { "type": "integer", - "description": "The HTTP Status Code. Default `200`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The HTTP Status Code. Default `200`\n" } }, "type": "object", @@ -6971,39 +3705,19 @@ "properties": { "content": { "type": "string", - "description": "The VCL code that specifies exactly what the snippet does\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The VCL code that specifies exactly what the snippet does\n" }, "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 - } - } + "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" }, "priority": { "type": "integer", - "description": "Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to `100`\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "Priority determines the ordering for multiple snippets. Lower numbers execute first. Defaults to `100`\n" }, "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 - } - } + "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" } }, "type": "object", @@ -7017,30 +3731,15 @@ "properties": { "content": { "type": "string", - "description": "The custom VCL code to upload\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The custom VCL code to upload\n" }, "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 - } - } + "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" }, "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 - } - } + "description": "A unique name for this configuration block. It is important to note that changing this attribute will delete and recreate the resource\n" } }, "type": "object", @@ -7053,39 +3752,19 @@ "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 - } - } + "description": "A flag used to completely disable a Web Application Firewall. This is intended to only be used in an emergency\n" }, "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 - } - } + "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" }, "responseObject": { "type": "string", - "description": "The name of the response object used by the Web Application Firewall\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of the response object used by the Web Application Firewall\n" }, "wafId": { "type": "string", - "description": "The ID of the WAF\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of the WAF\n" } }, "type": "object", @@ -7105,30 +3784,15 @@ "properties": { "modsecRuleId": { "type": "integer", - "description": "The Web Application Firewall rule's modsecurity ID\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Web Application Firewall rule's modsecurity ID\n" }, "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 - } - } + "description": "The Web Application Firewall rule's revision. The latest revision will be used if this is not provided\n" }, "status": { "type": "string", - "description": "The Web Application Firewall rule's status. Allowed values are (`log`, `block` and `score`)\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The Web Application Firewall rule's status. Allowed values are (`log`, `block` and `score`)\n" } }, "type": "object", @@ -7150,51 +3814,26 @@ "properties": { "condition": { "type": "string", - "description": "A conditional expression in VCL used to determine if the condition is met\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "A conditional expression in VCL used to determine if the condition is met\n" }, "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 - } - } + "description": "The type of rule exclusion. Values are `rule` to exclude the specified rule(s), or `waf` to disable the Web Application Firewall\n" }, "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 - } - } + "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" }, "name": { "type": "string", - "description": "The name of rule exclusion\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The name of rule exclusion\n" }, "number": { "type": "integer", - "description": "The numeric ID assigned to the WAF Rule Exclusion\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The numeric ID assigned to the WAF Rule Exclusion\n" } }, "type": "object", @@ -7218,30 +3857,15 @@ "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 - } - } + "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" }, "recordType": { "type": "string", - "description": "The type of DNS record to add, e.g. `A`, or `CNAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The type of DNS record to add, e.g. `A`, or `CNAME`.\n" }, "recordValue": { "type": "string", - "description": "The value to which the DNS record should point, e.g. `xxxxx.fastly-validations.com`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The value to which the DNS record should point, e.g. `xxxxx.fastly-validations.com`.\n" } }, "type": "object", @@ -7259,33 +3883,18 @@ "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 - } - } + "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" }, "recordType": { "type": "string", - "description": "The type of DNS record to add, e.g. `A`, or `CNAME`.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The type of DNS record to add, e.g. `A`, or `CNAME`.\n" }, "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 - } - } + "description": "A list with the value(s) to which the DNS record should point.\n" } }, "type": "object", @@ -7302,36 +3911,16 @@ "fastly:index/getDatacentersPop:getDatacentersPop": { "properties": { "code": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "group": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "name": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "shield": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" } }, "type": "object", @@ -7347,72 +3936,57 @@ } } }, + "fastly:index/getDictionariesDictionary:getDictionariesDictionary": { + "properties": { + "id": { + "type": "string", + "description": "The ID of this resource.\n" + }, + "name": { + "type": "string" + }, + "writeOnly": { + "type": "boolean" + } + }, + "type": "object", + "required": [ + "id", + "name", + "writeOnly" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "fastly:index/getServicesDetail:getServicesDetail": { "properties": { "comment": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "createdAt": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "customerId": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "id": { "type": "string", - "description": "The ID of this resource.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The ID of this resource.\n" }, "name": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "type": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "updatedAt": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "version": { - "type": "integer", - "language": { - "python": { - "mapCase": false - } - } + "type": "integer" } }, "type": "object", @@ -7435,28 +4009,13 @@ "fastly:index/getTlsConfigurationDnsRecord:getTlsConfigurationDnsRecord": { "properties": { "recordType": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "recordValue": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" }, "region": { - "type": "string", - "language": { - "python": { - "mapCase": false - } - } + "type": "string" } }, "type": "object", @@ -7475,30 +4034,15 @@ "properties": { "latestRevisionNumber": { "type": "integer", - "description": "The rule's latest revision.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The rule's latest revision.\n" }, "modsecRuleId": { "type": "integer", - "description": "The rule's modsecurity ID.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The rule's modsecurity ID.\n" }, "type": { "type": "string", - "description": "The rule's type.\n", - "language": { - "python": { - "mapCase": false - } - } + "description": "The rule's type.\n" } }, "type": "object", @@ -7637,7 +4181,7 @@ } }, "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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\");\n\n //...\n var user = new Fastly.User(\"user\");\n\n // ...\n var auth = new Fastly.ServiceAuthorization(\"auth\", new()\n {\n ServiceId = demo.Id,\n UserId = user.Id,\n Permission = \"purge_all\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.User;\nimport com.pulumi.fastly.ServiceAuthorization;\nimport com.pulumi.fastly.ServiceAuthorizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\");\n\n var user = new User(\"user\");\n\n var auth = new ServiceAuthorization(\"auth\", ServiceAuthorizationArgs.builder() \n .serviceId(demo.id())\n .userId(user.id())\n .permission(\"purge_all\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n user:\n type: fastly:User\n auth:\n type: fastly:ServiceAuthorization\n properties:\n serviceId: ${demo.id}\n userId: ${user.id}\n permission: purge_all\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 ", + "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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\");\n\n //...\n var user = new Fastly.User(\"user\");\n\n // ...\n var auth = new Fastly.ServiceAuthorization(\"auth\", new()\n {\n ServiceId = demo.Id,\n UserId = user.Id,\n Permission = \"purge_all\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.User;\nimport com.pulumi.fastly.ServiceAuthorization;\nimport com.pulumi.fastly.ServiceAuthorizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\");\n\n var user = new User(\"user\");\n\n var auth = new ServiceAuthorization(\"auth\", ServiceAuthorizationArgs.builder() \n .serviceId(demo.id())\n .userId(user.id())\n .permission(\"purge_all\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n user:\n type: fastly:User\n auth:\n type: fastly:ServiceAuthorization\n properties:\n serviceId: ${demo.id}\n userId: ${user.id}\n permission: purge_all\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", @@ -8529,7 +5073,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = new[]\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```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"localhost\")\n .port(80)\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: localhost\n port: 80\n domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\n```\n\nBasic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header:\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclGzipArgs;\nimport com.pulumi.fastly.inputs.ServiceVclHeaderArgs;\nimport com.pulumi.aws.s3.BucketV2;\nimport com.pulumi.aws.s3.BucketV2Args;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\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 .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .gzips(ServiceVclGzipArgs.builder()\n .contentTypes( \n \"text/html\",\n \"text/css\")\n .extensions( \n \"css\",\n \"js\")\n .name(\"file extensions and content types\")\n .build())\n .headers(ServiceVclHeaderArgs.builder()\n .action(\"delete\")\n .destination(\"http.x-amz-request-id\")\n .name(\"remove x-amz-request-id\")\n .type(\"cache\")\n .build())\n .build());\n\n var website = new BucketV2(\"website\", BucketV2Args.builder() \n .acl(\"public-read\")\n .websites(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\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 domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\n gzips:\n - contentTypes:\n - text/html\n - text/css\n extensions:\n - css\n - js\n name: file extensions and content types\n headers:\n - action: delete\n destination: http.x-amz-request-id\n name: remove x-amz-request-id\n type: cache\n website:\n type: aws:s3:BucketV2\n properties:\n acl: public-read\n websites:\n - errorDocument: error.html\n indexDocument: index.html\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(`${path.module}/my_custom_main.vcl`),\n main: true,\n name: \"my_custom_main_vcl\",\n },\n {\n content: fs.readFileSync(`${path.module}/my_custom_library.vcl`),\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.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n Vcls = new[]\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```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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: fastly.ServiceVclVclArray{\n\t\t\t\t\u0026fastly.ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v/my_custom_main.vcl\", path.Module)),\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\u0026fastly.ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v/my_custom_library.vcl\", path.Module)),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclVclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"localhost\")\n .port(80)\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .vcls( \n ServiceVclVclArgs.builder()\n .content(Files.readString(Paths.get(String.format(\"%s/my_custom_main.vcl\", path.module()))))\n .main(true)\n .name(\"my_custom_main_vcl\")\n .build(),\n ServiceVclVclArgs.builder()\n .content(Files.readString(Paths.get(String.format(\"%s/my_custom_library.vcl\", path.module()))))\n .name(\"my_custom_library_vcl\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: localhost\n port: 80\n domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\n vcls:\n - content:\n fn::readFile: ${path.module}/my_custom_main.vcl\n main: true\n name: my_custom_main_vcl\n - content:\n fn::readFile: ${path.module}/my_custom_library.vcl\n name: my_custom_library_vcl\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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\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 = new[]\n {\n new Fastly.Inputs.ServiceVclDirectorArgs\n {\n Backends = new[]\n {\n \"origin1\",\n \"origin2\",\n },\n Name = \"mydirector\",\n Quorum = 0,\n Type = 3,\n },\n },\n Domains = new[]\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```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclDirectorArray{\n\t\t\t\t\u0026fastly.ServiceVclDirectorArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDirectorArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends( \n ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build(),\n ServiceVclBackendArgs.builder()\n .address(\"127.0.0.2\")\n .name(\"origin2\")\n .port(80)\n .build())\n .directors(ServiceVclDirectorArgs.builder()\n .backends( \n \"origin1\",\n \"origin2\")\n .name(\"mydirector\")\n .quorum(0)\n .type(3)\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n - address: 127.0.0.2\n name: origin2\n port: 80\n directors:\n - backends:\n - origin1\n - origin2\n name: mydirector\n quorum: 0\n type: 3\n domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\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 {\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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\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 = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"example.com\",\n },\n },\n ForceDestroy = true,\n ResponseObjects = new[]\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```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\u0026fastly.ServiceVclConditionArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\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: \u0026fastly.ServiceVclWafArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .statement(\"req.backend.is_origin\")\n .type(\"PREFETCH\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"example.com\")\n .build())\n .forceDestroy(true)\n .responseObjects(ServiceVclResponseObjectArgs.builder()\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 .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n statement: req.backend.is_origin\n type: PREFETCH\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n domains:\n - comment: demo\n name: example.com\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 waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = new[]\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```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"localhost\")\n .port(80)\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: localhost\n port: 80\n domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\n```\n\nBasic usage with an Amazon S3 Website and that removes the `x-amz-request-id` header:\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclGzipArgs;\nimport com.pulumi.fastly.inputs.ServiceVclHeaderArgs;\nimport com.pulumi.aws.s3.BucketV2;\nimport com.pulumi.aws.s3.BucketV2Args;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\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 .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .gzips(ServiceVclGzipArgs.builder()\n .contentTypes( \n \"text/html\",\n \"text/css\")\n .extensions( \n \"css\",\n \"js\")\n .name(\"file extensions and content types\")\n .build())\n .headers(ServiceVclHeaderArgs.builder()\n .action(\"delete\")\n .destination(\"http.x-amz-request-id\")\n .name(\"remove x-amz-request-id\")\n .type(\"cache\")\n .build())\n .build());\n\n var website = new BucketV2(\"website\", BucketV2Args.builder() \n .acl(\"public-read\")\n .websites(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\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 domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\n gzips:\n - contentTypes:\n - text/html\n - text/css\n extensions:\n - css\n - js\n name: file extensions and content types\n headers:\n - action: delete\n destination: http.x-amz-request-id\n name: remove x-amz-request-id\n type: cache\n website:\n type: aws:s3:BucketV2\n properties:\n acl: public-read\n websites:\n - errorDocument: error.html\n indexDocument: index.html\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(`${path.module}/my_custom_main.vcl`),\n main: true,\n name: \"my_custom_main_vcl\",\n },\n {\n content: fs.readFileSync(`${path.module}/my_custom_library.vcl`),\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.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n Port = 80,\n },\n },\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"demo.notexample.com\",\n },\n },\n ForceDestroy = true,\n Vcls = new[]\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```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/go/fastly\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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: fastly.ServiceVclVclArray{\n\t\t\t\t\u0026fastly.ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v/my_custom_main.vcl\", path.Module)),\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\u0026fastly.ServiceVclVclArgs{\n\t\t\t\t\tContent: readFileOrPanic(fmt.Sprintf(\"%v/my_custom_library.vcl\", path.Module)),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclVclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"localhost\")\n .port(80)\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .vcls( \n ServiceVclVclArgs.builder()\n .content(Files.readString(Paths.get(String.format(\"%s/my_custom_main.vcl\", path.module()))))\n .main(true)\n .name(\"my_custom_main_vcl\")\n .build(),\n ServiceVclVclArgs.builder()\n .content(Files.readString(Paths.get(String.format(\"%s/my_custom_library.vcl\", path.module()))))\n .name(\"my_custom_library_vcl\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: localhost\n port: 80\n domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\n vcls:\n - content:\n fn::readFile: ${path.module}/my_custom_main.vcl\n main: true\n name: my_custom_main_vcl\n - content:\n fn::readFile: ${path.module}/my_custom_library.vcl\n name: my_custom_library_vcl\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\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 = new[]\n {\n new Fastly.Inputs.ServiceVclDirectorArgs\n {\n Backends = new[]\n {\n \"origin1\",\n \"origin2\",\n },\n Name = \"mydirector\",\n Quorum = 0,\n Type = 3,\n },\n },\n Domains = new[]\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```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclDirectorArray{\n\t\t\t\t\u0026fastly.ServiceVclDirectorArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDirectorArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends( \n ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build(),\n ServiceVclBackendArgs.builder()\n .address(\"127.0.0.2\")\n .name(\"origin2\")\n .port(80)\n .build())\n .directors(ServiceVclDirectorArgs.builder()\n .backends( \n \"origin1\",\n \"origin2\")\n .name(\"mydirector\")\n .quorum(0)\n .type(3)\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"demo.notexample.com\")\n .build())\n .forceDestroy(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n - address: 127.0.0.2\n name: origin2\n port: 80\n directors:\n - backends:\n - origin1\n - origin2\n name: mydirector\n quorum: 0\n type: 3\n domains:\n - comment: demo\n name: demo.notexample.com\n forceDestroy: true\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 {\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\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 = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Comment = \"demo\",\n Name = \"example.com\",\n },\n },\n ForceDestroy = true,\n ResponseObjects = new[]\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```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\u0026fastly.ServiceVclConditionArgs{\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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\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: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\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: \u0026fastly.ServiceVclWafArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .statement(\"req.backend.is_origin\")\n .type(\"PREFETCH\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .domains(ServiceVclDomainArgs.builder()\n .comment(\"demo\")\n .name(\"example.com\")\n .build())\n .forceDestroy(true)\n .responseObjects(ServiceVclResponseObjectArgs.builder()\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 .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n statement: req.backend.is_origin\n type: PREFETCH\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n domains:\n - comment: demo\n name: example.com\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 waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\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", @@ -8801,6 +5345,12 @@ "productEnablement": { "$ref": "#/types/fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement" }, + "rateLimiters": { + "type": "array", + "items": { + "$ref": "#/types/fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter" + } + }, "requestSettings": { "type": "array", "items": { @@ -9108,6 +5658,12 @@ "productEnablement": { "$ref": "#/types/fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement" }, + "rateLimiters": { + "type": "array", + "items": { + "$ref": "#/types/fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter" + } + }, "requestSettings": { "type": "array", "items": { @@ -9428,6 +5984,12 @@ "productEnablement": { "$ref": "#/types/fastly:index/ServiceVclProductEnablement:ServiceVclProductEnablement" }, + "rateLimiters": { + "type": "array", + "items": { + "$ref": "#/types/fastly:index/ServiceVclRateLimiter:ServiceVclRateLimiter" + } + }, "requestSettings": { "type": "array", "items": { @@ -9476,7 +6038,7 @@ } }, "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{{% 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 domains: [{\n name: \"example.com\",\n comment: \"demo\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n type: \"PREFETCH\",\n statement: \"req.backend.is_origin\",\n },\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n responseObjects: [{\n name: \"WAF_Response\",\n status: 403,\n response: \"Forbidden\",\n contentType: \"text/html\",\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n requestCondition: \"WAF_always_false\",\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n forceDestroy: true,\n});\nconst waf = new fastly.ServiceWafConfiguration(\"waf\", {\n wafId: demo.waf.apply(waf =\u003e waf?.wafId),\n httpViolationScoreThreshold: 100,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n comment=\"demo\",\n )],\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 type=\"PREFETCH\",\n statement=\"req.backend.is_origin\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n name=\"WAF_Response\",\n status=403,\n response=\"Forbidden\",\n content_type=\"text/html\",\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n request_condition=\"WAF_always_false\",\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ),\n force_destroy=True)\nwaf = fastly.ServiceWafConfiguration(\"waf\",\n waf_id=demo.waf.waf_id,\n http_violation_score_threshold=100)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n Comment = \"demo\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Type = \"PREFETCH\",\n Statement = \"req.backend.is_origin\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n ResponseObjects = new[]\n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Name = \"WAF_Response\",\n Status = 403,\n Response = \"Forbidden\",\n ContentType = \"text/html\",\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n RequestCondition = \"WAF_always_false\",\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n ForceDestroy = true,\n });\n\n var waf = new Fastly.ServiceWafConfiguration(\"waf\", new()\n {\n WafId = demo.Waf.Apply(waf =\u003e waf?.WafId),\n HttpViolationScoreThreshold = 100,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\tResponseObjects: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026fastly.ServiceVclWafArgs{\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\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceWafConfiguration(ctx, \"waf\", \u0026fastly.ServiceWafConfigurationArgs{\n\t\t\tWafId: demo.Waf.ApplyT(func(waf fastly.ServiceVclWaf) (*string, error) {\n\t\t\t\treturn \u0026waf.WafId, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\tHttpViolationScoreThreshold: pulumi.Int(100),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n comment: demo\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n type: PREFETCH\n statement: req.backend.is_origin\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n responseObjects:\n - name: WAF_Response\n status: '403'\n response: Forbidden\n contentType: text/html\n content: \u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\n requestCondition: WAF_always_false\n waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\n forceDestroy: true\n waf:\n type: fastly:ServiceWafConfiguration\n properties:\n wafId: ${demo.waf.wafId}\n httpViolationScoreThreshold: 100\n```\n\nUsage with rules:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n domains: [{\n name: \"example.com\",\n comment: \"demo\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n type: \"PREFETCH\",\n statement: \"req.backend.is_origin\",\n },\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n responseObjects: [{\n name: \"WAF_Response\",\n status: 403,\n response: \"Forbidden\",\n contentType: \"text/html\",\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n requestCondition: \"WAF_always_false\",\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n forceDestroy: true,\n});\nconst waf = new fastly.ServiceWafConfiguration(\"waf\", {\n wafId: demo.waf.apply(waf =\u003e waf?.wafId),\n httpViolationScoreThreshold: 100,\n rules: [{\n modsecRuleId: 1010090,\n revision: 1,\n status: \"log\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n comment=\"demo\",\n )],\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 type=\"PREFETCH\",\n statement=\"req.backend.is_origin\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n name=\"WAF_Response\",\n status=403,\n response=\"Forbidden\",\n content_type=\"text/html\",\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n request_condition=\"WAF_always_false\",\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ),\n force_destroy=True)\nwaf = fastly.ServiceWafConfiguration(\"waf\",\n waf_id=demo.waf.waf_id,\n http_violation_score_threshold=100,\n rules=[fastly.ServiceWafConfigurationRuleArgs(\n modsec_rule_id=1010090,\n revision=1,\n status=\"log\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n Comment = \"demo\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Type = \"PREFETCH\",\n Statement = \"req.backend.is_origin\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n ResponseObjects = new[]\n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Name = \"WAF_Response\",\n Status = 403,\n Response = \"Forbidden\",\n ContentType = \"text/html\",\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n RequestCondition = \"WAF_always_false\",\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n ForceDestroy = true,\n });\n\n var waf = new Fastly.ServiceWafConfiguration(\"waf\", new()\n {\n WafId = demo.Waf.Apply(waf =\u003e waf?.WafId),\n HttpViolationScoreThreshold = 100,\n Rules = new[]\n {\n new Fastly.Inputs.ServiceWafConfigurationRuleArgs\n {\n ModsecRuleId = 1010090,\n Revision = 1,\n Status = \"log\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\tResponseObjects: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026fastly.ServiceVclWafArgs{\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\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceWafConfiguration(ctx, \"waf\", \u0026fastly.ServiceWafConfigurationArgs{\n\t\t\tWafId: demo.Waf.ApplyT(func(waf fastly.ServiceVclWaf) (*string, error) {\n\t\t\t\treturn \u0026waf.WafId, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\tHttpViolationScoreThreshold: pulumi.Int(100),\n\t\t\tRules: fastly.ServiceWafConfigurationRuleArray{\n\t\t\t\t\u0026fastly.ServiceWafConfigurationRuleArgs{\n\t\t\t\t\tModsecRuleId: pulumi.Int(1010090),\n\t\t\t\t\tRevision: pulumi.Int(1),\n\t\t\t\t\tStatus: pulumi.String(\"log\"),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport com.pulumi.fastly.inputs.ServiceWafConfigurationRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .rules(ServiceWafConfigurationRuleArgs.builder()\n .modsecRuleId(1010090)\n .revision(1)\n .status(\"log\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n comment: demo\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n type: PREFETCH\n statement: req.backend.is_origin\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n responseObjects:\n - name: WAF_Response\n status: '403'\n response: Forbidden\n contentType: text/html\n content: \u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\n requestCondition: WAF_always_false\n waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\n forceDestroy: true\n waf:\n type: fastly:ServiceWafConfiguration\n properties:\n wafId: ${demo.waf.wafId}\n httpViolationScoreThreshold: 100\n rules:\n - modsecRuleId: 1.01009e+06\n revision: 1\n status: log\n```\n\nUsage with rule exclusions:\n\n\u003e **Warning:** Rule exclusions are part of a **beta release**, which may be subject to breaking changes and improvements over time. For more information, see our [product and feature lifecycle](https://docs.fastly.com/products/fastly-product-lifecycle#beta) descriptions.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n domains: [{\n name: \"example.com\",\n comment: \"demo\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n type: \"PREFETCH\",\n statement: \"req.backend.is_origin\",\n },\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n responseObjects: [{\n name: \"WAF_Response\",\n status: 403,\n response: \"Forbidden\",\n contentType: \"text/html\",\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n requestCondition: \"WAF_always_false\",\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n forceDestroy: true,\n});\nconst waf = new fastly.ServiceWafConfiguration(\"waf\", {\n wafId: demo.waf.apply(waf =\u003e waf?.wafId),\n httpViolationScoreThreshold: 100,\n rules: [{\n modsecRuleId: 2029718,\n revision: 1,\n status: \"log\",\n }],\n ruleExclusions: [{\n name: \"index page\",\n exclusionType: \"rule\",\n condition: \"req.url.basename == \\\"index.html\\\"\",\n modsecRuleIds: [2029718],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n comment=\"demo\",\n )],\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 type=\"PREFETCH\",\n statement=\"req.backend.is_origin\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n name=\"WAF_Response\",\n status=403,\n response=\"Forbidden\",\n content_type=\"text/html\",\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n request_condition=\"WAF_always_false\",\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ),\n force_destroy=True)\nwaf = fastly.ServiceWafConfiguration(\"waf\",\n waf_id=demo.waf.waf_id,\n http_violation_score_threshold=100,\n rules=[fastly.ServiceWafConfigurationRuleArgs(\n modsec_rule_id=2029718,\n revision=1,\n status=\"log\",\n )],\n rule_exclusions=[fastly.ServiceWafConfigurationRuleExclusionArgs(\n name=\"index page\",\n exclusion_type=\"rule\",\n condition=\"req.url.basename == \\\"index.html\\\"\",\n modsec_rule_ids=[2029718],\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n Comment = \"demo\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Type = \"PREFETCH\",\n Statement = \"req.backend.is_origin\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n ResponseObjects = new[]\n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Name = \"WAF_Response\",\n Status = 403,\n Response = \"Forbidden\",\n ContentType = \"text/html\",\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n RequestCondition = \"WAF_always_false\",\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n ForceDestroy = true,\n });\n\n var waf = new Fastly.ServiceWafConfiguration(\"waf\", new()\n {\n WafId = demo.Waf.Apply(waf =\u003e waf?.WafId),\n HttpViolationScoreThreshold = 100,\n Rules = new[]\n {\n new Fastly.Inputs.ServiceWafConfigurationRuleArgs\n {\n ModsecRuleId = 2029718,\n Revision = 1,\n Status = \"log\",\n },\n },\n RuleExclusions = new[]\n {\n new Fastly.Inputs.ServiceWafConfigurationRuleExclusionArgs\n {\n Name = \"index page\",\n ExclusionType = \"rule\",\n Condition = \"req.url.basename == \\\"index.html\\\"\",\n ModsecRuleIds = new[]\n {\n 2029718,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\tResponseObjects: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026fastly.ServiceVclWafArgs{\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\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceWafConfiguration(ctx, \"waf\", \u0026fastly.ServiceWafConfigurationArgs{\n\t\t\tWafId: demo.Waf.ApplyT(func(waf fastly.ServiceVclWaf) (*string, error) {\n\t\t\t\treturn \u0026waf.WafId, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\tHttpViolationScoreThreshold: pulumi.Int(100),\n\t\t\tRules: fastly.ServiceWafConfigurationRuleArray{\n\t\t\t\t\u0026fastly.ServiceWafConfigurationRuleArgs{\n\t\t\t\t\tModsecRuleId: pulumi.Int(2029718),\n\t\t\t\t\tRevision: pulumi.Int(1),\n\t\t\t\t\tStatus: pulumi.String(\"log\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRuleExclusions: fastly.ServiceWafConfigurationRuleExclusionArray{\n\t\t\t\t\u0026fastly.ServiceWafConfigurationRuleExclusionArgs{\n\t\t\t\t\tName: pulumi.String(\"index page\"),\n\t\t\t\t\tExclusionType: pulumi.String(\"rule\"),\n\t\t\t\t\tCondition: pulumi.String(\"req.url.basename == \\\"index.html\\\"\"),\n\t\t\t\t\tModsecRuleIds: pulumi.IntArray{\n\t\t\t\t\t\tpulumi.Int(2029718),\n\t\t\t\t\t},\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport com.pulumi.fastly.inputs.ServiceWafConfigurationRuleArgs;\nimport com.pulumi.fastly.inputs.ServiceWafConfigurationRuleExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .rules(ServiceWafConfigurationRuleArgs.builder()\n .modsecRuleId(2029718)\n .revision(1)\n .status(\"log\")\n .build())\n .ruleExclusions(ServiceWafConfigurationRuleExclusionArgs.builder()\n .name(\"index page\")\n .exclusionType(\"rule\")\n .condition(\"req.url.basename == \\\"index.html\\\"\")\n .modsecRuleIds(2029718)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n comment: demo\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n type: PREFETCH\n statement: req.backend.is_origin\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n responseObjects:\n - name: WAF_Response\n status: '403'\n response: Forbidden\n contentType: text/html\n content: \u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\n requestCondition: WAF_always_false\n waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\n forceDestroy: true\n waf:\n type: fastly:ServiceWafConfiguration\n properties:\n wafId: ${demo.waf.wafId}\n httpViolationScoreThreshold: 100\n rules:\n - modsecRuleId: 2.029718e+06\n revision: 1\n status: log\n ruleExclusions:\n - name: index page\n exclusionType: rule\n condition: req.url.basename == \"index.html\"\n modsecRuleIds:\n - 2.029718e+06\n```\n\nUsage with rules from data source:\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n\nUsage with support for individual rule configuration (this is the suggested pattern):\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n final var individualRules = config.get(\"individualRules\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(202)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n\nUsage with support for specific rule revision configuration:\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n final var specificRuleRevisions = config.get(\"specificRuleRevisions\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(202)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n\nUsage omitting rule revision field. The first time this provider is applied, the latest rule revisions are associated with the WAF. Any subsequent apply would not alter the rule revisions.\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n final var individualRules = config.get(\"individualRules\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(202)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n ctx.export(\"rules\", waf.rules());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\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 ", + "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{{% 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 domains: [{\n name: \"example.com\",\n comment: \"demo\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n type: \"PREFETCH\",\n statement: \"req.backend.is_origin\",\n },\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n responseObjects: [{\n name: \"WAF_Response\",\n status: 403,\n response: \"Forbidden\",\n contentType: \"text/html\",\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n requestCondition: \"WAF_always_false\",\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n forceDestroy: true,\n});\nconst waf = new fastly.ServiceWafConfiguration(\"waf\", {\n wafId: demo.waf.apply(waf =\u003e waf?.wafId),\n httpViolationScoreThreshold: 100,\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n comment=\"demo\",\n )],\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 type=\"PREFETCH\",\n statement=\"req.backend.is_origin\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n name=\"WAF_Response\",\n status=403,\n response=\"Forbidden\",\n content_type=\"text/html\",\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n request_condition=\"WAF_always_false\",\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ),\n force_destroy=True)\nwaf = fastly.ServiceWafConfiguration(\"waf\",\n waf_id=demo.waf.waf_id,\n http_violation_score_threshold=100)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n Comment = \"demo\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Type = \"PREFETCH\",\n Statement = \"req.backend.is_origin\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n ResponseObjects = new[]\n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Name = \"WAF_Response\",\n Status = 403,\n Response = \"Forbidden\",\n ContentType = \"text/html\",\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n RequestCondition = \"WAF_always_false\",\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n ForceDestroy = true,\n });\n\n var waf = new Fastly.ServiceWafConfiguration(\"waf\", new()\n {\n WafId = demo.Waf.Apply(waf =\u003e waf?.WafId),\n HttpViolationScoreThreshold = 100,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\tResponseObjects: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026fastly.ServiceVclWafArgs{\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\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceWafConfiguration(ctx, \"waf\", \u0026fastly.ServiceWafConfigurationArgs{\n\t\t\tWafId: demo.Waf.ApplyT(func(waf fastly.ServiceVclWaf) (*string, error) {\n\t\t\t\treturn \u0026waf.WafId, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\tHttpViolationScoreThreshold: pulumi.Int(100),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n comment: demo\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n type: PREFETCH\n statement: req.backend.is_origin\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n responseObjects:\n - name: WAF_Response\n status: '403'\n response: Forbidden\n contentType: text/html\n content: \u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\n requestCondition: WAF_always_false\n waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\n forceDestroy: true\n waf:\n type: fastly:ServiceWafConfiguration\n properties:\n wafId: ${demo.waf.wafId}\n httpViolationScoreThreshold: 100\n```\n\nUsage with rules:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n domains: [{\n name: \"example.com\",\n comment: \"demo\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n type: \"PREFETCH\",\n statement: \"req.backend.is_origin\",\n },\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n responseObjects: [{\n name: \"WAF_Response\",\n status: 403,\n response: \"Forbidden\",\n contentType: \"text/html\",\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n requestCondition: \"WAF_always_false\",\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n forceDestroy: true,\n});\nconst waf = new fastly.ServiceWafConfiguration(\"waf\", {\n wafId: demo.waf.apply(waf =\u003e waf?.wafId),\n httpViolationScoreThreshold: 100,\n rules: [{\n modsecRuleId: 1010090,\n revision: 1,\n status: \"log\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n comment=\"demo\",\n )],\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 type=\"PREFETCH\",\n statement=\"req.backend.is_origin\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n name=\"WAF_Response\",\n status=403,\n response=\"Forbidden\",\n content_type=\"text/html\",\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n request_condition=\"WAF_always_false\",\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ),\n force_destroy=True)\nwaf = fastly.ServiceWafConfiguration(\"waf\",\n waf_id=demo.waf.waf_id,\n http_violation_score_threshold=100,\n rules=[fastly.ServiceWafConfigurationRuleArgs(\n modsec_rule_id=1010090,\n revision=1,\n status=\"log\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n Comment = \"demo\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Type = \"PREFETCH\",\n Statement = \"req.backend.is_origin\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n ResponseObjects = new[]\n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Name = \"WAF_Response\",\n Status = 403,\n Response = \"Forbidden\",\n ContentType = \"text/html\",\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n RequestCondition = \"WAF_always_false\",\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n ForceDestroy = true,\n });\n\n var waf = new Fastly.ServiceWafConfiguration(\"waf\", new()\n {\n WafId = demo.Waf.Apply(waf =\u003e waf?.WafId),\n HttpViolationScoreThreshold = 100,\n Rules = new[]\n {\n new Fastly.Inputs.ServiceWafConfigurationRuleArgs\n {\n ModsecRuleId = 1010090,\n Revision = 1,\n Status = \"log\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\tResponseObjects: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026fastly.ServiceVclWafArgs{\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\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceWafConfiguration(ctx, \"waf\", \u0026fastly.ServiceWafConfigurationArgs{\n\t\t\tWafId: demo.Waf.ApplyT(func(waf fastly.ServiceVclWaf) (*string, error) {\n\t\t\t\treturn \u0026waf.WafId, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\tHttpViolationScoreThreshold: pulumi.Int(100),\n\t\t\tRules: fastly.ServiceWafConfigurationRuleArray{\n\t\t\t\t\u0026fastly.ServiceWafConfigurationRuleArgs{\n\t\t\t\t\tModsecRuleId: pulumi.Int(1010090),\n\t\t\t\t\tRevision: pulumi.Int(1),\n\t\t\t\t\tStatus: pulumi.String(\"log\"),\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport com.pulumi.fastly.inputs.ServiceWafConfigurationRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .rules(ServiceWafConfigurationRuleArgs.builder()\n .modsecRuleId(1010090)\n .revision(1)\n .status(\"log\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n comment: demo\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n type: PREFETCH\n statement: req.backend.is_origin\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n responseObjects:\n - name: WAF_Response\n status: '403'\n response: Forbidden\n contentType: text/html\n content: \u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\n requestCondition: WAF_always_false\n waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\n forceDestroy: true\n waf:\n type: fastly:ServiceWafConfiguration\n properties:\n wafId: ${demo.waf.wafId}\n httpViolationScoreThreshold: 100\n rules:\n - modsecRuleId: 1.01009e+06\n revision: 1\n status: log\n```\n\nUsage with rule exclusions:\n\n\u003e **Warning:** Rule exclusions are part of a **beta release**, which may be subject to breaking changes and improvements over time. For more information, see our [product and feature lifecycle](https://docs.fastly.com/products/fastly-product-lifecycle#beta) descriptions.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fastly from \"@pulumi/fastly\";\n\nconst demo = new fastly.ServiceVcl(\"demo\", {\n domains: [{\n name: \"example.com\",\n comment: \"demo\",\n }],\n backends: [{\n address: \"127.0.0.1\",\n name: \"origin1\",\n port: 80,\n }],\n conditions: [\n {\n name: \"WAF_Prefetch\",\n type: \"PREFETCH\",\n statement: \"req.backend.is_origin\",\n },\n {\n name: \"WAF_always_false\",\n statement: \"false\",\n type: \"REQUEST\",\n },\n ],\n responseObjects: [{\n name: \"WAF_Response\",\n status: 403,\n response: \"Forbidden\",\n contentType: \"text/html\",\n content: \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n requestCondition: \"WAF_always_false\",\n }],\n waf: {\n prefetchCondition: \"WAF_Prefetch\",\n responseObject: \"WAF_Response\",\n },\n forceDestroy: true,\n});\nconst waf = new fastly.ServiceWafConfiguration(\"waf\", {\n wafId: demo.waf.apply(waf =\u003e waf?.wafId),\n httpViolationScoreThreshold: 100,\n rules: [{\n modsecRuleId: 2029718,\n revision: 1,\n status: \"log\",\n }],\n ruleExclusions: [{\n name: \"index page\",\n exclusionType: \"rule\",\n condition: \"req.url.basename == \\\"index.html\\\"\",\n modsecRuleIds: [2029718],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.ServiceVcl(\"demo\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n comment=\"demo\",\n )],\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 type=\"PREFETCH\",\n statement=\"req.backend.is_origin\",\n ),\n fastly.ServiceVclConditionArgs(\n name=\"WAF_always_false\",\n statement=\"false\",\n type=\"REQUEST\",\n ),\n ],\n response_objects=[fastly.ServiceVclResponseObjectArgs(\n name=\"WAF_Response\",\n status=403,\n response=\"Forbidden\",\n content_type=\"text/html\",\n content=\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n request_condition=\"WAF_always_false\",\n )],\n waf=fastly.ServiceVclWafArgs(\n prefetch_condition=\"WAF_Prefetch\",\n response_object=\"WAF_Response\",\n ),\n force_destroy=True)\nwaf = fastly.ServiceWafConfiguration(\"waf\",\n waf_id=demo.waf.waf_id,\n http_violation_score_threshold=100,\n rules=[fastly.ServiceWafConfigurationRuleArgs(\n modsec_rule_id=2029718,\n revision=1,\n status=\"log\",\n )],\n rule_exclusions=[fastly.ServiceWafConfigurationRuleExclusionArgs(\n name=\"index page\",\n exclusion_type=\"rule\",\n condition=\"req.url.basename == \\\"index.html\\\"\",\n modsec_rule_ids=[2029718],\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.ServiceVcl(\"demo\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n Comment = \"demo\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"origin1\",\n Port = 80,\n },\n },\n Conditions = new[]\n {\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_Prefetch\",\n Type = \"PREFETCH\",\n Statement = \"req.backend.is_origin\",\n },\n new Fastly.Inputs.ServiceVclConditionArgs\n {\n Name = \"WAF_always_false\",\n Statement = \"false\",\n Type = \"REQUEST\",\n },\n },\n ResponseObjects = new[]\n {\n new Fastly.Inputs.ServiceVclResponseObjectArgs\n {\n Name = \"WAF_Response\",\n Status = 403,\n Response = \"Forbidden\",\n ContentType = \"text/html\",\n Content = \"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\",\n RequestCondition = \"WAF_always_false\",\n },\n },\n Waf = new Fastly.Inputs.ServiceVclWafArgs\n {\n PrefetchCondition = \"WAF_Prefetch\",\n ResponseObject = \"WAF_Response\",\n },\n ForceDestroy = true,\n });\n\n var waf = new Fastly.ServiceWafConfiguration(\"waf\", new()\n {\n WafId = demo.Waf.Apply(waf =\u003e waf?.WafId),\n HttpViolationScoreThreshold = 100,\n Rules = new[]\n {\n new Fastly.Inputs.ServiceWafConfigurationRuleArgs\n {\n ModsecRuleId = 2029718,\n Revision = 1,\n Status = \"log\",\n },\n },\n RuleExclusions = new[]\n {\n new Fastly.Inputs.ServiceWafConfigurationRuleExclusionArgs\n {\n Name = \"index page\",\n ExclusionType = \"rule\",\n Condition = \"req.url.basename == \\\"index.html\\\"\",\n ModsecRuleIds = new[]\n {\n 2029718,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t\tComment: pulumi.String(\"demo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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: fastly.ServiceVclConditionArray{\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Prefetch\"),\n\t\t\t\t\tType: pulumi.String(\"PREFETCH\"),\n\t\t\t\t\tStatement: pulumi.String(\"req.backend.is_origin\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclConditionArgs{\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\tResponseObjects: fastly.ServiceVclResponseObjectArray{\n\t\t\t\t\u0026fastly.ServiceVclResponseObjectArgs{\n\t\t\t\t\tName: pulumi.String(\"WAF_Response\"),\n\t\t\t\t\tStatus: pulumi.Int(403),\n\t\t\t\t\tResponse: pulumi.String(\"Forbidden\"),\n\t\t\t\t\tContentType: pulumi.String(\"text/html\"),\n\t\t\t\t\tContent: pulumi.String(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\"),\n\t\t\t\t\tRequestCondition: pulumi.String(\"WAF_always_false\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tWaf: \u0026fastly.ServiceVclWafArgs{\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\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fastly.NewServiceWafConfiguration(ctx, \"waf\", \u0026fastly.ServiceWafConfigurationArgs{\n\t\t\tWafId: demo.Waf.ApplyT(func(waf fastly.ServiceVclWaf) (*string, error) {\n\t\t\t\treturn \u0026waf.WafId, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\tHttpViolationScoreThreshold: pulumi.Int(100),\n\t\t\tRules: fastly.ServiceWafConfigurationRuleArray{\n\t\t\t\t\u0026fastly.ServiceWafConfigurationRuleArgs{\n\t\t\t\t\tModsecRuleId: pulumi.Int(2029718),\n\t\t\t\t\tRevision: pulumi.Int(1),\n\t\t\t\t\tStatus: pulumi.String(\"log\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRuleExclusions: fastly.ServiceWafConfigurationRuleExclusionArray{\n\t\t\t\t\u0026fastly.ServiceWafConfigurationRuleExclusionArgs{\n\t\t\t\t\tName: pulumi.String(\"index page\"),\n\t\t\t\t\tExclusionType: pulumi.String(\"rule\"),\n\t\t\t\t\tCondition: pulumi.String(\"req.url.basename == \\\"index.html\\\"\"),\n\t\t\t\t\tModsecRuleIds: pulumi.IntArray{\n\t\t\t\t\t\tpulumi.Int(2029718),\n\t\t\t\t\t},\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport com.pulumi.fastly.inputs.ServiceWafConfigurationRuleArgs;\nimport com.pulumi.fastly.inputs.ServiceWafConfigurationRuleExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .rules(ServiceWafConfigurationRuleArgs.builder()\n .modsecRuleId(2029718)\n .revision(1)\n .status(\"log\")\n .build())\n .ruleExclusions(ServiceWafConfigurationRuleExclusionArgs.builder()\n .name(\"index page\")\n .exclusionType(\"rule\")\n .condition(\"req.url.basename == \\\"index.html\\\"\")\n .modsecRuleIds(2029718)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n comment: demo\n backends:\n - address: 127.0.0.1\n name: origin1\n port: 80\n conditions:\n - name: WAF_Prefetch\n type: PREFETCH\n statement: req.backend.is_origin\n - name: WAF_always_false\n statement: 'false'\n type: REQUEST\n responseObjects:\n - name: WAF_Response\n status: '403'\n response: Forbidden\n contentType: text/html\n content: \u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\n requestCondition: WAF_always_false\n waf:\n prefetchCondition: WAF_Prefetch\n responseObject: WAF_Response\n forceDestroy: true\n waf:\n type: fastly:ServiceWafConfiguration\n properties:\n wafId: ${demo.waf.wafId}\n httpViolationScoreThreshold: 100\n rules:\n - modsecRuleId: 2.029718e+06\n revision: 1\n status: log\n ruleExclusions:\n - name: index page\n exclusionType: rule\n condition: req.url.basename == \"index.html\"\n modsecRuleIds:\n - 2.029718e+06\n```\n\nUsage with rules from data source:\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(100)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n\nUsage with support for individual rule configuration (this is the suggested pattern):\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n final var individualRules = config.get(\"individualRules\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(202)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n\nUsage with support for specific rule revision configuration:\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n final var specificRuleRevisions = config.get(\"specificRuleRevisions\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(202)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n\nUsage omitting rule revision field. The first time this provider is applied, the latest rule revisions are associated with the WAF. Any subsequent apply would not alter the rule revisions.\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.inputs.ServiceVclConditionArgs;\nimport com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs;\nimport com.pulumi.fastly.inputs.ServiceVclWafArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetWafRulesArgs;\nimport com.pulumi.fastly.ServiceWafConfiguration;\nimport com.pulumi.fastly.ServiceWafConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var config = ctx.config();\n final var typeStatus = config.get(\"typeStatus\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n final var individualRules = config.get(\"individualRules\").orElse(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference));\n var demo = new ServiceVcl(\"demo\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .comment(\"demo\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"origin1\")\n .port(80)\n .build())\n .conditions( \n ServiceVclConditionArgs.builder()\n .name(\"WAF_Prefetch\")\n .type(\"PREFETCH\")\n .statement(\"req.backend.is_origin\")\n .build(),\n ServiceVclConditionArgs.builder()\n .name(\"WAF_always_false\")\n .statement(\"false\")\n .type(\"REQUEST\")\n .build())\n .responseObjects(ServiceVclResponseObjectArgs.builder()\n .name(\"WAF_Response\")\n .status(\"403\")\n .response(\"Forbidden\")\n .contentType(\"text/html\")\n .content(\"\u003chtml\u003e\u003cbody\u003eForbidden\u003c/body\u003e\u003c/html\u003e\")\n .requestCondition(\"WAF_always_false\")\n .build())\n .waf(ServiceVclWafArgs.builder()\n .prefetchCondition(\"WAF_Prefetch\")\n .responseObject(\"WAF_Response\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var owasp = FastlyFunctions.getWafRules(GetWafRulesArgs.builder()\n .publishers(\"owasp\")\n .build());\n\n var waf = new ServiceWafConfiguration(\"waf\", ServiceWafConfigurationArgs.builder() \n .wafId(demo.waf().applyValue(waf -\u003e waf.wafId()))\n .httpViolationScoreThreshold(202)\n .dynamic(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n ctx.export(\"rules\", waf.rules());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\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", @@ -9948,7 +6510,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoServiceVcl = new Fastly.ServiceVcl(\"demoServiceVcl\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n },\n },\n ForceDestroy = true,\n });\n\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new()\n {\n KeyPem = \"...\",\n });\n\n var demoTlsCertificate = new Fastly.TlsCertificate(\"demoTlsCertificate\", new()\n {\n CertificateBody = \"...\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n demoTlsPrivateKey,\n },\n });\n\n var test = new Fastly.TlsActivation(\"test\", new()\n {\n CertificateId = demoTlsCertificate.Id,\n Domain = \"example.com\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n demoServiceVcl,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsCertificate;\nimport com.pulumi.fastly.TlsCertificateArgs;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoServiceVcl = new ServiceVcl(\"demoServiceVcl\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"localhost\")\n .build())\n .forceDestroy(true)\n .build());\n\n var demoTlsPrivateKey = new TlsPrivateKey(\"demoTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(\"...\")\n .build());\n\n var demoTlsCertificate = new TlsCertificate(\"demoTlsCertificate\", TlsCertificateArgs.builder() \n .certificateBody(\"...\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(demoTlsPrivateKey)\n .build());\n\n var test = new TlsActivation(\"test\", TlsActivationArgs.builder() \n .certificateId(demoTlsCertificate.id())\n .domain(\"example.com\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(demoServiceVcl)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demoServiceVcl:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n backends:\n - address: 127.0.0.1\n name: localhost\n forceDestroy: true\n demoTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: '...'\n demoTlsCertificate:\n type: fastly:TlsCertificate\n properties:\n certificateBody: '...'\n options:\n dependson:\n - ${demoTlsPrivateKey}\n test:\n type: fastly:TlsActivation\n properties:\n certificateId: ${demoTlsCertificate.id}\n domain: example.com\n options:\n dependson:\n - ${demoServiceVcl}\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoServiceVcl = new Fastly.ServiceVcl(\"demoServiceVcl\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n },\n },\n Backends = new[]\n {\n new Fastly.Inputs.ServiceVclBackendArgs\n {\n Address = \"127.0.0.1\",\n Name = \"localhost\",\n },\n },\n ForceDestroy = true,\n });\n\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new()\n {\n KeyPem = \"...\",\n });\n\n var demoTlsCertificate = new Fastly.TlsCertificate(\"demoTlsCertificate\", new()\n {\n CertificateBody = \"...\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n demoTlsPrivateKey,\n },\n });\n\n var test = new Fastly.TlsActivation(\"test\", new()\n {\n CertificateId = demoTlsCertificate.Id,\n Domain = \"example.com\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n demoServiceVcl,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackends: fastly.ServiceVclBackendArray{\n\t\t\t\t\u0026fastly.ServiceVclBackendArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclBackendArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsCertificate;\nimport com.pulumi.fastly.TlsCertificateArgs;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoServiceVcl = new ServiceVcl(\"demoServiceVcl\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .build())\n .backends(ServiceVclBackendArgs.builder()\n .address(\"127.0.0.1\")\n .name(\"localhost\")\n .build())\n .forceDestroy(true)\n .build());\n\n var demoTlsPrivateKey = new TlsPrivateKey(\"demoTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(\"...\")\n .build());\n\n var demoTlsCertificate = new TlsCertificate(\"demoTlsCertificate\", TlsCertificateArgs.builder() \n .certificateBody(\"...\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(demoTlsPrivateKey)\n .build());\n\n var test = new TlsActivation(\"test\", TlsActivationArgs.builder() \n .certificateId(demoTlsCertificate.id())\n .domain(\"example.com\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(demoServiceVcl)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demoServiceVcl:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n backends:\n - address: 127.0.0.1\n name: localhost\n forceDestroy: true\n demoTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: '...'\n demoTlsCertificate:\n type: fastly:TlsCertificate\n properties:\n certificateBody: '...'\n options:\n dependson:\n - ${demoTlsPrivateKey}\n test:\n type: fastly:TlsActivation\n properties:\n certificateId: ${demoTlsCertificate.id}\n domain: example.com\n options:\n dependson:\n - ${demoServiceVcl}\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", @@ -10019,7 +6581,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var cert = new Tls.SelfSignedCert(\"cert\", new()\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = new[]\n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = new[]\n {\n \"cert_signing\",\n \"server_auth\",\n },\n DnsNames = new[]\n {\n \"example.com\",\n },\n });\n\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new()\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n\n var example = new Fastly.TlsCertificate(\"example\", new()\n {\n CertificateBody = cert.CertPem,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n keyTlsPrivateKey,\n },\n });\n\n // The private key has to be present before the certificate can be uploaded\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: tls.SelfSignedCertSubjectArray{\n\t\t\t\t\u0026tls.SelfSignedCertSubjectArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsCertificate;\nimport com.pulumi.fastly.TlsCertificateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyPrivateKey = new PrivateKey(\"keyPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var cert = new SelfSignedCert(\"cert\", SelfSignedCertArgs.builder() \n .keyAlgorithm(keyPrivateKey.algorithm())\n .privateKeyPem(keyPrivateKey.privateKeyPem())\n .subjects(SelfSignedCertSubjectArgs.builder()\n .commonName(\"example.com\")\n .build())\n .isCaCertificate(true)\n .validityPeriodHours(360)\n .allowedUses( \n \"cert_signing\",\n \"server_auth\")\n .dnsNames(\"example.com\")\n .build());\n\n var keyTlsPrivateKey = new TlsPrivateKey(\"keyTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(keyPrivateKey.privateKeyPem())\n .build());\n\n var example = new TlsCertificate(\"example\", TlsCertificateArgs.builder() \n .certificateBody(cert.certPem())\n .build(), CustomResourceOptions.builder()\n .dependsOn(keyTlsPrivateKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n cert:\n type: tls:SelfSignedCert\n properties:\n keyAlgorithm: ${keyPrivateKey.algorithm}\n privateKeyPem: ${keyPrivateKey.privateKeyPem}\n subjects:\n - commonName: example.com\n isCaCertificate: true\n validityPeriodHours: 360\n allowedUses:\n - cert_signing\n - server_auth\n dnsNames:\n - example.com\n keyTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: ${keyPrivateKey.privateKeyPem}\n example:\n type: fastly:TlsCertificate\n properties:\n certificateBody: ${cert.certPem}\n options:\n dependson:\n - ${keyTlsPrivateKey}\n```\n{{% /example %}}\n{{% /examples %}}\n## Updating certificates\n\nThere are three scenarios for updating a certificate:\n\n1. The certificate is about to expire but the private key stays the same.\n2. The certificate is about to expire but the private key is changing.\n3. The domains on the certificate are changing.\n\nIn the first scenario you only need to update the `certificate_body` attribute of the `fastly.TlsCertificate` resource, while the other scenarios require a new private key (`fastly.TlsPrivateKey`) and certificate (`fastly.TlsCertificate`) to be generated.\n\nWhen updating both the `fastly.TlsPrivateKey` and `fastly.TlsCertificate` resources, they 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\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var cert = new Tls.SelfSignedCert(\"cert\", new()\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = new[]\n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = new[]\n {\n \"cert_signing\",\n \"server_auth\",\n },\n DnsNames = new[]\n {\n \"example.com\",\n },\n });\n\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new()\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n\n var example = new Fastly.TlsCertificate(\"example\", new()\n {\n CertificateBody = cert.CertPem,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n keyTlsPrivateKey,\n },\n });\n\n // The private key has to be present before the certificate can be uploaded\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: tls.SelfSignedCertSubjectArray{\n\t\t\t\t\u0026tls.SelfSignedCertSubjectArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsCertificate;\nimport com.pulumi.fastly.TlsCertificateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyPrivateKey = new PrivateKey(\"keyPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var cert = new SelfSignedCert(\"cert\", SelfSignedCertArgs.builder() \n .keyAlgorithm(keyPrivateKey.algorithm())\n .privateKeyPem(keyPrivateKey.privateKeyPem())\n .subjects(SelfSignedCertSubjectArgs.builder()\n .commonName(\"example.com\")\n .build())\n .isCaCertificate(true)\n .validityPeriodHours(360)\n .allowedUses( \n \"cert_signing\",\n \"server_auth\")\n .dnsNames(\"example.com\")\n .build());\n\n var keyTlsPrivateKey = new TlsPrivateKey(\"keyTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(keyPrivateKey.privateKeyPem())\n .build());\n\n var example = new TlsCertificate(\"example\", TlsCertificateArgs.builder() \n .certificateBody(cert.certPem())\n .build(), CustomResourceOptions.builder()\n .dependsOn(keyTlsPrivateKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n cert:\n type: tls:SelfSignedCert\n properties:\n keyAlgorithm: ${keyPrivateKey.algorithm}\n privateKeyPem: ${keyPrivateKey.privateKeyPem}\n subjects:\n - commonName: example.com\n isCaCertificate: true\n validityPeriodHours: 360\n allowedUses:\n - cert_signing\n - server_auth\n dnsNames:\n - example.com\n keyTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: ${keyPrivateKey.privateKeyPem}\n example:\n type: fastly:TlsCertificate\n properties:\n certificateBody: ${cert.certPem}\n options:\n dependson:\n - ${keyTlsPrivateKey}\n```\n{{% /example %}}\n{{% /examples %}}\n## Updating certificates\n\nThere are three scenarios for updating a certificate:\n\n1. The certificate is about to expire but the private key stays the same.\n2. The certificate is about to expire but the private key is changing.\n3. The domains on the certificate are changing.\n\nIn the first scenario you only need to update the `certificate_body` attribute of the `fastly.TlsCertificate` resource, while the other scenarios require a new private key (`fastly.TlsPrivateKey`) and certificate (`fastly.TlsCertificate`) to be generated.\n\nWhen updating both the `fastly.TlsPrivateKey` and `fastly.TlsCertificate` resources, they 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\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", @@ -10141,7 +6703,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var caKey = new Tls.PrivateKey(\"caKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var ca = new Tls.SelfSignedCert(\"ca\", new()\n {\n KeyAlgorithm = caKey.Algorithm,\n PrivateKeyPem = caKey.PrivateKeyPem,\n Subjects = new[]\n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"Example CA\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = new[]\n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n\n var example = new Tls.CertRequest(\"example\", new()\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = new[]\n {\n new Tls.Inputs.CertRequestSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n DnsNames = new[]\n {\n \"example.com\",\n \"www.example.com\",\n },\n });\n\n var certLocallySignedCert = new Tls.LocallySignedCert(\"certLocallySignedCert\", new()\n {\n CertRequestPem = example.CertRequestPem,\n CaKeyAlgorithm = caKey.Algorithm,\n CaPrivateKeyPem = caKey.PrivateKeyPem,\n CaCertPem = ca.CertPem,\n ValidityPeriodHours = 360,\n AllowedUses = new[]\n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n\n var config = Fastly.GetTlsConfiguration.Invoke(new()\n {\n TlsService = \"PLATFORM\",\n });\n\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new()\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n\n var certTlsPlatformCertificate = new Fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", new()\n {\n CertificateBody = certLocallySignedCert.CertPem,\n IntermediatesBlob = ca.CertPem,\n ConfigurationId = config.Apply(getTlsConfigurationResult =\u003e getTlsConfigurationResult.Id),\n AllowUntrustedRoot = true,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n keyTlsPrivateKey,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: tls.SelfSignedCertSubjectArray{\n\t\t\t\t\u0026tls.SelfSignedCertSubjectArgs{\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: tls.CertRequestSubjectArray{\n\t\t\t\t\u0026tls.CertRequestSubjectArgs{\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, \u0026fastly.GetTlsConfigurationArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport com.pulumi.tls.CertRequest;\nimport com.pulumi.tls.CertRequestArgs;\nimport com.pulumi.tls.inputs.CertRequestSubjectArgs;\nimport com.pulumi.tls.LocallySignedCert;\nimport com.pulumi.tls.LocallySignedCertArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsConfigurationArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsPlatformCertificate;\nimport com.pulumi.fastly.TlsPlatformCertificateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var caKey = new PrivateKey(\"caKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var keyPrivateKey = new PrivateKey(\"keyPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var ca = new SelfSignedCert(\"ca\", SelfSignedCertArgs.builder() \n .keyAlgorithm(caKey.algorithm())\n .privateKeyPem(caKey.privateKeyPem())\n .subjects(SelfSignedCertSubjectArgs.builder()\n .commonName(\"Example CA\")\n .build())\n .isCaCertificate(true)\n .validityPeriodHours(360)\n .allowedUses( \n \"cert_signing\",\n \"server_auth\")\n .build());\n\n var example = new CertRequest(\"example\", CertRequestArgs.builder() \n .keyAlgorithm(keyPrivateKey.algorithm())\n .privateKeyPem(keyPrivateKey.privateKeyPem())\n .subjects(CertRequestSubjectArgs.builder()\n .commonName(\"example.com\")\n .build())\n .dnsNames( \n \"example.com\",\n \"www.example.com\")\n .build());\n\n var certLocallySignedCert = new LocallySignedCert(\"certLocallySignedCert\", LocallySignedCertArgs.builder() \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 .build());\n\n final var config = FastlyFunctions.getTlsConfiguration(GetTlsConfigurationArgs.builder()\n .tlsService(\"PLATFORM\")\n .build());\n\n var keyTlsPrivateKey = new TlsPrivateKey(\"keyTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(keyPrivateKey.privateKeyPem())\n .build());\n\n var certTlsPlatformCertificate = new TlsPlatformCertificate(\"certTlsPlatformCertificate\", TlsPlatformCertificateArgs.builder() \n .certificateBody(certLocallySignedCert.certPem())\n .intermediatesBlob(ca.certPem())\n .configurationId(config.applyValue(getTlsConfigurationResult -\u003e getTlsConfigurationResult.id()))\n .allowUntrustedRoot(true)\n .build(), CustomResourceOptions.builder()\n .dependsOn(keyTlsPrivateKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n caKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n keyPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n ca:\n type: tls:SelfSignedCert\n properties:\n keyAlgorithm: ${caKey.algorithm}\n privateKeyPem: ${caKey.privateKeyPem}\n subjects:\n - commonName: Example CA\n isCaCertificate: true\n validityPeriodHours: 360\n allowedUses:\n - cert_signing\n - server_auth\n example:\n type: tls:CertRequest\n properties:\n keyAlgorithm: ${keyPrivateKey.algorithm}\n privateKeyPem: ${keyPrivateKey.privateKeyPem}\n subjects:\n - commonName: example.com\n dnsNames:\n - example.com\n - www.example.com\n certLocallySignedCert:\n type: tls:LocallySignedCert\n properties:\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 keyTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: ${keyPrivateKey.privateKeyPem}\n certTlsPlatformCertificate:\n type: fastly:TlsPlatformCertificate\n properties:\n certificateBody: ${certLocallySignedCert.certPem}\n intermediatesBlob: ${ca.certPem}\n configurationId: ${config.id}\n allowUntrustedRoot: true\n options:\n dependson:\n - ${keyTlsPrivateKey}\nvariables:\n config:\n fn::invoke:\n Function: fastly:getTlsConfiguration\n Arguments:\n tlsService: PLATFORM\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var caKey = new Tls.PrivateKey(\"caKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var keyPrivateKey = new Tls.PrivateKey(\"keyPrivateKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var ca = new Tls.SelfSignedCert(\"ca\", new()\n {\n KeyAlgorithm = caKey.Algorithm,\n PrivateKeyPem = caKey.PrivateKeyPem,\n Subjects = new[]\n {\n new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"Example CA\",\n },\n },\n IsCaCertificate = true,\n ValidityPeriodHours = 360,\n AllowedUses = new[]\n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n\n var example = new Tls.CertRequest(\"example\", new()\n {\n KeyAlgorithm = keyPrivateKey.Algorithm,\n PrivateKeyPem = keyPrivateKey.PrivateKeyPem,\n Subjects = new[]\n {\n new Tls.Inputs.CertRequestSubjectArgs\n {\n CommonName = \"example.com\",\n },\n },\n DnsNames = new[]\n {\n \"example.com\",\n \"www.example.com\",\n },\n });\n\n var certLocallySignedCert = new Tls.LocallySignedCert(\"certLocallySignedCert\", new()\n {\n CertRequestPem = example.CertRequestPem,\n CaKeyAlgorithm = caKey.Algorithm,\n CaPrivateKeyPem = caKey.PrivateKeyPem,\n CaCertPem = ca.CertPem,\n ValidityPeriodHours = 360,\n AllowedUses = new[]\n {\n \"cert_signing\",\n \"server_auth\",\n },\n });\n\n var config = Fastly.GetTlsConfiguration.Invoke(new()\n {\n TlsService = \"PLATFORM\",\n });\n\n var keyTlsPrivateKey = new Fastly.TlsPrivateKey(\"keyTlsPrivateKey\", new()\n {\n KeyPem = keyPrivateKey.PrivateKeyPem,\n });\n\n var certTlsPlatformCertificate = new Fastly.TlsPlatformCertificate(\"certTlsPlatformCertificate\", new()\n {\n CertificateBody = certLocallySignedCert.CertPem,\n IntermediatesBlob = ca.CertPem,\n ConfigurationId = config.Apply(getTlsConfigurationResult =\u003e getTlsConfigurationResult.Id),\n AllowUntrustedRoot = true,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n keyTlsPrivateKey,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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: tls.SelfSignedCertSubjectArray{\n\t\t\t\t\u0026tls.SelfSignedCertSubjectArgs{\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: tls.CertRequestSubjectArray{\n\t\t\t\t\u0026tls.CertRequestSubjectArgs{\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, \u0026fastly.GetTlsConfigurationArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport com.pulumi.tls.CertRequest;\nimport com.pulumi.tls.CertRequestArgs;\nimport com.pulumi.tls.inputs.CertRequestSubjectArgs;\nimport com.pulumi.tls.LocallySignedCert;\nimport com.pulumi.tls.LocallySignedCertArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsConfigurationArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport com.pulumi.fastly.TlsPlatformCertificate;\nimport com.pulumi.fastly.TlsPlatformCertificateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var caKey = new PrivateKey(\"caKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var keyPrivateKey = new PrivateKey(\"keyPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var ca = new SelfSignedCert(\"ca\", SelfSignedCertArgs.builder() \n .keyAlgorithm(caKey.algorithm())\n .privateKeyPem(caKey.privateKeyPem())\n .subjects(SelfSignedCertSubjectArgs.builder()\n .commonName(\"Example CA\")\n .build())\n .isCaCertificate(true)\n .validityPeriodHours(360)\n .allowedUses( \n \"cert_signing\",\n \"server_auth\")\n .build());\n\n var example = new CertRequest(\"example\", CertRequestArgs.builder() \n .keyAlgorithm(keyPrivateKey.algorithm())\n .privateKeyPem(keyPrivateKey.privateKeyPem())\n .subjects(CertRequestSubjectArgs.builder()\n .commonName(\"example.com\")\n .build())\n .dnsNames( \n \"example.com\",\n \"www.example.com\")\n .build());\n\n var certLocallySignedCert = new LocallySignedCert(\"certLocallySignedCert\", LocallySignedCertArgs.builder() \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 .build());\n\n final var config = FastlyFunctions.getTlsConfiguration(GetTlsConfigurationArgs.builder()\n .tlsService(\"PLATFORM\")\n .build());\n\n var keyTlsPrivateKey = new TlsPrivateKey(\"keyTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(keyPrivateKey.privateKeyPem())\n .build());\n\n var certTlsPlatformCertificate = new TlsPlatformCertificate(\"certTlsPlatformCertificate\", TlsPlatformCertificateArgs.builder() \n .certificateBody(certLocallySignedCert.certPem())\n .intermediatesBlob(ca.certPem())\n .configurationId(config.applyValue(getTlsConfigurationResult -\u003e getTlsConfigurationResult.id()))\n .allowUntrustedRoot(true)\n .build(), CustomResourceOptions.builder()\n .dependsOn(keyTlsPrivateKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n caKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n keyPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n ca:\n type: tls:SelfSignedCert\n properties:\n keyAlgorithm: ${caKey.algorithm}\n privateKeyPem: ${caKey.privateKeyPem}\n subjects:\n - commonName: Example CA\n isCaCertificate: true\n validityPeriodHours: 360\n allowedUses:\n - cert_signing\n - server_auth\n example:\n type: tls:CertRequest\n properties:\n keyAlgorithm: ${keyPrivateKey.algorithm}\n privateKeyPem: ${keyPrivateKey.privateKeyPem}\n subjects:\n - commonName: example.com\n dnsNames:\n - example.com\n - www.example.com\n certLocallySignedCert:\n type: tls:LocallySignedCert\n properties:\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 keyTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: ${keyPrivateKey.privateKeyPem}\n certTlsPlatformCertificate:\n type: fastly:TlsPlatformCertificate\n properties:\n certificateBody: ${certLocallySignedCert.certPem}\n intermediatesBlob: ${ca.certPem}\n configurationId: ${config.id}\n allowUntrustedRoot: true\n options:\n dependson:\n - ${keyTlsPrivateKey}\nvariables:\n config:\n fn::invoke:\n Function: fastly:getTlsConfiguration\n Arguments:\n tlsService: PLATFORM\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", @@ -10274,7 +6836,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoPrivateKey = new Tls.PrivateKey(\"demoPrivateKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new()\n {\n KeyPem = demoPrivateKey.PrivateKeyPem,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoPrivateKey = new PrivateKey(\"demoPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var demoTlsPrivateKey = new TlsPrivateKey(\"demoTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(demoPrivateKey.privateKeyPem())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demoPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n demoTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: ${demoPrivateKey.privateKeyPem}\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoPrivateKey = new Tls.PrivateKey(\"demoPrivateKey\", new()\n {\n Algorithm = \"RSA\",\n });\n\n var demoTlsPrivateKey = new Fastly.TlsPrivateKey(\"demoTlsPrivateKey\", new()\n {\n KeyPem = demoPrivateKey.PrivateKeyPem,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.fastly.TlsPrivateKey;\nimport com.pulumi.fastly.TlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoPrivateKey = new PrivateKey(\"demoPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .build());\n\n var demoTlsPrivateKey = new TlsPrivateKey(\"demoTlsPrivateKey\", TlsPrivateKeyArgs.builder() \n .keyPem(demoPrivateKey.privateKeyPem())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demoPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n demoTlsPrivateKey:\n type: fastly:TlsPrivateKey\n properties:\n keyPem: ${demoPrivateKey.privateKeyPem}\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", @@ -10592,7 +7154,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\", {login: \"demo@example.com\"});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.User(\"demo\", login=\"demo@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.User(\"demo\", new()\n {\n Login = \"demo@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.User;\nimport com.pulumi.fastly.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new User(\"demo\", UserArgs.builder() \n .login(\"demo@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:User\n properties:\n login: demo@example.com\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\", {login: \"demo@example.com\"});\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\ndemo = fastly.User(\"demo\", login=\"demo@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = new Fastly.User(\"demo\", new()\n {\n Login = \"demo@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.User;\nimport com.pulumi.fastly.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demo = new User(\"demo\", UserArgs.builder() \n .login(\"demo@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: fastly:User\n properties:\n login: demo@example.com\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", @@ -10675,8 +7237,60 @@ ] } }, + "fastly:index/getDictionaries:getDictionaries": { + "description": "Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version.\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 exampleServiceVcl = new fastly.ServiceVcl(\"exampleServiceVcl\", {\n domains: [{\n name: \"example.com\",\n }],\n dictionaries: [\n {\n name: \"example_1\",\n },\n {\n name: \"example_2\",\n },\n {\n name: \"example_3\",\n },\n ],\n forceDestroy: true,\n});\nconst exampleDictionaries = fastly.getDictionariesOutput({\n serviceId: exampleServiceVcl.id,\n serviceVersion: exampleServiceVcl.activeVersion,\n});\nexport const serviceDictionaries = exampleDictionaries;\n```\n```python\nimport pulumi\nimport pulumi_fastly as fastly\n\nexample_service_vcl = fastly.ServiceVcl(\"exampleServiceVcl\",\n domains=[fastly.ServiceVclDomainArgs(\n name=\"example.com\",\n )],\n dictionaries=[\n fastly.ServiceVclDictionaryArgs(\n name=\"example_1\",\n ),\n fastly.ServiceVclDictionaryArgs(\n name=\"example_2\",\n ),\n fastly.ServiceVclDictionaryArgs(\n name=\"example_3\",\n ),\n ],\n force_destroy=True)\nexample_dictionaries = fastly.get_dictionaries_output(service_id=example_service_vcl.id,\n service_version=example_service_vcl.active_version)\npulumi.export(\"serviceDictionaries\", example_dictionaries)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleServiceVcl = new Fastly.ServiceVcl(\"exampleServiceVcl\", new()\n {\n Domains = new[]\n {\n new Fastly.Inputs.ServiceVclDomainArgs\n {\n Name = \"example.com\",\n },\n },\n Dictionaries = new[]\n {\n new Fastly.Inputs.ServiceVclDictionaryArgs\n {\n Name = \"example_1\",\n },\n new Fastly.Inputs.ServiceVclDictionaryArgs\n {\n Name = \"example_2\",\n },\n new Fastly.Inputs.ServiceVclDictionaryArgs\n {\n Name = \"example_3\",\n },\n },\n ForceDestroy = true,\n });\n\n var exampleDictionaries = Fastly.GetDictionaries.Invoke(new()\n {\n ServiceId = exampleServiceVcl.Id,\n ServiceVersion = exampleServiceVcl.ActiveVersion,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"serviceDictionaries\"] = exampleDictionaries,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\texampleServiceVcl, err := fastly.NewServiceVcl(ctx, \"exampleServiceVcl\", \u0026fastly.ServiceVclArgs{\n\t\t\tDomains: fastly.ServiceVclDomainArray{\n\t\t\t\t\u0026fastly.ServiceVclDomainArgs{\n\t\t\t\t\tName: pulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDictionaries: fastly.ServiceVclDictionaryArray{\n\t\t\t\t\u0026fastly.ServiceVclDictionaryArgs{\n\t\t\t\t\tName: pulumi.String(\"example_1\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclDictionaryArgs{\n\t\t\t\t\tName: pulumi.String(\"example_2\"),\n\t\t\t\t},\n\t\t\t\t\u0026fastly.ServiceVclDictionaryArgs{\n\t\t\t\t\tName: pulumi.String(\"example_3\"),\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\texampleDictionaries := fastly.GetDictionariesOutput(ctx, fastly.GetDictionariesOutputArgs{\n\t\t\tServiceId: exampleServiceVcl.ID(),\n\t\t\tServiceVersion: exampleServiceVcl.ActiveVersion,\n\t\t}, nil)\n\t\tctx.Export(\"serviceDictionaries\", exampleDictionaries)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.ServiceVcl;\nimport com.pulumi.fastly.ServiceVclArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDomainArgs;\nimport com.pulumi.fastly.inputs.ServiceVclDictionaryArgs;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetDictionariesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleServiceVcl = new ServiceVcl(\"exampleServiceVcl\", ServiceVclArgs.builder() \n .domains(ServiceVclDomainArgs.builder()\n .name(\"example.com\")\n .build())\n .dictionaries( \n ServiceVclDictionaryArgs.builder()\n .name(\"example_1\")\n .build(),\n ServiceVclDictionaryArgs.builder()\n .name(\"example_2\")\n .build(),\n ServiceVclDictionaryArgs.builder()\n .name(\"example_3\")\n .build())\n .forceDestroy(true)\n .build());\n\n final var exampleDictionaries = FastlyFunctions.getDictionaries(GetDictionariesArgs.builder()\n .serviceId(exampleServiceVcl.id())\n .serviceVersion(exampleServiceVcl.activeVersion())\n .build());\n\n ctx.export(\"serviceDictionaries\", exampleDictionaries.applyValue(getDictionariesResult -\u003e getDictionariesResult));\n }\n}\n```\n```yaml\nresources:\n exampleServiceVcl:\n type: fastly:ServiceVcl\n properties:\n domains:\n - name: example.com\n dictionaries:\n - name: example_1\n - name: example_2\n - name: example_3\n forceDestroy: true\nvariables:\n exampleDictionaries:\n fn::invoke:\n Function: fastly:getDictionaries\n Arguments:\n serviceId: ${exampleServiceVcl.id}\n serviceVersion: ${exampleServiceVcl.activeVersion}\noutputs:\n serviceDictionaries: ${exampleDictionaries}\n```\n\n[1]: https://developer.fastly.com/reference/api/dictionaries/\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getDictionaries.\n", + "properties": { + "serviceId": { + "type": "string", + "description": "Alphanumeric string identifying the service.\n" + }, + "serviceVersion": { + "type": "integer", + "description": "Integer identifying a service version.\n" + } + }, + "type": "object", + "required": [ + "serviceId", + "serviceVersion" + ] + }, + "outputs": { + "description": "A collection of values returned by getDictionaries.\n", + "properties": { + "dictionaries": { + "type": "array", + "items": { + "$ref": "#/types/fastly:index/getDictionariesDictionary:getDictionariesDictionary" + }, + "description": "List of all dictionaries for the version of the service.\n" + }, + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "serviceId": { + "type": "string", + "description": "Alphanumeric string identifying the service.\n" + }, + "serviceVersion": { + "type": "integer", + "description": "Integer identifying a service version.\n" + } + }, + "type": "object", + "required": [ + "dictionaries", + "serviceId", + "serviceVersion", + "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 System.Collections.Generic;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fastly = Fastly.GetFastlyIpRanges.Invoke();\n\n var fromFastly = new Aws.Ec2.SecurityGroup(\"fromFastly\", new()\n {\n Ingress = new[]\n {\n new Aws.Ec2.Inputs.SecurityGroupIngressArgs\n {\n FromPort = 443,\n ToPort = 443,\n Protocol = \"tcp\",\n CidrBlocks = fastly.Apply(getFastlyIpRangesResult =\u003e getFastlyIpRangesResult.CidrBlocks),\n Ipv6CidrBlocks = fastly.Apply(getFastlyIpRangesResult =\u003e getFastlyIpRangesResult.Ipv6CidrBlocks),\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/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.aws.ec2.SecurityGroup;\nimport com.pulumi.aws.ec2.SecurityGroupArgs;\nimport com.pulumi.aws.ec2.inputs.SecurityGroupIngressArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var fastly = FastlyFunctions.getFastlyIpRanges();\n\n var fromFastly = new SecurityGroup(\"fromFastly\", SecurityGroupArgs.builder() \n .ingress(SecurityGroupIngressArgs.builder()\n .fromPort(\"443\")\n .toPort(\"443\")\n .protocol(\"tcp\")\n .cidrBlocks(fastly.applyValue(getFastlyIpRangesResult -\u003e getFastlyIpRangesResult.cidrBlocks()))\n .ipv6CidrBlocks(fastly.applyValue(getFastlyIpRangesResult -\u003e getFastlyIpRangesResult.ipv6CidrBlocks()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fromFastly:\n type: aws:ec2:SecurityGroup\n properties:\n ingress:\n - fromPort: '443'\n toPort: '443'\n protocol: tcp\n cidrBlocks: ${fastly.cidrBlocks}\n ipv6CidrBlocks: ${fastly.ipv6CidrBlocks}\nvariables:\n fastly:\n fn::invoke:\n Function: fastly:getFastlyIpRanges\n Arguments: {}\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fastly = Fastly.GetFastlyIpRanges.Invoke();\n\n var fromFastly = new Aws.Ec2.SecurityGroup(\"fromFastly\", new()\n {\n Ingress = new[]\n {\n new Aws.Ec2.Inputs.SecurityGroupIngressArgs\n {\n FromPort = 443,\n ToPort = 443,\n Protocol = \"tcp\",\n CidrBlocks = fastly.Apply(getFastlyIpRangesResult =\u003e getFastlyIpRangesResult.CidrBlocks),\n Ipv6CidrBlocks = fastly.Apply(getFastlyIpRangesResult =\u003e getFastlyIpRangesResult.Ipv6CidrBlocks),\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/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.aws.ec2.SecurityGroup;\nimport com.pulumi.aws.ec2.SecurityGroupArgs;\nimport com.pulumi.aws.ec2.inputs.SecurityGroupIngressArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var fastly = FastlyFunctions.getFastlyIpRanges();\n\n var fromFastly = new SecurityGroup(\"fromFastly\", SecurityGroupArgs.builder() \n .ingress(SecurityGroupIngressArgs.builder()\n .fromPort(\"443\")\n .toPort(\"443\")\n .protocol(\"tcp\")\n .cidrBlocks(fastly.applyValue(getFastlyIpRangesResult -\u003e getFastlyIpRangesResult.cidrBlocks()))\n .ipv6CidrBlocks(fastly.applyValue(getFastlyIpRangesResult -\u003e getFastlyIpRangesResult.ipv6CidrBlocks()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fromFastly:\n type: aws:ec2:SecurityGroup\n properties:\n ingress:\n - fromPort: '443'\n toPort: '443'\n protocol: tcp\n cidrBlocks: ${fastly.cidrBlocks}\n ipv6CidrBlocks: ${fastly.ipv6CidrBlocks}\nvariables:\n fastly:\n fn::invoke:\n Function: fastly:getFastlyIpRanges\n Arguments: {}\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": { @@ -10740,7 +7354,7 @@ } }, "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 = 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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsActivation.Invoke(new()\n {\n Domain = \"example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsActivationArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsActivation(GetTlsActivationArgs.builder()\n .domain(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsActivation\n Arguments:\n domain: example.com\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 = 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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsActivation.Invoke(new()\n {\n Domain = \"example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsActivationArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsActivation(GetTlsActivationArgs.builder()\n .domain(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsActivation\n Arguments:\n domain: example.com\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsActivation.\n", "properties": { @@ -10836,7 +7450,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 = 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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsCertificate.Invoke(new()\n {\n Name = \"example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsCertificateArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsCertificate(GetTlsCertificateArgs.builder()\n .name(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsCertificate\n Arguments:\n name: example.com\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 = 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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsCertificate.Invoke(new()\n {\n Name = \"example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsCertificateArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsCertificate(GetTlsCertificateArgs.builder()\n .name(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsCertificate\n Arguments:\n name: example.com\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsCertificate.\n", "properties": { @@ -10929,7 +7543,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsCertificateIds = Fastly.GetTlsCertificateIds.Invoke();\n\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new()\n {\n CertificateId = exampleTlsCertificateIds.Apply(getTlsCertificateIdsResult =\u003e getTlsCertificateIdsResult.Ids[0]),\n });\n\n // ...\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsCertificateIds = FastlyFunctions.getTlsCertificateIds();\n\n var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder() \n .certificateId(exampleTlsCertificateIds.applyValue(getTlsCertificateIdsResult -\u003e getTlsCertificateIdsResult.ids()[0]))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleTlsActivation:\n type: fastly:TlsActivation\n properties:\n certificateId: ${exampleTlsCertificateIds.ids[0]}\nvariables:\n exampleTlsCertificateIds:\n fn::invoke:\n Function: fastly:getTlsCertificateIds\n Arguments: {}\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsCertificateIds = Fastly.GetTlsCertificateIds.Invoke();\n\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new()\n {\n CertificateId = exampleTlsCertificateIds.Apply(getTlsCertificateIdsResult =\u003e getTlsCertificateIdsResult.Ids[0]),\n });\n\n // ...\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsCertificateIds = FastlyFunctions.getTlsCertificateIds();\n\n var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder() \n .certificateId(exampleTlsCertificateIds.applyValue(getTlsCertificateIdsResult -\u003e getTlsCertificateIdsResult.ids()[0]))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleTlsActivation:\n type: fastly:TlsActivation\n properties:\n certificateId: ${exampleTlsCertificateIds.ids[0]}\nvariables:\n exampleTlsCertificateIds:\n fn::invoke:\n Function: fastly:getTlsCertificateIds\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsCertificateIds.\n", "properties": { @@ -10953,7 +7567,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsConfiguration = Fastly.GetTlsConfiguration.Invoke(new()\n {\n Default = true,\n });\n\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new()\n {\n ConfigurationId = exampleTlsConfiguration.Apply(getTlsConfigurationResult =\u003e getTlsConfigurationResult.Id),\n });\n\n // ...\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.GetTlsConfigurationArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsConfigurationArgs;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsConfiguration = FastlyFunctions.getTlsConfiguration(GetTlsConfigurationArgs.builder()\n .default_(true)\n .build());\n\n var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder() \n .configurationId(exampleTlsConfiguration.applyValue(getTlsConfigurationResult -\u003e getTlsConfigurationResult.id()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleTlsActivation:\n type: fastly:TlsActivation\n properties:\n configurationId: ${exampleTlsConfiguration.id}\nvariables:\n exampleTlsConfiguration:\n fn::invoke:\n Function: fastly:getTlsConfiguration\n Arguments:\n default: true\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsConfiguration = Fastly.GetTlsConfiguration.Invoke(new()\n {\n Default = true,\n });\n\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new()\n {\n ConfigurationId = exampleTlsConfiguration.Apply(getTlsConfigurationResult =\u003e getTlsConfigurationResult.Id),\n });\n\n // ...\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.GetTlsConfigurationArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsConfigurationArgs;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsConfiguration = FastlyFunctions.getTlsConfiguration(GetTlsConfigurationArgs.builder()\n .default_(true)\n .build());\n\n var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder() \n .configurationId(exampleTlsConfiguration.applyValue(getTlsConfigurationResult -\u003e getTlsConfigurationResult.id()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleTlsActivation:\n type: fastly:TlsActivation\n properties:\n configurationId: ${exampleTlsConfiguration.id}\nvariables:\n exampleTlsConfiguration:\n fn::invoke:\n Function: fastly:getTlsConfiguration\n Arguments:\n default: true\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsConfiguration.\n", "properties": { @@ -11054,7 +7668,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsConfigurationIds = Fastly.GetTlsConfigurationIds.Invoke();\n\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new()\n {\n ConfigurationId = data.Fastly_tls_configuration.Example.Ids[0],\n });\n\n // ...\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds();\n\n var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder() \n .configurationId(data.fastly_tls_configuration().example().ids()[0])\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleTlsActivation:\n type: fastly:TlsActivation\n properties:\n configurationId: ${data.fastly_tls_configuration.example.ids[0]}\nvariables:\n exampleTlsConfigurationIds:\n fn::invoke:\n Function: fastly:getTlsConfigurationIds\n Arguments: {}\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: exampleTlsConfigurationIds.then(exampleTlsConfigurationIds =\u003e exampleTlsConfigurationIds.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=example_tls_configuration_ids.ids[0])\n# ...\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsConfigurationIds = Fastly.GetTlsConfigurationIds.Invoke();\n\n var exampleTlsActivation = new Fastly.TlsActivation(\"exampleTlsActivation\", new()\n {\n ConfigurationId = exampleTlsConfigurationIds.Apply(getTlsConfigurationIdsResult =\u003e getTlsConfigurationIdsResult.Ids[0]),\n });\n\n // ...\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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\texampleTlsConfigurationIds, 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.String(exampleTlsConfigurationIds.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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.TlsActivation;\nimport com.pulumi.fastly.TlsActivationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds();\n\n var exampleTlsActivation = new TlsActivation(\"exampleTlsActivation\", TlsActivationArgs.builder() \n .configurationId(exampleTlsConfigurationIds.applyValue(getTlsConfigurationIdsResult -\u003e getTlsConfigurationIdsResult.ids()[0]))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleTlsActivation:\n type: fastly:TlsActivation\n properties:\n configurationId: ${exampleTlsConfigurationIds.ids[0]}\nvariables:\n exampleTlsConfigurationIds:\n fn::invoke:\n Function: fastly:getTlsConfigurationIds\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsConfigurationIds.\n", "properties": { @@ -11078,7 +7692,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 = 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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var domain = Fastly.GetTlsDomain.Invoke(new()\n {\n Domain = \"example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.GetTlsDomainArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var domain = FastlyFunctions.getTlsDomain(GetTlsDomainArgs.builder()\n .domain(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n domain:\n fn::invoke:\n Function: fastly:getTlsDomain\n Arguments:\n domain: example.com\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 = 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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var domain = Fastly.GetTlsDomain.Invoke(new()\n {\n Domain = \"example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.GetTlsDomainArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var domain = FastlyFunctions.getTlsDomain(GetTlsDomainArgs.builder()\n .domain(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n domain:\n fn::invoke:\n Function: fastly:getTlsDomain\n Arguments:\n domain: example.com\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsDomain.\n", "properties": { @@ -11136,7 +7750,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 = 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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsPlatformCertificate.Invoke(new()\n {\n Domains = new[]\n {\n \"example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPlatformCertificateArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPlatformCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsPlatformCertificate(GetTlsPlatformCertificateArgs.builder()\n .domains(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsPlatformCertificate\n Arguments:\n domains:\n - example.com\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 = 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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsPlatformCertificate.Invoke(new()\n {\n Domains = new[]\n {\n \"example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPlatformCertificateArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPlatformCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsPlatformCertificate(GetTlsPlatformCertificateArgs.builder()\n .domains(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsPlatformCertificate\n Arguments:\n domains:\n - example.com\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsPlatformCertificate.\n", "properties": { @@ -11207,7 +7821,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsPlatformCertificateIds = Fastly.GetTlsPlatformCertificateIds.Invoke();\n\n var exampleTlsPlatformCertificate = Fastly.GetTlsPlatformCertificate.Invoke(new()\n {\n Id = exampleTlsPlatformCertificateIds.Apply(getTlsPlatformCertificateIdsResult =\u003e getTlsPlatformCertificateIdsResult.Ids[0]),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPlatformCertificateArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPlatformCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsPlatformCertificateIds = FastlyFunctions.getTlsPlatformCertificateIds();\n\n final var exampleTlsPlatformCertificate = FastlyFunctions.getTlsPlatformCertificate(GetTlsPlatformCertificateArgs.builder()\n .id(exampleTlsPlatformCertificateIds.applyValue(getTlsPlatformCertificateIdsResult -\u003e getTlsPlatformCertificateIdsResult.ids()[0]))\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n exampleTlsPlatformCertificateIds:\n fn::invoke:\n Function: fastly:getTlsPlatformCertificateIds\n Arguments: {}\n exampleTlsPlatformCertificate:\n fn::invoke:\n Function: fastly:getTlsPlatformCertificate\n Arguments:\n id: ${exampleTlsPlatformCertificateIds.ids[0]}\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleTlsPlatformCertificateIds = Fastly.GetTlsPlatformCertificateIds.Invoke();\n\n var exampleTlsPlatformCertificate = Fastly.GetTlsPlatformCertificate.Invoke(new()\n {\n Id = exampleTlsPlatformCertificateIds.Apply(getTlsPlatformCertificateIdsResult =\u003e getTlsPlatformCertificateIdsResult.Ids[0]),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPlatformCertificateArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPlatformCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var exampleTlsPlatformCertificateIds = FastlyFunctions.getTlsPlatformCertificateIds();\n\n final var exampleTlsPlatformCertificate = FastlyFunctions.getTlsPlatformCertificate(GetTlsPlatformCertificateArgs.builder()\n .id(exampleTlsPlatformCertificateIds.applyValue(getTlsPlatformCertificateIdsResult -\u003e getTlsPlatformCertificateIdsResult.ids()[0]))\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n exampleTlsPlatformCertificateIds:\n fn::invoke:\n Function: fastly:getTlsPlatformCertificateIds\n Arguments: {}\n exampleTlsPlatformCertificate:\n fn::invoke:\n Function: fastly:getTlsPlatformCertificate\n Arguments:\n id: ${exampleTlsPlatformCertificateIds.ids[0]}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsPlatformCertificateIds.\n", "properties": { @@ -11231,7 +7845,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = Fastly.GetTlsPrivateKey.Invoke(new()\n {\n Name = \"demo-private-key\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"privateKeyNeedsReplacing\"] = demo.Apply(getTlsPrivateKeyResult =\u003e getTlsPrivateKeyResult.Replace),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPrivateKeyArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var demo = FastlyFunctions.getTlsPrivateKey(GetTlsPrivateKeyArgs.builder()\n .name(\"demo-private-key\")\n .build());\n\n ctx.export(\"privateKeyNeedsReplacing\", demo.applyValue(getTlsPrivateKeyResult -\u003e getTlsPrivateKeyResult.replace()));\n }\n}\n```\n```yaml\nvariables:\n demo:\n fn::invoke:\n Function: fastly:getTlsPrivateKey\n Arguments:\n name: demo-private-key\noutputs:\n privateKeyNeedsReplacing: ${demo.replace}\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = Fastly.GetTlsPrivateKey.Invoke(new()\n {\n Name = \"demo-private-key\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"privateKeyNeedsReplacing\"] = demo.Apply(getTlsPrivateKeyResult =\u003e getTlsPrivateKeyResult.Replace),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPrivateKeyArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var demo = FastlyFunctions.getTlsPrivateKey(GetTlsPrivateKeyArgs.builder()\n .name(\"demo-private-key\")\n .build());\n\n ctx.export(\"privateKeyNeedsReplacing\", demo.applyValue(getTlsPrivateKeyResult -\u003e getTlsPrivateKeyResult.replace()));\n }\n}\n```\n```yaml\nvariables:\n demo:\n fn::invoke:\n Function: fastly:getTlsPrivateKey\n Arguments:\n name: demo-private-key\noutputs:\n privateKeyNeedsReplacing: ${demo.replace}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsPrivateKey.\n", "properties": { @@ -11307,7 +7921,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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = Fastly.GetTlsPrivateKeyIds.Invoke();\n\n var example = Fastly.GetTlsPrivateKey.Invoke(new()\n {\n Id = fastly_tls_private_key_ids.Demo.Ids[0],\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPrivateKeyArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var demo = FastlyFunctions.getTlsPrivateKeyIds();\n\n final var example = FastlyFunctions.getTlsPrivateKey(GetTlsPrivateKeyArgs.builder()\n .id(fastly_tls_private_key_ids.demo().ids()[0])\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n demo:\n fn::invoke:\n Function: fastly:getTlsPrivateKeyIds\n Arguments: {}\n example:\n fn::invoke:\n Function: fastly:getTlsPrivateKey\n Arguments:\n id: ${fastly_tls_private_key_ids.demo.ids[0]}\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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demo = Fastly.GetTlsPrivateKeyIds.Invoke();\n\n var example = Fastly.GetTlsPrivateKey.Invoke(new()\n {\n Id = fastly_tls_private_key_ids.Demo.Ids[0],\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsPrivateKeyArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsPrivateKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var demo = FastlyFunctions.getTlsPrivateKeyIds();\n\n final var example = FastlyFunctions.getTlsPrivateKey(GetTlsPrivateKeyArgs.builder()\n .id(fastly_tls_private_key_ids.demo().ids()[0])\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n demo:\n fn::invoke:\n Function: fastly:getTlsPrivateKeyIds\n Arguments: {}\n example:\n fn::invoke:\n Function: fastly:getTlsPrivateKey\n Arguments:\n id: ${fastly_tls_private_key_ids.demo.ids[0]}\n```\n{{% /example %}}\n{{% /examples %}}", "outputs": { "description": "A collection of values returned by getTlsPrivateKeyIds.\n", "properties": { @@ -11331,7 +7945,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 = 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 System.Collections.Generic;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsSubscription.Invoke(new()\n {\n Domains = new[]\n {\n \"example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsSubscriptionArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsSubscriptionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsSubscription(GetTlsSubscriptionArgs.builder()\n .domains(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsSubscription\n Arguments:\n domains:\n - example.com\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 = 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 System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Fastly = Pulumi.Fastly;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = Fastly.GetTlsSubscription.Invoke(new()\n {\n Domains = new[]\n {\n \"example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-fastly/sdk/v7/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, \u0026fastly.LookupTlsSubscriptionArgs{\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```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.fastly.FastlyFunctions;\nimport com.pulumi.fastly.inputs.GetTlsSubscriptionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = FastlyFunctions.getTlsSubscription(GetTlsSubscriptionArgs.builder()\n .domains(\"example.com\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n Function: fastly:getTlsSubscription\n Arguments:\n domains:\n - example.com\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getTlsSubscription.\n", "properties": { diff --git a/provider/go.mod b/provider/go.mod index 75c5908f..a4b5b8e1 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -4,8 +4,8 @@ go 1.19 require ( github.com/fastly/terraform-provider-fastly v0.0.0 - github.com/pulumi/pulumi-terraform-bridge/v3 v3.42.1 - github.com/pulumi/pulumi/sdk/v3 v3.56.0 + github.com/pulumi/pulumi-terraform-bridge/v3 v3.44.3 + github.com/pulumi/pulumi/sdk/v3 v3.62.0 ) require ( @@ -35,6 +35,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect github.com/Masterminds/sprig/v3 v3.2.2 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect @@ -79,7 +80,7 @@ require ( github.com/edsrzf/mmap-go v1.1.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/ettle/strcase v0.1.1 // indirect - github.com/fastly/go-fastly/v7 v7.4.0 // indirect + github.com/fastly/go-fastly/v7 v7.5.5 // indirect github.com/fatih/color v1.13.0 // indirect github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -91,7 +92,7 @@ require ( github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/go-querystring v1.1.0 // indirect @@ -104,10 +105,9 @@ require ( github.com/gorilla/mux v1.8.0 // 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.7.0 // indirect + github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-hclog v1.4.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -122,17 +122,13 @@ require ( github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/hashicorp/hc-install v0.5.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hashicorp/hcl/v2 v2.16.1 // indirect + github.com/hashicorp/hcl/v2 v2.16.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.18.1 // indirect - github.com/hashicorp/terraform-json v0.15.0 // indirect github.com/hashicorp/terraform-plugin-go v0.14.3 // indirect github.com/hashicorp/terraform-plugin-log v0.8.0 // indirect - github.com/hashicorp/terraform-plugin-sdk/v2 v2.25.0 // indirect - github.com/hashicorp/terraform-registry-address v0.1.0 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.26.1 // indirect github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 // indirect github.com/hashicorp/vault/api v1.8.2 // indirect github.com/hashicorp/vault/sdk v0.6.1 // indirect @@ -178,9 +174,10 @@ require ( github.com/pkg/term v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/posener/complete v1.2.3 // indirect - github.com/pulumi/pulumi-java/pkg v0.8.0 // indirect - github.com/pulumi/pulumi-yaml v1.0.4 // indirect - github.com/pulumi/pulumi/pkg/v3 v3.56.0 // indirect + github.com/pulumi/pulumi-java/pkg v0.9.0 // indirect + github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.3 // indirect + github.com/pulumi/pulumi-yaml v1.1.0 // indirect + github.com/pulumi/pulumi/pkg/v3 v3.62.0 // indirect github.com/pulumi/schema-tools v0.1.2 // indirect github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e // indirect github.com/rivo/uniseg v0.2.0 // indirect @@ -194,7 +191,7 @@ require ( github.com/sergi/go-diff v1.2.0 // indirect github.com/shopspring/decimal v1.3.1 // indirect github.com/skeema/knownhosts v1.1.0 // indirect - github.com/spf13/afero v1.6.0 // indirect + github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/cobra v1.6.1 // indirect github.com/spf13/pflag v1.0.5 // indirect @@ -211,27 +208,27 @@ require ( 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.13.0 // indirect + github.com/zclconf/go-cty v1.13.1 // indirect github.com/zclconf/go-cty-yaml v1.0.2 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.9.0 // indirect gocloud.dev v0.27.0 // indirect gocloud.dev/secrets/hashivault v0.27.0 // indirect - golang.org/x/crypto v0.6.0 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.8.0 // indirect + golang.org/x/crypto v0.8.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.9.0 // indirect golang.org/x/oauth2 v0.4.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.org/x/term v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.103.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/protobuf v1.29.1 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -242,5 +239,5 @@ require ( replace ( github.com/fastly/terraform-provider-fastly => ../upstream 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-20220927231159-9ccf93a70751 + github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20230327102345-3fa930f86570 ) diff --git a/provider/go.sum b/provider/go.sum index bafe4e99..a79bf5bf 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -5,6 +5,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -17,6 +18,7 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -187,6 +189,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.24.0/go.mod h1:3xrJEFMXBsQLgxwThyjuD3aYlroL0TMRec1ypGUQ0KE= @@ -284,6 +287,8 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= @@ -720,8 +725,8 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/fastly/go-fastly/v7 v7.4.0 h1:TDTH3ivw34Ip62DqhBCEpaOEz0r3v3ov6bhVjog/7eE= -github.com/fastly/go-fastly/v7 v7.4.0/go.mod h1:/Z2GD7NuxV3vVMAyrtckg1WvZVnCuM2Z8ok/z70XTEQ= +github.com/fastly/go-fastly/v7 v7.5.5 h1:M3ePbU6a8BTPZzjaPoU4+O+pQspiBalF5HgVNomHlJI= +github.com/fastly/go-fastly/v7 v7.5.5/go.mod h1:/Z2GD7NuxV3vVMAyrtckg1WvZVnCuM2Z8ok/z70XTEQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= @@ -933,8 +938,9 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -990,6 +996,7 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -1029,6 +1036,7 @@ github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3i github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gophercloud/gophercloud v0.24.0/go.mod h1:Q8fZtyi5zZxPS/j9aj3sSxtvj41AdQMDwyo1myduD5c= github.com/gophercloud/gophercloud v0.25.0/go.mod h1:Q8fZtyi5zZxPS/j9aj3sSxtvj41AdQMDwyo1myduD5c= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -1079,8 +1087,8 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= github.com/hashicorp/go-getter v1.4.0/go.mod h1:7qxyCd8rBfcShwsvxgIguu4KbS3l8bUCwg2Umn7RjeY= -github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= @@ -1139,7 +1147,6 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= @@ -1147,16 +1154,14 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hc-install v0.4.0/go.mod h1:5d155H8EC5ewegao9A4PUTMNPZaq+TbOzkJJZ4vrXeI= github.com/hashicorp/hc-install v0.5.0 h1:D9bl4KayIYKEeJ4vUDe9L5huqxZXczKaykSRcmQ0xY0= github.com/hashicorp/hc-install v0.5.0/go.mod h1:JyzMfbzfSBSjoDCRPna1vi/24BEDxFaCPfdHtM5SCdo= github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl/v2 v2.0.0/go.mod h1:oVVDG71tEinNGYCxinCYadcmKU9bglqW9pV3txagJ90= -github.com/hashicorp/hcl/v2 v2.14.0/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0= -github.com/hashicorp/hcl/v2 v2.16.1 h1:BwuxEMD/tsYgbhIW7UuI3crjovf3MzuFWiVgiv57iHg= -github.com/hashicorp/hcl/v2 v2.16.1/go.mod h1:JRmR89jycNkrrqnMmvPDMd56n1rQJ2Q6KocSLCMCXng= +github.com/hashicorp/hcl/v2 v2.16.2 h1:mpkHZh/Tv+xet3sy3F9Ld4FyI2tUpWe9x3XtPx9f1a0= +github.com/hashicorp/hcl/v2 v2.16.2/go.mod h1:JRmR89jycNkrrqnMmvPDMd56n1rQJ2Q6KocSLCMCXng= github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 h1:T1Q6ag9tCwun16AW+XK3tAql24P4uTGUMIn1/92WsQQ= github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= @@ -1170,14 +1175,12 @@ github.com/hashicorp/nomad/api v0.0.0-20220629141207-c2428e1673ec/go.mod h1:jP79 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8/go.mod h1:p+ivJws3dpqbp1iP84+npOyAmTTOLMgCzrXd3GSdn/A= -github.com/hashicorp/terraform-exec v0.17.3/go.mod h1:+NELG0EqQekJzhvikkeQsOAZpsw0cv/03rbeQJqscAI= github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX5H8XZxHlH4= github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= github.com/hashicorp/terraform-json v0.4.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= -github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= -github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= -github.com/hashicorp/terraform-plugin-go v0.14.0/go.mod h1:2nNCBeRLaenyQEi78xrGrs9hMbulveqG/zDMQSvVJTE= +github.com/hashicorp/terraform-json v0.16.0 h1:UKkeWRWb23do5LNAFlh/K3N0ymn1qTOO8c+85Albo3s= +github.com/hashicorp/terraform-json v0.16.0/go.mod h1:v0Ufk9jJnk6tcIZvScHvetlKfiNTC+WS21mnXIlc0B0= github.com/hashicorp/terraform-plugin-go v0.14.3 h1:nlnJ1GXKdMwsC8g1Nh05tK2wsC3+3BL/DBBxFEki+j0= github.com/hashicorp/terraform-plugin-go v0.14.3/go.mod h1:7ees7DMZ263q8wQ6E4RdIdR6nHHJtrdt4ogX5lPkX1A= github.com/hashicorp/terraform-plugin-log v0.7.0/go.mod h1:p4R1jWBXRTvL4odmEkFfDdhUjHf9zcs/BCoNHAc7IK4= @@ -1186,7 +1189,6 @@ github.com/hashicorp/terraform-plugin-log v0.8.0/go.mod h1:1myFrhVsBLeylQzYYEV17 github.com/hashicorp/terraform-plugin-sdk v1.7.0 h1:B//oq0ZORG+EkVrIJy0uPGSonvmXqxSzXe8+GhknoW0= github.com/hashicorp/terraform-plugin-sdk v1.7.0/go.mod h1:OjgQmey5VxnPej/buEhe+YqKm0KNvV3QqU4hkqHqPCY= github.com/hashicorp/terraform-plugin-test v1.2.0/go.mod h1:QIJHYz8j+xJtdtLrFTlzQVC0ocr3rf/OjIpgZLK56Hs= -github.com/hashicorp/terraform-registry-address v0.0.0-20220623143253-7d51757b572c/go.mod h1:Wn3Na71knbXc1G8Lh+yu/dQWWJeFQEpDeJMtWMtlmNI= github.com/hashicorp/terraform-registry-address v0.1.0 h1:W6JkV9wbum+m516rCl5/NjKxCyTVaaUBbzYcMzBDO3U= github.com/hashicorp/terraform-registry-address v0.1.0/go.mod h1:EnyO2jYO6j29DTHbJcm00E5nQTFeTtyZH3H5ycydQ5A= github.com/hashicorp/terraform-svchost v0.0.0-20191011084731-65d371908596/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg= @@ -1496,7 +1498,6 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= -github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -1600,6 +1601,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -1665,22 +1667,25 @@ github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/prometheus v0.35.0/go.mod h1:7HaLx5kEPKJ0GDgbODG0fZgXbQ8K/XjZNJXQmbmgQlY= github.com/prometheus/prometheus v0.37.0/go.mod h1:egARUgz+K93zwqsVIAneFlLZefyGOON44WyAp4Xqbbk= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/pulumi/pulumi-java/pkg v0.8.0 h1:b81/D/dk5/9OEH1k5BJxhqYiQc7Y4TPDbHVGBvJU1GE= -github.com/pulumi/pulumi-java/pkg v0.8.0/go.mod h1:x7/J1GCJ+hHFBEgnMr4QpsTfjXUNHccAHJ9gvFfmAFU= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.42.1 h1:W3RJShHlsvVmTRuftLdp1yLQpRqU0c66iQMpxVqXVOs= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.42.1/go.mod h1:ej3U842Dtjk6kIQv2b3dtHKqFyggbZqlDoPWzc2EZvM= -github.com/pulumi/pulumi-yaml v1.0.4 h1:p+989rW3AqkkxbzxtxccHKAN4xCJi3K2cRpvA2K84tw= -github.com/pulumi/pulumi-yaml v1.0.4/go.mod h1:Szj8ud4Vqyq3oO1n3kzIUfaP3AiCjYZM4FYjOVWwJn8= -github.com/pulumi/pulumi/pkg/v3 v3.56.0 h1:GAqRHERowIXCTUM2PX2t0G/UKze06WVhv52S8eO2lE8= -github.com/pulumi/pulumi/pkg/v3 v3.56.0/go.mod h1:l91pIemOEbGBX2tIoVb3r4YlIv3BoTBvyVpECFsVZ3c= -github.com/pulumi/pulumi/sdk/v3 v3.56.0 h1:OQHb17GwDaLdzffvdr6+1KKRA9PNR8XVWmKkQOEm6Yk= -github.com/pulumi/pulumi/sdk/v3 v3.56.0/go.mod h1:Pb5H3OaRZg0n4TRIfY0pagR/NBIEvjp3lZe2Spr6Umc= +github.com/pulumi/pulumi-java/pkg v0.9.0 h1:8KQG7AJVtVBoPE3+Psmhv/lvGHI8RL3/E5uT59Aken0= +github.com/pulumi/pulumi-java/pkg v0.9.0/go.mod h1:eHpNTbf4n5X3YvqoDI/+cbVIkQaycBFdsvQb/24ykpc= +github.com/pulumi/pulumi-terraform-bridge/testing v0.0.1 h1:SCg1gjfY9N4yn8U8peIUYATifjoDABkyR7H9lmefsfc= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.44.3 h1:CET8z6seLHtEYj3OnrFh/XRaqi1Jyj9xxQWQVFZzZIw= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.44.3/go.mod h1:MbllbPNA49TmCI2N0awqHCHdB7JrdFB7odFUEo4WRXk= +github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.3 h1:1SmRVwRnrplcdBVVgoKYL8xqW8dCeiQPSwpGkx4ga6U= +github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.3/go.mod h1:n0TS1WsPjOfto6hyDZbXfNZQuLli2X9iDWt2nzmQJsg= +github.com/pulumi/pulumi-yaml v1.1.0 h1:Rm2TOS8/ZLRsgx1IOkiId7bwimbxcfPpAzSH0Tp7ePQ= +github.com/pulumi/pulumi-yaml v1.1.0/go.mod h1:SIu26o/xRupOoZgrPjgmbUn6dS7FT74pTions9CSSfU= +github.com/pulumi/pulumi/pkg/v3 v3.62.0 h1:eEb2y6S0xcYa0MNOfa51AFvHbOmHwiraa1Uu+NVzyuI= +github.com/pulumi/pulumi/pkg/v3 v3.62.0/go.mod h1:7Imggo8uoYBewCdZC9LoEkPxnC7Wmn6TrAU0ouHV+kY= +github.com/pulumi/pulumi/sdk/v3 v3.62.0 h1:j0n83nwCvnBakw0QHYRTNPnYr0hKs21tJervE+LrjCY= +github.com/pulumi/pulumi/sdk/v3 v3.62.0/go.mod h1:Pb5H3OaRZg0n4TRIfY0pagR/NBIEvjp3lZe2Spr6Umc= github.com/pulumi/schema-tools v0.1.2 h1:Fd9xvUjgck4NA+7/jSk7InqCUT4Kj940+EcnbQKpfZo= github.com/pulumi/schema-tools v0.1.2/go.mod h1:62lgj52Tzq11eqWTIaKd+EVyYAu5dEcDJxMhTjvMO/k= github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e h1:Dik4Qe/+xguB8JagPyXNlbOnRiXGmq/PSPQTGunYnTk= 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-20220927231159-9ccf93a70751 h1:fwZhtavyA6RJwrnpszC6bWQlMDZs+WV7WPnl6DIxM/Q= -github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20220927231159-9ccf93a70751/go.mod h1:xkJGavPvP9kYS/VbiW8o7JuTNgPwm7Tiw/Ie/b46r4c= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20230327102345-3fa930f86570 h1:tolpgmAY4Mc19AMxaed9nRRaeqKMOonDu4oDwU0cISs= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20230327102345-3fa930f86570/go.mod h1:xcOSYlRVdPLmDUoqPhO9fiO/YCN/l6MGYeTzGt5jgkQ= github.com/rakyll/embedmd v0.0.0-20171029212350-c8060a0752a2/go.mod h1:7jOTMgqac46PZcF54q6l2hkLEG8op93fZu61KmxWDV4= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= @@ -1756,8 +1761,9 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= 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/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= @@ -1850,9 +1856,11 @@ github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6Ac github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= @@ -1887,11 +1895,11 @@ github.com/zclconf/go-cty v1.0.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLE github.com/zclconf/go-cty v1.1.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.11.0/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= -github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= +github.com/zclconf/go-cty v1.12.1/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +github.com/zclconf/go-cty v1.13.1 h1:0a6bRwuiSHtAmqCqNOE+c2oHgepv0ctoxU4FUe43kwc= +github.com/zclconf/go-cty v1.13.1/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= github.com/zclconf/go-cty-yaml v1.0.1/go.mod h1:IP3Ylp0wQpYm50IHK8OZWKMu6sPJIUgKa8XhiVHura0= github.com/zclconf/go-cty-yaml v1.0.2 h1:dNyg4QLTrv2IfJpm7Wtxi55ed5gLGOlPrZ6kMd51hY0= @@ -2042,8 +2050,9 @@ golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2085,8 +2094,9 @@ golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2175,8 +2185,10 @@ golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2316,6 +2328,7 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2378,8 +2391,10 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -2389,8 +2404,10 @@ golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2400,10 +2417,13 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2478,7 +2498,6 @@ golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/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-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -2490,6 +2509,7 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -2502,7 +2522,8 @@ golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2625,7 +2646,9 @@ google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2750,6 +2773,7 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -2768,8 +2792,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/provider/resources.go b/provider/resources.go index 9704a652..ebb2aa4a 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -16,6 +16,8 @@ package fastly import ( "fmt" + // embed is used to store bridge-metadata.json in the compiled binary + _ "embed" "path/filepath" "unicode" @@ -125,14 +127,19 @@ func Provider() tfbridge.ProviderInfo { Namespaces: map[string]string{ mainPkg: "Fastly", }, - }, + }, MetadataInfo: tfbridge.NewProviderMetadata(metadata), } err := x.ComputeDefaults(&prov, x.TokensSingleModule("fastly_", mainMod, x.MakeStandardToken(mainPkg)).Unmappable("_acl_", "acl is capitalized to ACL")) - contract.AssertNoError(err) + contract.AssertNoErrorf(err, "failed to apply auto token mapping") + err = x.AutoAliasing(&prov, prov.GetMetadata()) + contract.AssertNoErrorf(err, "auto aliasing apply failed") prov.SetAutonaming(255, "-") return prov } + +//go:embed cmd/pulumi-resource-fastly/bridge-metadata.json +var metadata []byte diff --git a/upstream b/upstream index 1c55d85d..c66baae7 160000 --- a/upstream +++ b/upstream @@ -1 +1 @@ -Subproject commit 1c55d85dd6b6e7d0f2905d18128cf45e4f89067b +Subproject commit c66baae7c43173dc047ed67a04541dcf006987ff From 906effef4f730f5fd4573501fcbb393f7716ce9e Mon Sep 17 00:00:00 2001 From: aq17 Date: Wed, 19 Apr 2023 13:48:08 -0700 Subject: [PATCH 2/3] make build_sdks --- sdk/dotnet/GetDictionaries.cs | 217 +++++++ sdk/dotnet/GetFastlyIpRanges.cs | 1 + sdk/dotnet/GetTlsActivation.cs | 2 + sdk/dotnet/GetTlsCertificate.cs | 2 + sdk/dotnet/GetTlsCertificateIds.cs | 1 + sdk/dotnet/GetTlsConfiguration.cs | 2 + sdk/dotnet/GetTlsConfigurationIds.cs | 3 +- sdk/dotnet/GetTlsDomain.cs | 2 + sdk/dotnet/GetTlsPlatformCertificate.cs | 2 + sdk/dotnet/GetTlsPlatformCertificateIds.cs | 1 + sdk/dotnet/GetTlsPrivateKey.cs | 2 + sdk/dotnet/GetTlsPrivateKeyIds.cs | 1 + sdk/dotnet/GetTlsSubscription.cs | 2 + .../Inputs/ServiceVclRateLimiterArgs.cs | 98 ++++ .../Inputs/ServiceVclRateLimiterGetArgs.cs | 98 ++++ .../ServiceVclRateLimiterResponseArgs.cs | 29 + .../ServiceVclRateLimiterResponseGetArgs.cs | 29 + .../GetDictionariesDictionaryResult.cs | 36 ++ sdk/dotnet/Outputs/ServiceVclRateLimiter.cs | 112 ++++ .../Outputs/ServiceVclRateLimiterResponse.cs | 33 ++ sdk/dotnet/Pulumi.Fastly.csproj | 4 +- sdk/dotnet/ServiceAuthorization.cs | 1 + sdk/dotnet/ServiceVcl.cs | 19 + sdk/dotnet/TlsActivation.cs | 1 + sdk/dotnet/TlsCertificate.cs | 1 + sdk/dotnet/TlsPlatformCertificate.cs | 1 + sdk/dotnet/TlsPrivateKey.cs | 1 + sdk/dotnet/User.cs | 1 + sdk/go/fastly/getDictionaries.go | 154 +++++ sdk/go/fastly/getTlsConfigurationIds.go | 4 +- sdk/go/fastly/pulumiTypes.go | 489 ++++++++++++++++ sdk/go/fastly/serviceVcl.go | 9 + .../com/pulumi/fastly/FastlyFunctions.java | 263 ++++++++- .../java/com/pulumi/fastly/ServiceVcl.java | 7 + .../com/pulumi/fastly/ServiceVclArgs.java | 22 + .../fastly/inputs/GetDictionariesArgs.java | 121 ++++ .../inputs/GetDictionariesPlainArgs.java | 100 ++++ .../inputs/ServiceVclRateLimiterArgs.java | 536 ++++++++++++++++++ .../ServiceVclRateLimiterResponseArgs.java | 99 ++++ .../pulumi/fastly/inputs/ServiceVclState.java | 22 + .../outputs/GetDictionariesDictionary.java | 79 +++ .../fastly/outputs/GetDictionariesResult.java | 120 ++++ .../fastly/outputs/ServiceVclRateLimiter.java | 298 ++++++++++ .../ServiceVclRateLimiterResponse.java | 71 +++ sdk/nodejs/getDictionaries.ts | 139 +++++ sdk/nodejs/getTlsConfigurationIds.ts | 2 +- sdk/nodejs/index.ts | 5 + sdk/nodejs/serviceVcl.ts | 5 + sdk/nodejs/tsconfig.json | 1 + sdk/nodejs/types/input.ts | 61 ++ sdk/nodejs/types/output.ts | 70 +++ sdk/python/pulumi_fastly/__init__.py | 1 + sdk/python/pulumi_fastly/_inputs.py | 248 ++++++++ sdk/python/pulumi_fastly/get_dictionaries.py | 176 ++++++ .../get_tls_configuration_ids.py | 2 +- sdk/python/pulumi_fastly/outputs.py | 270 +++++++++ sdk/python/pulumi_fastly/service_vcl.py | 34 ++ sdk/python/setup.py | 1 + 58 files changed, 4098 insertions(+), 13 deletions(-) create mode 100644 sdk/dotnet/GetDictionaries.cs create mode 100644 sdk/dotnet/Inputs/ServiceVclRateLimiterArgs.cs create mode 100644 sdk/dotnet/Inputs/ServiceVclRateLimiterGetArgs.cs create mode 100644 sdk/dotnet/Inputs/ServiceVclRateLimiterResponseArgs.cs create mode 100644 sdk/dotnet/Inputs/ServiceVclRateLimiterResponseGetArgs.cs create mode 100644 sdk/dotnet/Outputs/GetDictionariesDictionaryResult.cs create mode 100644 sdk/dotnet/Outputs/ServiceVclRateLimiter.cs create mode 100644 sdk/dotnet/Outputs/ServiceVclRateLimiterResponse.cs create mode 100644 sdk/go/fastly/getDictionaries.go create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesPlainArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterResponseArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesDictionary.java create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesResult.java create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiter.java create mode 100644 sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiterResponse.java create mode 100644 sdk/nodejs/getDictionaries.ts create mode 100644 sdk/python/pulumi_fastly/get_dictionaries.py diff --git a/sdk/dotnet/GetDictionaries.cs b/sdk/dotnet/GetDictionaries.cs new file mode 100644 index 00000000..f3e72a02 --- /dev/null +++ b/sdk/dotnet/GetDictionaries.cs @@ -0,0 +1,217 @@ +// *** 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 GetDictionaries + { + /// + /// Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Fastly = Pulumi.Fastly; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var exampleServiceVcl = new Fastly.ServiceVcl("exampleServiceVcl", new() + /// { + /// Domains = new[] + /// { + /// new Fastly.Inputs.ServiceVclDomainArgs + /// { + /// Name = "example.com", + /// }, + /// }, + /// Dictionaries = new[] + /// { + /// new Fastly.Inputs.ServiceVclDictionaryArgs + /// { + /// Name = "example_1", + /// }, + /// new Fastly.Inputs.ServiceVclDictionaryArgs + /// { + /// Name = "example_2", + /// }, + /// new Fastly.Inputs.ServiceVclDictionaryArgs + /// { + /// Name = "example_3", + /// }, + /// }, + /// ForceDestroy = true, + /// }); + /// + /// var exampleDictionaries = Fastly.GetDictionaries.Invoke(new() + /// { + /// ServiceId = exampleServiceVcl.Id, + /// ServiceVersion = exampleServiceVcl.ActiveVersion, + /// }); + /// + /// return new Dictionary<string, object?> + /// { + /// ["serviceDictionaries"] = exampleDictionaries, + /// }; + /// }); + /// ``` + /// + /// [1]: https://developer.fastly.com/reference/api/dictionaries/ + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetDictionariesArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("fastly:index/getDictionaries:getDictionaries", args ?? new GetDictionariesArgs(), options.WithDefaults()); + + /// + /// Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Fastly = Pulumi.Fastly; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var exampleServiceVcl = new Fastly.ServiceVcl("exampleServiceVcl", new() + /// { + /// Domains = new[] + /// { + /// new Fastly.Inputs.ServiceVclDomainArgs + /// { + /// Name = "example.com", + /// }, + /// }, + /// Dictionaries = new[] + /// { + /// new Fastly.Inputs.ServiceVclDictionaryArgs + /// { + /// Name = "example_1", + /// }, + /// new Fastly.Inputs.ServiceVclDictionaryArgs + /// { + /// Name = "example_2", + /// }, + /// new Fastly.Inputs.ServiceVclDictionaryArgs + /// { + /// Name = "example_3", + /// }, + /// }, + /// ForceDestroy = true, + /// }); + /// + /// var exampleDictionaries = Fastly.GetDictionaries.Invoke(new() + /// { + /// ServiceId = exampleServiceVcl.Id, + /// ServiceVersion = exampleServiceVcl.ActiveVersion, + /// }); + /// + /// return new Dictionary<string, object?> + /// { + /// ["serviceDictionaries"] = exampleDictionaries, + /// }; + /// }); + /// ``` + /// + /// [1]: https://developer.fastly.com/reference/api/dictionaries/ + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetDictionariesInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("fastly:index/getDictionaries:getDictionaries", args ?? new GetDictionariesInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetDictionariesArgs : global::Pulumi.InvokeArgs + { + /// + /// Alphanumeric string identifying the service. + /// + [Input("serviceId", required: true)] + public string ServiceId { get; set; } = null!; + + /// + /// Integer identifying a service version. + /// + [Input("serviceVersion", required: true)] + public int ServiceVersion { get; set; } + + public GetDictionariesArgs() + { + } + public static new GetDictionariesArgs Empty => new GetDictionariesArgs(); + } + + public sealed class GetDictionariesInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// Alphanumeric string identifying the service. + /// + [Input("serviceId", required: true)] + public Input ServiceId { get; set; } = null!; + + /// + /// Integer identifying a service version. + /// + [Input("serviceVersion", required: true)] + public Input ServiceVersion { get; set; } = null!; + + public GetDictionariesInvokeArgs() + { + } + public static new GetDictionariesInvokeArgs Empty => new GetDictionariesInvokeArgs(); + } + + + [OutputType] + public sealed class GetDictionariesResult + { + /// + /// List of all dictionaries for the version of the service. + /// + public readonly ImmutableArray Dictionaries; + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + /// + /// Alphanumeric string identifying the service. + /// + public readonly string ServiceId; + /// + /// Integer identifying a service version. + /// + public readonly int ServiceVersion; + + [OutputConstructor] + private GetDictionariesResult( + ImmutableArray dictionaries, + + string id, + + string serviceId, + + int serviceVersion) + { + Dictionaries = dictionaries; + Id = id; + ServiceId = serviceId; + ServiceVersion = serviceVersion; + } + } +} diff --git a/sdk/dotnet/GetFastlyIpRanges.cs b/sdk/dotnet/GetFastlyIpRanges.cs index 81b2c9db..60b844ad 100644 --- a/sdk/dotnet/GetFastlyIpRanges.cs +++ b/sdk/dotnet/GetFastlyIpRanges.cs @@ -20,6 +20,7 @@ public static class GetFastlyIpRanges /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Aws = Pulumi.Aws; /// using Fastly = Pulumi.Fastly; diff --git a/sdk/dotnet/GetTlsActivation.cs b/sdk/dotnet/GetTlsActivation.cs index 43c96daf..06ab6258 100644 --- a/sdk/dotnet/GetTlsActivation.cs +++ b/sdk/dotnet/GetTlsActivation.cs @@ -26,6 +26,7 @@ public static class GetTlsActivation /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -59,6 +60,7 @@ public static Task InvokeAsync(GetTlsActivationArgs? arg /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsCertificate.cs b/sdk/dotnet/GetTlsCertificate.cs index 225ba754..d5d94d63 100644 --- a/sdk/dotnet/GetTlsCertificate.cs +++ b/sdk/dotnet/GetTlsCertificate.cs @@ -26,6 +26,7 @@ public static class GetTlsCertificate /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -59,6 +60,7 @@ public static Task InvokeAsync(GetTlsCertificateArgs? a /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsCertificateIds.cs b/sdk/dotnet/GetTlsCertificateIds.cs index 4ff24926..eee98c27 100644 --- a/sdk/dotnet/GetTlsCertificateIds.cs +++ b/sdk/dotnet/GetTlsCertificateIds.cs @@ -20,6 +20,7 @@ public static class GetTlsCertificateIds /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsConfiguration.cs b/sdk/dotnet/GetTlsConfiguration.cs index a7735ab1..23353e71 100644 --- a/sdk/dotnet/GetTlsConfiguration.cs +++ b/sdk/dotnet/GetTlsConfiguration.cs @@ -26,6 +26,7 @@ public static class GetTlsConfiguration /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -65,6 +66,7 @@ public static Task InvokeAsync(GetTlsConfigurationArg /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsConfigurationIds.cs b/sdk/dotnet/GetTlsConfigurationIds.cs index aea4eca0..8bf8ddd9 100644 --- a/sdk/dotnet/GetTlsConfigurationIds.cs +++ b/sdk/dotnet/GetTlsConfigurationIds.cs @@ -20,6 +20,7 @@ public static class GetTlsConfigurationIds /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -29,7 +30,7 @@ public static class GetTlsConfigurationIds /// /// var exampleTlsActivation = new Fastly.TlsActivation("exampleTlsActivation", new() /// { - /// ConfigurationId = data.Fastly_tls_configuration.Example.Ids[0], + /// ConfigurationId = exampleTlsConfigurationIds.Apply(getTlsConfigurationIdsResult => getTlsConfigurationIdsResult.Ids[0]), /// }); /// /// // ... diff --git a/sdk/dotnet/GetTlsDomain.cs b/sdk/dotnet/GetTlsDomain.cs index d9dff99c..2758d29d 100644 --- a/sdk/dotnet/GetTlsDomain.cs +++ b/sdk/dotnet/GetTlsDomain.cs @@ -20,6 +20,7 @@ public static class GetTlsDomain /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -47,6 +48,7 @@ public static Task InvokeAsync(GetTlsDomainArgs args, Invoke /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsPlatformCertificate.cs b/sdk/dotnet/GetTlsPlatformCertificate.cs index 8295f703..274cb17e 100644 --- a/sdk/dotnet/GetTlsPlatformCertificate.cs +++ b/sdk/dotnet/GetTlsPlatformCertificate.cs @@ -26,6 +26,7 @@ public static class GetTlsPlatformCertificate /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -62,6 +63,7 @@ public static Task InvokeAsync(GetTlsPlatformCe /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsPlatformCertificateIds.cs b/sdk/dotnet/GetTlsPlatformCertificateIds.cs index 42f619cd..92fc4a71 100644 --- a/sdk/dotnet/GetTlsPlatformCertificateIds.cs +++ b/sdk/dotnet/GetTlsPlatformCertificateIds.cs @@ -20,6 +20,7 @@ public static class GetTlsPlatformCertificateIds /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsPrivateKey.cs b/sdk/dotnet/GetTlsPrivateKey.cs index 5b52f3c9..490c624c 100644 --- a/sdk/dotnet/GetTlsPrivateKey.cs +++ b/sdk/dotnet/GetTlsPrivateKey.cs @@ -27,6 +27,7 @@ public static class GetTlsPrivateKey /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -65,6 +66,7 @@ public static Task InvokeAsync(GetTlsPrivateKeyArgs? arg /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsPrivateKeyIds.cs b/sdk/dotnet/GetTlsPrivateKeyIds.cs index 7992684b..b90a9fc4 100644 --- a/sdk/dotnet/GetTlsPrivateKeyIds.cs +++ b/sdk/dotnet/GetTlsPrivateKeyIds.cs @@ -20,6 +20,7 @@ public static class GetTlsPrivateKeyIds /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/GetTlsSubscription.cs b/sdk/dotnet/GetTlsSubscription.cs index 74c915dc..4a8f8604 100644 --- a/sdk/dotnet/GetTlsSubscription.cs +++ b/sdk/dotnet/GetTlsSubscription.cs @@ -20,6 +20,7 @@ public static class GetTlsSubscription /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// @@ -50,6 +51,7 @@ public static Task InvokeAsync(GetTlsSubscriptionArgs? /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/Inputs/ServiceVclRateLimiterArgs.cs b/sdk/dotnet/Inputs/ServiceVclRateLimiterArgs.cs new file mode 100644 index 00000000..0ff21e32 --- /dev/null +++ b/sdk/dotnet/Inputs/ServiceVclRateLimiterArgs.cs @@ -0,0 +1,98 @@ +// *** 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 ServiceVclRateLimiterArgs : global::Pulumi.ResourceArgs + { + /// + /// The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + /// + [Input("action", required: true)] + public Input Action { get; set; } = null!; + + /// + /// Comma-separated list of VCL variables used to generate a counter key to identify a client + /// + [Input("clientKey", required: true)] + public Input ClientKey { get; set; } = null!; + + /// + /// Revision number of the rate limiting feature implementation + /// + [Input("featureRevision")] + public Input? FeatureRevision { get; set; } + + /// + /// Comma-separated list of HTTP methods to apply rate limiting to + /// + [Input("httpMethods", required: true)] + public Input HttpMethods { get; set; } = null!; + + /// + /// Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + /// + [Input("loggerType")] + public Input? LoggerType { get; set; } + + /// + /// A unique human readable name for the rate limiting rule + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + /// + /// Length of time in minutes that the rate limiter is in effect after the initial violation is detected + /// + [Input("penaltyBoxDuration", required: true)] + public Input PenaltyBoxDuration { get; set; } = null!; + + /// + /// Alphanumeric string identifying the rate limiter + /// + [Input("ratelimiterId")] + public Input? RatelimiterId { get; set; } + + /// + /// Custom response to be sent when the rate limit is exceeded. Required if action is response + /// + [Input("response")] + public Input? Response { get; set; } + + /// + /// Name of existing response object. Required if action is response_object + /// + [Input("responseObjectName")] + public Input? ResponseObjectName { get; set; } + + /// + /// Upper limit of requests per second allowed by the rate limiter + /// + [Input("rpsLimit", required: true)] + public Input RpsLimit { get; set; } = null!; + + /// + /// The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + /// + [Input("uriDictionaryName")] + public Input? UriDictionaryName { get; set; } + + /// + /// Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + /// + [Input("windowSize", required: true)] + public Input WindowSize { get; set; } = null!; + + public ServiceVclRateLimiterArgs() + { + } + public static new ServiceVclRateLimiterArgs Empty => new ServiceVclRateLimiterArgs(); + } +} diff --git a/sdk/dotnet/Inputs/ServiceVclRateLimiterGetArgs.cs b/sdk/dotnet/Inputs/ServiceVclRateLimiterGetArgs.cs new file mode 100644 index 00000000..ca1f3808 --- /dev/null +++ b/sdk/dotnet/Inputs/ServiceVclRateLimiterGetArgs.cs @@ -0,0 +1,98 @@ +// *** 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 ServiceVclRateLimiterGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + /// + [Input("action", required: true)] + public Input Action { get; set; } = null!; + + /// + /// Comma-separated list of VCL variables used to generate a counter key to identify a client + /// + [Input("clientKey", required: true)] + public Input ClientKey { get; set; } = null!; + + /// + /// Revision number of the rate limiting feature implementation + /// + [Input("featureRevision")] + public Input? FeatureRevision { get; set; } + + /// + /// Comma-separated list of HTTP methods to apply rate limiting to + /// + [Input("httpMethods", required: true)] + public Input HttpMethods { get; set; } = null!; + + /// + /// Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + /// + [Input("loggerType")] + public Input? LoggerType { get; set; } + + /// + /// A unique human readable name for the rate limiting rule + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + /// + /// Length of time in minutes that the rate limiter is in effect after the initial violation is detected + /// + [Input("penaltyBoxDuration", required: true)] + public Input PenaltyBoxDuration { get; set; } = null!; + + /// + /// Alphanumeric string identifying the rate limiter + /// + [Input("ratelimiterId")] + public Input? RatelimiterId { get; set; } + + /// + /// Custom response to be sent when the rate limit is exceeded. Required if action is response + /// + [Input("response")] + public Input? Response { get; set; } + + /// + /// Name of existing response object. Required if action is response_object + /// + [Input("responseObjectName")] + public Input? ResponseObjectName { get; set; } + + /// + /// Upper limit of requests per second allowed by the rate limiter + /// + [Input("rpsLimit", required: true)] + public Input RpsLimit { get; set; } = null!; + + /// + /// The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + /// + [Input("uriDictionaryName")] + public Input? UriDictionaryName { get; set; } + + /// + /// Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + /// + [Input("windowSize", required: true)] + public Input WindowSize { get; set; } = null!; + + public ServiceVclRateLimiterGetArgs() + { + } + public static new ServiceVclRateLimiterGetArgs Empty => new ServiceVclRateLimiterGetArgs(); + } +} diff --git a/sdk/dotnet/Inputs/ServiceVclRateLimiterResponseArgs.cs b/sdk/dotnet/Inputs/ServiceVclRateLimiterResponseArgs.cs new file mode 100644 index 00000000..e71f7e86 --- /dev/null +++ b/sdk/dotnet/Inputs/ServiceVclRateLimiterResponseArgs.cs @@ -0,0 +1,29 @@ +// *** 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 ServiceVclRateLimiterResponseArgs : global::Pulumi.ResourceArgs + { + [Input("content", required: true)] + public Input Content { get; set; } = null!; + + [Input("contentType", required: true)] + public Input ContentType { get; set; } = null!; + + [Input("status", required: true)] + public Input Status { get; set; } = null!; + + public ServiceVclRateLimiterResponseArgs() + { + } + public static new ServiceVclRateLimiterResponseArgs Empty => new ServiceVclRateLimiterResponseArgs(); + } +} diff --git a/sdk/dotnet/Inputs/ServiceVclRateLimiterResponseGetArgs.cs b/sdk/dotnet/Inputs/ServiceVclRateLimiterResponseGetArgs.cs new file mode 100644 index 00000000..37b7737b --- /dev/null +++ b/sdk/dotnet/Inputs/ServiceVclRateLimiterResponseGetArgs.cs @@ -0,0 +1,29 @@ +// *** 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 ServiceVclRateLimiterResponseGetArgs : global::Pulumi.ResourceArgs + { + [Input("content", required: true)] + public Input Content { get; set; } = null!; + + [Input("contentType", required: true)] + public Input ContentType { get; set; } = null!; + + [Input("status", required: true)] + public Input Status { get; set; } = null!; + + public ServiceVclRateLimiterResponseGetArgs() + { + } + public static new ServiceVclRateLimiterResponseGetArgs Empty => new ServiceVclRateLimiterResponseGetArgs(); + } +} diff --git a/sdk/dotnet/Outputs/GetDictionariesDictionaryResult.cs b/sdk/dotnet/Outputs/GetDictionariesDictionaryResult.cs new file mode 100644 index 00000000..9a336daa --- /dev/null +++ b/sdk/dotnet/Outputs/GetDictionariesDictionaryResult.cs @@ -0,0 +1,36 @@ +// *** 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 GetDictionariesDictionaryResult + { + /// + /// The ID of this resource. + /// + public readonly string Id; + public readonly string Name; + public readonly bool WriteOnly; + + [OutputConstructor] + private GetDictionariesDictionaryResult( + string id, + + string name, + + bool writeOnly) + { + Id = id; + Name = name; + WriteOnly = writeOnly; + } + } +} diff --git a/sdk/dotnet/Outputs/ServiceVclRateLimiter.cs b/sdk/dotnet/Outputs/ServiceVclRateLimiter.cs new file mode 100644 index 00000000..328189c2 --- /dev/null +++ b/sdk/dotnet/Outputs/ServiceVclRateLimiter.cs @@ -0,0 +1,112 @@ +// *** 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 ServiceVclRateLimiter + { + /// + /// The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + /// + public readonly string Action; + /// + /// Comma-separated list of VCL variables used to generate a counter key to identify a client + /// + public readonly string ClientKey; + /// + /// Revision number of the rate limiting feature implementation + /// + public readonly int? FeatureRevision; + /// + /// Comma-separated list of HTTP methods to apply rate limiting to + /// + public readonly string HttpMethods; + /// + /// Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + /// + public readonly string? LoggerType; + /// + /// A unique human readable name for the rate limiting rule + /// + public readonly string Name; + /// + /// Length of time in minutes that the rate limiter is in effect after the initial violation is detected + /// + public readonly int PenaltyBoxDuration; + /// + /// Alphanumeric string identifying the rate limiter + /// + public readonly string? RatelimiterId; + /// + /// Custom response to be sent when the rate limit is exceeded. Required if action is response + /// + public readonly Outputs.ServiceVclRateLimiterResponse? Response; + /// + /// Name of existing response object. Required if action is response_object + /// + public readonly string? ResponseObjectName; + /// + /// Upper limit of requests per second allowed by the rate limiter + /// + public readonly int RpsLimit; + /// + /// The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + /// + public readonly string? UriDictionaryName; + /// + /// Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + /// + public readonly int WindowSize; + + [OutputConstructor] + private ServiceVclRateLimiter( + string action, + + string clientKey, + + int? featureRevision, + + string httpMethods, + + string? loggerType, + + string name, + + int penaltyBoxDuration, + + string? ratelimiterId, + + Outputs.ServiceVclRateLimiterResponse? response, + + string? responseObjectName, + + int rpsLimit, + + string? uriDictionaryName, + + int windowSize) + { + Action = action; + ClientKey = clientKey; + FeatureRevision = featureRevision; + HttpMethods = httpMethods; + LoggerType = loggerType; + Name = name; + PenaltyBoxDuration = penaltyBoxDuration; + RatelimiterId = ratelimiterId; + Response = response; + ResponseObjectName = responseObjectName; + RpsLimit = rpsLimit; + UriDictionaryName = uriDictionaryName; + WindowSize = windowSize; + } + } +} diff --git a/sdk/dotnet/Outputs/ServiceVclRateLimiterResponse.cs b/sdk/dotnet/Outputs/ServiceVclRateLimiterResponse.cs new file mode 100644 index 00000000..15d308a6 --- /dev/null +++ b/sdk/dotnet/Outputs/ServiceVclRateLimiterResponse.cs @@ -0,0 +1,33 @@ +// *** 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 ServiceVclRateLimiterResponse + { + public readonly string Content; + public readonly string ContentType; + public readonly int Status; + + [OutputConstructor] + private ServiceVclRateLimiterResponse( + string content, + + string contentType, + + int status) + { + Content = content; + ContentType = contentType; + Status = status; + } + } +} diff --git a/sdk/dotnet/Pulumi.Fastly.csproj b/sdk/dotnet/Pulumi.Fastly.csproj index 37219738..c2aa70ff 100644 --- a/sdk/dotnet/Pulumi.Fastly.csproj +++ b/sdk/dotnet/Pulumi.Fastly.csproj @@ -10,7 +10,7 @@ https://github.com/pulumi/pulumi-fastly logo.png - netcoreapp3.1 + net6.0 enable false @@ -39,7 +39,7 @@ - + diff --git a/sdk/dotnet/ServiceAuthorization.cs b/sdk/dotnet/ServiceAuthorization.cs index dd7cc63a..41f96a4c 100644 --- a/sdk/dotnet/ServiceAuthorization.cs +++ b/sdk/dotnet/ServiceAuthorization.cs @@ -20,6 +20,7 @@ namespace Pulumi.Fastly /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/ServiceVcl.cs b/sdk/dotnet/ServiceVcl.cs index 8b6cac6f..07612a8f 100644 --- a/sdk/dotnet/ServiceVcl.cs +++ b/sdk/dotnet/ServiceVcl.cs @@ -220,6 +220,9 @@ public partial class ServiceVcl : global::Pulumi.CustomResource [Output("productEnablement")] public Output ProductEnablement { get; private set; } = null!; + [Output("rateLimiters")] + public Output> RateLimiters { get; private set; } = null!; + [Output("requestSettings")] public Output> RequestSettings { get; private set; } = null!; @@ -652,6 +655,14 @@ public InputList LoggingSyslogs [Input("productEnablement")] public Input? ProductEnablement { get; set; } + [Input("rateLimiters")] + private InputList? _rateLimiters; + public InputList RateLimiters + { + get => _rateLimiters ?? (_rateLimiters = new InputList()); + set => _rateLimiters = value; + } + [Input("requestSettings")] private InputList? _requestSettings; public InputList RequestSettings @@ -1092,6 +1103,14 @@ public InputList LoggingSyslogs [Input("productEnablement")] public Input? ProductEnablement { get; set; } + [Input("rateLimiters")] + private InputList? _rateLimiters; + public InputList RateLimiters + { + get => _rateLimiters ?? (_rateLimiters = new InputList()); + set => _rateLimiters = value; + } + [Input("requestSettings")] private InputList? _requestSettings; public InputList RequestSettings diff --git a/sdk/dotnet/TlsActivation.cs b/sdk/dotnet/TlsActivation.cs index ec711281..dbcba711 100644 --- a/sdk/dotnet/TlsActivation.cs +++ b/sdk/dotnet/TlsActivation.cs @@ -20,6 +20,7 @@ namespace Pulumi.Fastly /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/dotnet/TlsCertificate.cs b/sdk/dotnet/TlsCertificate.cs index 033ab2bb..69ab040d 100644 --- a/sdk/dotnet/TlsCertificate.cs +++ b/sdk/dotnet/TlsCertificate.cs @@ -20,6 +20,7 @@ namespace Pulumi.Fastly /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// using Tls = Pulumi.Tls; diff --git a/sdk/dotnet/TlsPlatformCertificate.cs b/sdk/dotnet/TlsPlatformCertificate.cs index c6a0758d..ae348173 100644 --- a/sdk/dotnet/TlsPlatformCertificate.cs +++ b/sdk/dotnet/TlsPlatformCertificate.cs @@ -20,6 +20,7 @@ namespace Pulumi.Fastly /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// using Tls = Pulumi.Tls; diff --git a/sdk/dotnet/TlsPrivateKey.cs b/sdk/dotnet/TlsPrivateKey.cs index b0c9dcbb..df09383f 100644 --- a/sdk/dotnet/TlsPrivateKey.cs +++ b/sdk/dotnet/TlsPrivateKey.cs @@ -20,6 +20,7 @@ namespace Pulumi.Fastly /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// using Tls = Pulumi.Tls; diff --git a/sdk/dotnet/User.cs b/sdk/dotnet/User.cs index 79f6b8d2..e8aa01d7 100644 --- a/sdk/dotnet/User.cs +++ b/sdk/dotnet/User.cs @@ -20,6 +20,7 @@ namespace Pulumi.Fastly /// /// ```csharp /// using System.Collections.Generic; + /// using System.Linq; /// using Pulumi; /// using Fastly = Pulumi.Fastly; /// diff --git a/sdk/go/fastly/getDictionaries.go b/sdk/go/fastly/getDictionaries.go new file mode 100644 index 00000000..bbd1bfc2 --- /dev/null +++ b/sdk/go/fastly/getDictionaries.go @@ -0,0 +1,154 @@ +// 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/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-fastly/sdk/v7/go/fastly" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// exampleServiceVcl, err := fastly.NewServiceVcl(ctx, "exampleServiceVcl", &fastly.ServiceVclArgs{ +// Domains: fastly.ServiceVclDomainArray{ +// &fastly.ServiceVclDomainArgs{ +// Name: pulumi.String("example.com"), +// }, +// }, +// Dictionaries: fastly.ServiceVclDictionaryArray{ +// &fastly.ServiceVclDictionaryArgs{ +// Name: pulumi.String("example_1"), +// }, +// &fastly.ServiceVclDictionaryArgs{ +// Name: pulumi.String("example_2"), +// }, +// &fastly.ServiceVclDictionaryArgs{ +// Name: pulumi.String("example_3"), +// }, +// }, +// ForceDestroy: pulumi.Bool(true), +// }) +// if err != nil { +// return err +// } +// exampleDictionaries := fastly.GetDictionariesOutput(ctx, fastly.GetDictionariesOutputArgs{ +// ServiceId: exampleServiceVcl.ID(), +// ServiceVersion: exampleServiceVcl.ActiveVersion, +// }, nil) +// ctx.Export("serviceDictionaries", exampleDictionaries) +// return nil +// }) +// } +// +// ``` +// +// [1]: https://developer.fastly.com/reference/api/dictionaries/ +func GetDictionaries(ctx *pulumi.Context, args *GetDictionariesArgs, opts ...pulumi.InvokeOption) (*GetDictionariesResult, error) { + var rv GetDictionariesResult + err := ctx.Invoke("fastly:index/getDictionaries:getDictionaries", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getDictionaries. +type GetDictionariesArgs struct { + // Alphanumeric string identifying the service. + ServiceId string `pulumi:"serviceId"` + // Integer identifying a service version. + ServiceVersion int `pulumi:"serviceVersion"` +} + +// A collection of values returned by getDictionaries. +type GetDictionariesResult struct { + // List of all dictionaries for the version of the service. + Dictionaries []GetDictionariesDictionary `pulumi:"dictionaries"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + // Alphanumeric string identifying the service. + ServiceId string `pulumi:"serviceId"` + // Integer identifying a service version. + ServiceVersion int `pulumi:"serviceVersion"` +} + +func GetDictionariesOutput(ctx *pulumi.Context, args GetDictionariesOutputArgs, opts ...pulumi.InvokeOption) GetDictionariesResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetDictionariesResult, error) { + args := v.(GetDictionariesArgs) + r, err := GetDictionaries(ctx, &args, opts...) + var s GetDictionariesResult + if r != nil { + s = *r + } + return s, err + }).(GetDictionariesResultOutput) +} + +// A collection of arguments for invoking getDictionaries. +type GetDictionariesOutputArgs struct { + // Alphanumeric string identifying the service. + ServiceId pulumi.StringInput `pulumi:"serviceId"` + // Integer identifying a service version. + ServiceVersion pulumi.IntInput `pulumi:"serviceVersion"` +} + +func (GetDictionariesOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetDictionariesArgs)(nil)).Elem() +} + +// A collection of values returned by getDictionaries. +type GetDictionariesResultOutput struct{ *pulumi.OutputState } + +func (GetDictionariesResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetDictionariesResult)(nil)).Elem() +} + +func (o GetDictionariesResultOutput) ToGetDictionariesResultOutput() GetDictionariesResultOutput { + return o +} + +func (o GetDictionariesResultOutput) ToGetDictionariesResultOutputWithContext(ctx context.Context) GetDictionariesResultOutput { + return o +} + +// List of all dictionaries for the version of the service. +func (o GetDictionariesResultOutput) Dictionaries() GetDictionariesDictionaryArrayOutput { + return o.ApplyT(func(v GetDictionariesResult) []GetDictionariesDictionary { return v.Dictionaries }).(GetDictionariesDictionaryArrayOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o GetDictionariesResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetDictionariesResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Alphanumeric string identifying the service. +func (o GetDictionariesResultOutput) ServiceId() pulumi.StringOutput { + return o.ApplyT(func(v GetDictionariesResult) string { return v.ServiceId }).(pulumi.StringOutput) +} + +// Integer identifying a service version. +func (o GetDictionariesResultOutput) ServiceVersion() pulumi.IntOutput { + return o.ApplyT(func(v GetDictionariesResult) int { return v.ServiceVersion }).(pulumi.IntOutput) +} + +func init() { + pulumi.RegisterOutputType(GetDictionariesResultOutput{}) +} diff --git a/sdk/go/fastly/getTlsConfigurationIds.go b/sdk/go/fastly/getTlsConfigurationIds.go index 1f592807..b0552ebb 100644 --- a/sdk/go/fastly/getTlsConfigurationIds.go +++ b/sdk/go/fastly/getTlsConfigurationIds.go @@ -23,12 +23,12 @@ import ( // // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := fastly.GetTlsConfigurationIds(ctx, nil, nil) +// exampleTlsConfigurationIds, err := fastly.GetTlsConfigurationIds(ctx, nil, nil) // if err != nil { // return err // } // _, err = fastly.NewTlsActivation(ctx, "exampleTlsActivation", &fastly.TlsActivationArgs{ -// ConfigurationId: pulumi.Any(data.Fastly_tls_configuration.Example.Ids[0]), +// ConfigurationId: *pulumi.String(exampleTlsConfigurationIds.Ids[0]), // }) // if err != nil { // return err diff --git a/sdk/go/fastly/pulumiTypes.go b/sdk/go/fastly/pulumiTypes.go index e23459b5..8c05f33d 100644 --- a/sdk/go/fastly/pulumiTypes.go +++ b/sdk/go/fastly/pulumiTypes.go @@ -12256,6 +12256,374 @@ func (o ServiceVclProductEnablementPtrOutput) Websockets() pulumi.BoolPtrOutput }).(pulumi.BoolPtrOutput) } +type ServiceVclRateLimiter struct { + // The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + Action string `pulumi:"action"` + // Comma-separated list of VCL variables used to generate a counter key to identify a client + ClientKey string `pulumi:"clientKey"` + // Revision number of the rate limiting feature implementation + FeatureRevision *int `pulumi:"featureRevision"` + // Comma-separated list of HTTP methods to apply rate limiting to + HttpMethods string `pulumi:"httpMethods"` + // Name of the type of logging endpoint to be used when action is logOnly (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + LoggerType *string `pulumi:"loggerType"` + // A unique human readable name for the rate limiting rule + Name string `pulumi:"name"` + // Length of time in minutes that the rate limiter is in effect after the initial violation is detected + PenaltyBoxDuration int `pulumi:"penaltyBoxDuration"` + // Alphanumeric string identifying the rate limiter + RatelimiterId *string `pulumi:"ratelimiterId"` + // Custom response to be sent when the rate limit is exceeded. Required if action is response + Response *ServiceVclRateLimiterResponse `pulumi:"response"` + // Name of existing response object. Required if action is response_object + ResponseObjectName *string `pulumi:"responseObjectName"` + // Upper limit of requests per second allowed by the rate limiter + RpsLimit int `pulumi:"rpsLimit"` + // The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + UriDictionaryName *string `pulumi:"uriDictionaryName"` + // Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + WindowSize int `pulumi:"windowSize"` +} + +// ServiceVclRateLimiterInput is an input type that accepts ServiceVclRateLimiterArgs and ServiceVclRateLimiterOutput values. +// You can construct a concrete instance of `ServiceVclRateLimiterInput` via: +// +// ServiceVclRateLimiterArgs{...} +type ServiceVclRateLimiterInput interface { + pulumi.Input + + ToServiceVclRateLimiterOutput() ServiceVclRateLimiterOutput + ToServiceVclRateLimiterOutputWithContext(context.Context) ServiceVclRateLimiterOutput +} + +type ServiceVclRateLimiterArgs struct { + // The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + Action pulumi.StringInput `pulumi:"action"` + // Comma-separated list of VCL variables used to generate a counter key to identify a client + ClientKey pulumi.StringInput `pulumi:"clientKey"` + // Revision number of the rate limiting feature implementation + FeatureRevision pulumi.IntPtrInput `pulumi:"featureRevision"` + // Comma-separated list of HTTP methods to apply rate limiting to + HttpMethods pulumi.StringInput `pulumi:"httpMethods"` + // Name of the type of logging endpoint to be used when action is logOnly (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + LoggerType pulumi.StringPtrInput `pulumi:"loggerType"` + // A unique human readable name for the rate limiting rule + Name pulumi.StringInput `pulumi:"name"` + // Length of time in minutes that the rate limiter is in effect after the initial violation is detected + PenaltyBoxDuration pulumi.IntInput `pulumi:"penaltyBoxDuration"` + // Alphanumeric string identifying the rate limiter + RatelimiterId pulumi.StringPtrInput `pulumi:"ratelimiterId"` + // Custom response to be sent when the rate limit is exceeded. Required if action is response + Response ServiceVclRateLimiterResponsePtrInput `pulumi:"response"` + // Name of existing response object. Required if action is response_object + ResponseObjectName pulumi.StringPtrInput `pulumi:"responseObjectName"` + // Upper limit of requests per second allowed by the rate limiter + RpsLimit pulumi.IntInput `pulumi:"rpsLimit"` + // The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + UriDictionaryName pulumi.StringPtrInput `pulumi:"uriDictionaryName"` + // Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + WindowSize pulumi.IntInput `pulumi:"windowSize"` +} + +func (ServiceVclRateLimiterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceVclRateLimiter)(nil)).Elem() +} + +func (i ServiceVclRateLimiterArgs) ToServiceVclRateLimiterOutput() ServiceVclRateLimiterOutput { + return i.ToServiceVclRateLimiterOutputWithContext(context.Background()) +} + +func (i ServiceVclRateLimiterArgs) ToServiceVclRateLimiterOutputWithContext(ctx context.Context) ServiceVclRateLimiterOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceVclRateLimiterOutput) +} + +// ServiceVclRateLimiterArrayInput is an input type that accepts ServiceVclRateLimiterArray and ServiceVclRateLimiterArrayOutput values. +// You can construct a concrete instance of `ServiceVclRateLimiterArrayInput` via: +// +// ServiceVclRateLimiterArray{ ServiceVclRateLimiterArgs{...} } +type ServiceVclRateLimiterArrayInput interface { + pulumi.Input + + ToServiceVclRateLimiterArrayOutput() ServiceVclRateLimiterArrayOutput + ToServiceVclRateLimiterArrayOutputWithContext(context.Context) ServiceVclRateLimiterArrayOutput +} + +type ServiceVclRateLimiterArray []ServiceVclRateLimiterInput + +func (ServiceVclRateLimiterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ServiceVclRateLimiter)(nil)).Elem() +} + +func (i ServiceVclRateLimiterArray) ToServiceVclRateLimiterArrayOutput() ServiceVclRateLimiterArrayOutput { + return i.ToServiceVclRateLimiterArrayOutputWithContext(context.Background()) +} + +func (i ServiceVclRateLimiterArray) ToServiceVclRateLimiterArrayOutputWithContext(ctx context.Context) ServiceVclRateLimiterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceVclRateLimiterArrayOutput) +} + +type ServiceVclRateLimiterOutput struct{ *pulumi.OutputState } + +func (ServiceVclRateLimiterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceVclRateLimiter)(nil)).Elem() +} + +func (o ServiceVclRateLimiterOutput) ToServiceVclRateLimiterOutput() ServiceVclRateLimiterOutput { + return o +} + +func (o ServiceVclRateLimiterOutput) ToServiceVclRateLimiterOutputWithContext(ctx context.Context) ServiceVclRateLimiterOutput { + return o +} + +// The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) +func (o ServiceVclRateLimiterOutput) Action() pulumi.StringOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) string { return v.Action }).(pulumi.StringOutput) +} + +// Comma-separated list of VCL variables used to generate a counter key to identify a client +func (o ServiceVclRateLimiterOutput) ClientKey() pulumi.StringOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) string { return v.ClientKey }).(pulumi.StringOutput) +} + +// Revision number of the rate limiting feature implementation +func (o ServiceVclRateLimiterOutput) FeatureRevision() pulumi.IntPtrOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) *int { return v.FeatureRevision }).(pulumi.IntPtrOutput) +} + +// Comma-separated list of HTTP methods to apply rate limiting to +func (o ServiceVclRateLimiterOutput) HttpMethods() pulumi.StringOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) string { return v.HttpMethods }).(pulumi.StringOutput) +} + +// Name of the type of logging endpoint to be used when action is logOnly (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) +func (o ServiceVclRateLimiterOutput) LoggerType() pulumi.StringPtrOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) *string { return v.LoggerType }).(pulumi.StringPtrOutput) +} + +// A unique human readable name for the rate limiting rule +func (o ServiceVclRateLimiterOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) string { return v.Name }).(pulumi.StringOutput) +} + +// Length of time in minutes that the rate limiter is in effect after the initial violation is detected +func (o ServiceVclRateLimiterOutput) PenaltyBoxDuration() pulumi.IntOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) int { return v.PenaltyBoxDuration }).(pulumi.IntOutput) +} + +// Alphanumeric string identifying the rate limiter +func (o ServiceVclRateLimiterOutput) RatelimiterId() pulumi.StringPtrOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) *string { return v.RatelimiterId }).(pulumi.StringPtrOutput) +} + +// Custom response to be sent when the rate limit is exceeded. Required if action is response +func (o ServiceVclRateLimiterOutput) Response() ServiceVclRateLimiterResponsePtrOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) *ServiceVclRateLimiterResponse { return v.Response }).(ServiceVclRateLimiterResponsePtrOutput) +} + +// Name of existing response object. Required if action is response_object +func (o ServiceVclRateLimiterOutput) ResponseObjectName() pulumi.StringPtrOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) *string { return v.ResponseObjectName }).(pulumi.StringPtrOutput) +} + +// Upper limit of requests per second allowed by the rate limiter +func (o ServiceVclRateLimiterOutput) RpsLimit() pulumi.IntOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) int { return v.RpsLimit }).(pulumi.IntOutput) +} + +// The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited +func (o ServiceVclRateLimiterOutput) UriDictionaryName() pulumi.StringPtrOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) *string { return v.UriDictionaryName }).(pulumi.StringPtrOutput) +} + +// Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) +func (o ServiceVclRateLimiterOutput) WindowSize() pulumi.IntOutput { + return o.ApplyT(func(v ServiceVclRateLimiter) int { return v.WindowSize }).(pulumi.IntOutput) +} + +type ServiceVclRateLimiterArrayOutput struct{ *pulumi.OutputState } + +func (ServiceVclRateLimiterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ServiceVclRateLimiter)(nil)).Elem() +} + +func (o ServiceVclRateLimiterArrayOutput) ToServiceVclRateLimiterArrayOutput() ServiceVclRateLimiterArrayOutput { + return o +} + +func (o ServiceVclRateLimiterArrayOutput) ToServiceVclRateLimiterArrayOutputWithContext(ctx context.Context) ServiceVclRateLimiterArrayOutput { + return o +} + +func (o ServiceVclRateLimiterArrayOutput) Index(i pulumi.IntInput) ServiceVclRateLimiterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ServiceVclRateLimiter { + return vs[0].([]ServiceVclRateLimiter)[vs[1].(int)] + }).(ServiceVclRateLimiterOutput) +} + +type ServiceVclRateLimiterResponse struct { + Content string `pulumi:"content"` + ContentType string `pulumi:"contentType"` + Status int `pulumi:"status"` +} + +// ServiceVclRateLimiterResponseInput is an input type that accepts ServiceVclRateLimiterResponseArgs and ServiceVclRateLimiterResponseOutput values. +// You can construct a concrete instance of `ServiceVclRateLimiterResponseInput` via: +// +// ServiceVclRateLimiterResponseArgs{...} +type ServiceVclRateLimiterResponseInput interface { + pulumi.Input + + ToServiceVclRateLimiterResponseOutput() ServiceVclRateLimiterResponseOutput + ToServiceVclRateLimiterResponseOutputWithContext(context.Context) ServiceVclRateLimiterResponseOutput +} + +type ServiceVclRateLimiterResponseArgs struct { + Content pulumi.StringInput `pulumi:"content"` + ContentType pulumi.StringInput `pulumi:"contentType"` + Status pulumi.IntInput `pulumi:"status"` +} + +func (ServiceVclRateLimiterResponseArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceVclRateLimiterResponse)(nil)).Elem() +} + +func (i ServiceVclRateLimiterResponseArgs) ToServiceVclRateLimiterResponseOutput() ServiceVclRateLimiterResponseOutput { + return i.ToServiceVclRateLimiterResponseOutputWithContext(context.Background()) +} + +func (i ServiceVclRateLimiterResponseArgs) ToServiceVclRateLimiterResponseOutputWithContext(ctx context.Context) ServiceVclRateLimiterResponseOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceVclRateLimiterResponseOutput) +} + +func (i ServiceVclRateLimiterResponseArgs) ToServiceVclRateLimiterResponsePtrOutput() ServiceVclRateLimiterResponsePtrOutput { + return i.ToServiceVclRateLimiterResponsePtrOutputWithContext(context.Background()) +} + +func (i ServiceVclRateLimiterResponseArgs) ToServiceVclRateLimiterResponsePtrOutputWithContext(ctx context.Context) ServiceVclRateLimiterResponsePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceVclRateLimiterResponseOutput).ToServiceVclRateLimiterResponsePtrOutputWithContext(ctx) +} + +// ServiceVclRateLimiterResponsePtrInput is an input type that accepts ServiceVclRateLimiterResponseArgs, ServiceVclRateLimiterResponsePtr and ServiceVclRateLimiterResponsePtrOutput values. +// You can construct a concrete instance of `ServiceVclRateLimiterResponsePtrInput` via: +// +// ServiceVclRateLimiterResponseArgs{...} +// +// or: +// +// nil +type ServiceVclRateLimiterResponsePtrInput interface { + pulumi.Input + + ToServiceVclRateLimiterResponsePtrOutput() ServiceVclRateLimiterResponsePtrOutput + ToServiceVclRateLimiterResponsePtrOutputWithContext(context.Context) ServiceVclRateLimiterResponsePtrOutput +} + +type serviceVclRateLimiterResponsePtrType ServiceVclRateLimiterResponseArgs + +func ServiceVclRateLimiterResponsePtr(v *ServiceVclRateLimiterResponseArgs) ServiceVclRateLimiterResponsePtrInput { + return (*serviceVclRateLimiterResponsePtrType)(v) +} + +func (*serviceVclRateLimiterResponsePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceVclRateLimiterResponse)(nil)).Elem() +} + +func (i *serviceVclRateLimiterResponsePtrType) ToServiceVclRateLimiterResponsePtrOutput() ServiceVclRateLimiterResponsePtrOutput { + return i.ToServiceVclRateLimiterResponsePtrOutputWithContext(context.Background()) +} + +func (i *serviceVclRateLimiterResponsePtrType) ToServiceVclRateLimiterResponsePtrOutputWithContext(ctx context.Context) ServiceVclRateLimiterResponsePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceVclRateLimiterResponsePtrOutput) +} + +type ServiceVclRateLimiterResponseOutput struct{ *pulumi.OutputState } + +func (ServiceVclRateLimiterResponseOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ServiceVclRateLimiterResponse)(nil)).Elem() +} + +func (o ServiceVclRateLimiterResponseOutput) ToServiceVclRateLimiterResponseOutput() ServiceVclRateLimiterResponseOutput { + return o +} + +func (o ServiceVclRateLimiterResponseOutput) ToServiceVclRateLimiterResponseOutputWithContext(ctx context.Context) ServiceVclRateLimiterResponseOutput { + return o +} + +func (o ServiceVclRateLimiterResponseOutput) ToServiceVclRateLimiterResponsePtrOutput() ServiceVclRateLimiterResponsePtrOutput { + return o.ToServiceVclRateLimiterResponsePtrOutputWithContext(context.Background()) +} + +func (o ServiceVclRateLimiterResponseOutput) ToServiceVclRateLimiterResponsePtrOutputWithContext(ctx context.Context) ServiceVclRateLimiterResponsePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ServiceVclRateLimiterResponse) *ServiceVclRateLimiterResponse { + return &v + }).(ServiceVclRateLimiterResponsePtrOutput) +} + +func (o ServiceVclRateLimiterResponseOutput) Content() pulumi.StringOutput { + return o.ApplyT(func(v ServiceVclRateLimiterResponse) string { return v.Content }).(pulumi.StringOutput) +} + +func (o ServiceVclRateLimiterResponseOutput) ContentType() pulumi.StringOutput { + return o.ApplyT(func(v ServiceVclRateLimiterResponse) string { return v.ContentType }).(pulumi.StringOutput) +} + +func (o ServiceVclRateLimiterResponseOutput) Status() pulumi.IntOutput { + return o.ApplyT(func(v ServiceVclRateLimiterResponse) int { return v.Status }).(pulumi.IntOutput) +} + +type ServiceVclRateLimiterResponsePtrOutput struct{ *pulumi.OutputState } + +func (ServiceVclRateLimiterResponsePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceVclRateLimiterResponse)(nil)).Elem() +} + +func (o ServiceVclRateLimiterResponsePtrOutput) ToServiceVclRateLimiterResponsePtrOutput() ServiceVclRateLimiterResponsePtrOutput { + return o +} + +func (o ServiceVclRateLimiterResponsePtrOutput) ToServiceVclRateLimiterResponsePtrOutputWithContext(ctx context.Context) ServiceVclRateLimiterResponsePtrOutput { + return o +} + +func (o ServiceVclRateLimiterResponsePtrOutput) Elem() ServiceVclRateLimiterResponseOutput { + return o.ApplyT(func(v *ServiceVclRateLimiterResponse) ServiceVclRateLimiterResponse { + if v != nil { + return *v + } + var ret ServiceVclRateLimiterResponse + return ret + }).(ServiceVclRateLimiterResponseOutput) +} + +func (o ServiceVclRateLimiterResponsePtrOutput) Content() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ServiceVclRateLimiterResponse) *string { + if v == nil { + return nil + } + return &v.Content + }).(pulumi.StringPtrOutput) +} + +func (o ServiceVclRateLimiterResponsePtrOutput) ContentType() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ServiceVclRateLimiterResponse) *string { + if v == nil { + return nil + } + return &v.ContentType + }).(pulumi.StringPtrOutput) +} + +func (o ServiceVclRateLimiterResponsePtrOutput) Status() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ServiceVclRateLimiterResponse) *int { + if v == nil { + return nil + } + return &v.Status + }).(pulumi.IntPtrOutput) +} + type ServiceVclRequestSetting struct { // Allows you to terminate request handling and immediately perform an action. When set it can be `lookup` or `pass` (Ignore the cache completely) Action *string `pulumi:"action"` @@ -13632,6 +14000,115 @@ func (o GetDatacentersPopArrayOutput) Index(i pulumi.IntInput) GetDatacentersPop }).(GetDatacentersPopOutput) } +type GetDictionariesDictionary struct { + // The ID of this resource. + Id string `pulumi:"id"` + Name string `pulumi:"name"` + WriteOnly bool `pulumi:"writeOnly"` +} + +// GetDictionariesDictionaryInput is an input type that accepts GetDictionariesDictionaryArgs and GetDictionariesDictionaryOutput values. +// You can construct a concrete instance of `GetDictionariesDictionaryInput` via: +// +// GetDictionariesDictionaryArgs{...} +type GetDictionariesDictionaryInput interface { + pulumi.Input + + ToGetDictionariesDictionaryOutput() GetDictionariesDictionaryOutput + ToGetDictionariesDictionaryOutputWithContext(context.Context) GetDictionariesDictionaryOutput +} + +type GetDictionariesDictionaryArgs struct { + // The ID of this resource. + Id pulumi.StringInput `pulumi:"id"` + Name pulumi.StringInput `pulumi:"name"` + WriteOnly pulumi.BoolInput `pulumi:"writeOnly"` +} + +func (GetDictionariesDictionaryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetDictionariesDictionary)(nil)).Elem() +} + +func (i GetDictionariesDictionaryArgs) ToGetDictionariesDictionaryOutput() GetDictionariesDictionaryOutput { + return i.ToGetDictionariesDictionaryOutputWithContext(context.Background()) +} + +func (i GetDictionariesDictionaryArgs) ToGetDictionariesDictionaryOutputWithContext(ctx context.Context) GetDictionariesDictionaryOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetDictionariesDictionaryOutput) +} + +// GetDictionariesDictionaryArrayInput is an input type that accepts GetDictionariesDictionaryArray and GetDictionariesDictionaryArrayOutput values. +// You can construct a concrete instance of `GetDictionariesDictionaryArrayInput` via: +// +// GetDictionariesDictionaryArray{ GetDictionariesDictionaryArgs{...} } +type GetDictionariesDictionaryArrayInput interface { + pulumi.Input + + ToGetDictionariesDictionaryArrayOutput() GetDictionariesDictionaryArrayOutput + ToGetDictionariesDictionaryArrayOutputWithContext(context.Context) GetDictionariesDictionaryArrayOutput +} + +type GetDictionariesDictionaryArray []GetDictionariesDictionaryInput + +func (GetDictionariesDictionaryArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetDictionariesDictionary)(nil)).Elem() +} + +func (i GetDictionariesDictionaryArray) ToGetDictionariesDictionaryArrayOutput() GetDictionariesDictionaryArrayOutput { + return i.ToGetDictionariesDictionaryArrayOutputWithContext(context.Background()) +} + +func (i GetDictionariesDictionaryArray) ToGetDictionariesDictionaryArrayOutputWithContext(ctx context.Context) GetDictionariesDictionaryArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetDictionariesDictionaryArrayOutput) +} + +type GetDictionariesDictionaryOutput struct{ *pulumi.OutputState } + +func (GetDictionariesDictionaryOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetDictionariesDictionary)(nil)).Elem() +} + +func (o GetDictionariesDictionaryOutput) ToGetDictionariesDictionaryOutput() GetDictionariesDictionaryOutput { + return o +} + +func (o GetDictionariesDictionaryOutput) ToGetDictionariesDictionaryOutputWithContext(ctx context.Context) GetDictionariesDictionaryOutput { + return o +} + +// The ID of this resource. +func (o GetDictionariesDictionaryOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetDictionariesDictionary) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetDictionariesDictionaryOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetDictionariesDictionary) string { return v.Name }).(pulumi.StringOutput) +} + +func (o GetDictionariesDictionaryOutput) WriteOnly() pulumi.BoolOutput { + return o.ApplyT(func(v GetDictionariesDictionary) bool { return v.WriteOnly }).(pulumi.BoolOutput) +} + +type GetDictionariesDictionaryArrayOutput struct{ *pulumi.OutputState } + +func (GetDictionariesDictionaryArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetDictionariesDictionary)(nil)).Elem() +} + +func (o GetDictionariesDictionaryArrayOutput) ToGetDictionariesDictionaryArrayOutput() GetDictionariesDictionaryArrayOutput { + return o +} + +func (o GetDictionariesDictionaryArrayOutput) ToGetDictionariesDictionaryArrayOutputWithContext(ctx context.Context) GetDictionariesDictionaryArrayOutput { + return o +} + +func (o GetDictionariesDictionaryArrayOutput) Index(i pulumi.IntInput) GetDictionariesDictionaryOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetDictionariesDictionary { + return vs[0].([]GetDictionariesDictionary)[vs[1].(int)] + }).(GetDictionariesDictionaryOutput) +} + type GetServicesDetail struct { Comment string `pulumi:"comment"` CreatedAt string `pulumi:"createdAt"` @@ -14133,6 +14610,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclLoggingSyslogArrayInput)(nil)).Elem(), ServiceVclLoggingSyslogArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclProductEnablementInput)(nil)).Elem(), ServiceVclProductEnablementArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclProductEnablementPtrInput)(nil)).Elem(), ServiceVclProductEnablementArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclRateLimiterInput)(nil)).Elem(), ServiceVclRateLimiterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclRateLimiterArrayInput)(nil)).Elem(), ServiceVclRateLimiterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclRateLimiterResponseInput)(nil)).Elem(), ServiceVclRateLimiterResponseArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclRateLimiterResponsePtrInput)(nil)).Elem(), ServiceVclRateLimiterResponseArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclRequestSettingInput)(nil)).Elem(), ServiceVclRequestSettingArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclRequestSettingArrayInput)(nil)).Elem(), ServiceVclRequestSettingArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ServiceVclResponseObjectInput)(nil)).Elem(), ServiceVclResponseObjectArgs{}) @@ -14153,6 +14634,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((*GetDictionariesDictionaryInput)(nil)).Elem(), GetDictionariesDictionaryArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetDictionariesDictionaryArrayInput)(nil)).Elem(), GetDictionariesDictionaryArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetServicesDetailInput)(nil)).Elem(), GetServicesDetailArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetServicesDetailArrayInput)(nil)).Elem(), GetServicesDetailArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTlsConfigurationDnsRecordInput)(nil)).Elem(), GetTlsConfigurationDnsRecordArgs{}) @@ -14299,6 +14782,10 @@ func init() { pulumi.RegisterOutputType(ServiceVclLoggingSyslogArrayOutput{}) pulumi.RegisterOutputType(ServiceVclProductEnablementOutput{}) pulumi.RegisterOutputType(ServiceVclProductEnablementPtrOutput{}) + pulumi.RegisterOutputType(ServiceVclRateLimiterOutput{}) + pulumi.RegisterOutputType(ServiceVclRateLimiterArrayOutput{}) + pulumi.RegisterOutputType(ServiceVclRateLimiterResponseOutput{}) + pulumi.RegisterOutputType(ServiceVclRateLimiterResponsePtrOutput{}) pulumi.RegisterOutputType(ServiceVclRequestSettingOutput{}) pulumi.RegisterOutputType(ServiceVclRequestSettingArrayOutput{}) pulumi.RegisterOutputType(ServiceVclResponseObjectOutput{}) @@ -14319,6 +14806,8 @@ func init() { pulumi.RegisterOutputType(TlsSubscriptionManagedHttpChallengeArrayOutput{}) pulumi.RegisterOutputType(GetDatacentersPopOutput{}) pulumi.RegisterOutputType(GetDatacentersPopArrayOutput{}) + pulumi.RegisterOutputType(GetDictionariesDictionaryOutput{}) + pulumi.RegisterOutputType(GetDictionariesDictionaryArrayOutput{}) pulumi.RegisterOutputType(GetServicesDetailOutput{}) pulumi.RegisterOutputType(GetServicesDetailArrayOutput{}) pulumi.RegisterOutputType(GetTlsConfigurationDnsRecordOutput{}) diff --git a/sdk/go/fastly/serviceVcl.go b/sdk/go/fastly/serviceVcl.go index 713fa232..4e6da799 100644 --- a/sdk/go/fastly/serviceVcl.go +++ b/sdk/go/fastly/serviceVcl.go @@ -102,6 +102,7 @@ type ServiceVcl struct { // The unique name for the Service to create Name pulumi.StringOutput `pulumi:"name"` ProductEnablement ServiceVclProductEnablementPtrOutput `pulumi:"productEnablement"` + RateLimiters ServiceVclRateLimiterArrayOutput `pulumi:"rateLimiters"` RequestSettings ServiceVclRequestSettingArrayOutput `pulumi:"requestSettings"` ResponseObjects ServiceVclResponseObjectArrayOutput `pulumi:"responseObjects"` // Services that are active cannot be destroyed. If set to `true` a service Terraform intends to destroy will instead be @@ -214,6 +215,7 @@ type serviceVclState struct { // The unique name for the Service to create Name *string `pulumi:"name"` ProductEnablement *ServiceVclProductEnablement `pulumi:"productEnablement"` + RateLimiters []ServiceVclRateLimiter `pulumi:"rateLimiters"` RequestSettings []ServiceVclRequestSetting `pulumi:"requestSettings"` ResponseObjects []ServiceVclResponseObject `pulumi:"responseObjects"` // Services that are active cannot be destroyed. If set to `true` a service Terraform intends to destroy will instead be @@ -295,6 +297,7 @@ type ServiceVclState struct { // The unique name for the Service to create Name pulumi.StringPtrInput ProductEnablement ServiceVclProductEnablementPtrInput + RateLimiters ServiceVclRateLimiterArrayInput RequestSettings ServiceVclRequestSettingArrayInput ResponseObjects ServiceVclResponseObjectArrayInput // Services that are active cannot be destroyed. If set to `true` a service Terraform intends to destroy will instead be @@ -370,6 +373,7 @@ type serviceVclArgs struct { // The unique name for the Service to create Name *string `pulumi:"name"` ProductEnablement *ServiceVclProductEnablement `pulumi:"productEnablement"` + RateLimiters []ServiceVclRateLimiter `pulumi:"rateLimiters"` RequestSettings []ServiceVclRequestSetting `pulumi:"requestSettings"` ResponseObjects []ServiceVclResponseObject `pulumi:"responseObjects"` // Services that are active cannot be destroyed. If set to `true` a service Terraform intends to destroy will instead be @@ -442,6 +446,7 @@ type ServiceVclArgs struct { // The unique name for the Service to create Name pulumi.StringPtrInput ProductEnablement ServiceVclProductEnablementPtrInput + RateLimiters ServiceVclRateLimiterArrayInput RequestSettings ServiceVclRequestSettingArrayInput ResponseObjects ServiceVclResponseObjectArrayInput // Services that are active cannot be destroyed. If set to `true` a service Terraform intends to destroy will instead be @@ -756,6 +761,10 @@ func (o ServiceVclOutput) ProductEnablement() ServiceVclProductEnablementPtrOutp return o.ApplyT(func(v *ServiceVcl) ServiceVclProductEnablementPtrOutput { return v.ProductEnablement }).(ServiceVclProductEnablementPtrOutput) } +func (o ServiceVclOutput) RateLimiters() ServiceVclRateLimiterArrayOutput { + return o.ApplyT(func(v *ServiceVcl) ServiceVclRateLimiterArrayOutput { return v.RateLimiters }).(ServiceVclRateLimiterArrayOutput) +} + func (o ServiceVclOutput) RequestSettings() ServiceVclRequestSettingArrayOutput { return o.ApplyT(func(v *ServiceVcl) ServiceVclRequestSettingArrayOutput { return v.RequestSettings }).(ServiceVclRequestSettingArrayOutput) } diff --git a/sdk/java/src/main/java/com/pulumi/fastly/FastlyFunctions.java b/sdk/java/src/main/java/com/pulumi/fastly/FastlyFunctions.java index 354fe402..9c53b52d 100644 --- a/sdk/java/src/main/java/com/pulumi/fastly/FastlyFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/fastly/FastlyFunctions.java @@ -8,6 +8,8 @@ import com.pulumi.deployment.Deployment; import com.pulumi.deployment.InvokeOptions; import com.pulumi.fastly.Utilities; +import com.pulumi.fastly.inputs.GetDictionariesArgs; +import com.pulumi.fastly.inputs.GetDictionariesPlainArgs; import com.pulumi.fastly.inputs.GetTlsActivationArgs; import com.pulumi.fastly.inputs.GetTlsActivationIdsArgs; import com.pulumi.fastly.inputs.GetTlsActivationIdsPlainArgs; @@ -27,6 +29,7 @@ import com.pulumi.fastly.inputs.GetWafRulesArgs; import com.pulumi.fastly.inputs.GetWafRulesPlainArgs; import com.pulumi.fastly.outputs.GetDatacentersResult; +import com.pulumi.fastly.outputs.GetDictionariesResult; import com.pulumi.fastly.outputs.GetFastlyIpRangesResult; import com.pulumi.fastly.outputs.GetServicesResult; import com.pulumi.fastly.outputs.GetTlsActivationIdsResult; @@ -89,6 +92,254 @@ public static Output getDatacenters(InvokeArgs args, Invok public static CompletableFuture getDatacentersPlain(InvokeArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("fastly:index/getDatacenters:getDatacenters", TypeShape.of(GetDatacentersResult.class), args, Utilities.withVersion(options)); } + /** + * Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.fastly.ServiceVcl; + * import com.pulumi.fastly.ServiceVclArgs; + * import com.pulumi.fastly.inputs.ServiceVclDomainArgs; + * import com.pulumi.fastly.inputs.ServiceVclDictionaryArgs; + * import com.pulumi.fastly.FastlyFunctions; + * import com.pulumi.fastly.inputs.GetDictionariesArgs; + * import java.util.List; + * import java.util.ArrayList; + * import java.util.Map; + * import java.io.File; + * import java.nio.file.Files; + * import java.nio.file.Paths; + * + * public class App { + * public static void main(String[] args) { + * Pulumi.run(App::stack); + * } + * + * public static void stack(Context ctx) { + * var exampleServiceVcl = new ServiceVcl("exampleServiceVcl", ServiceVclArgs.builder() + * .domains(ServiceVclDomainArgs.builder() + * .name("example.com") + * .build()) + * .dictionaries( + * ServiceVclDictionaryArgs.builder() + * .name("example_1") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_2") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_3") + * .build()) + * .forceDestroy(true) + * .build()); + * + * final var exampleDictionaries = FastlyFunctions.getDictionaries(GetDictionariesArgs.builder() + * .serviceId(exampleServiceVcl.id()) + * .serviceVersion(exampleServiceVcl.activeVersion()) + * .build()); + * + * ctx.export("serviceDictionaries", exampleDictionaries.applyValue(getDictionariesResult -> getDictionariesResult)); + * } + * } + * ``` + * + * [1]: https://developer.fastly.com/reference/api/dictionaries/ + * + */ + public static Output getDictionaries(GetDictionariesArgs args) { + return getDictionaries(args, InvokeOptions.Empty); + } + /** + * Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.fastly.ServiceVcl; + * import com.pulumi.fastly.ServiceVclArgs; + * import com.pulumi.fastly.inputs.ServiceVclDomainArgs; + * import com.pulumi.fastly.inputs.ServiceVclDictionaryArgs; + * import com.pulumi.fastly.FastlyFunctions; + * import com.pulumi.fastly.inputs.GetDictionariesArgs; + * import java.util.List; + * import java.util.ArrayList; + * import java.util.Map; + * import java.io.File; + * import java.nio.file.Files; + * import java.nio.file.Paths; + * + * public class App { + * public static void main(String[] args) { + * Pulumi.run(App::stack); + * } + * + * public static void stack(Context ctx) { + * var exampleServiceVcl = new ServiceVcl("exampleServiceVcl", ServiceVclArgs.builder() + * .domains(ServiceVclDomainArgs.builder() + * .name("example.com") + * .build()) + * .dictionaries( + * ServiceVclDictionaryArgs.builder() + * .name("example_1") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_2") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_3") + * .build()) + * .forceDestroy(true) + * .build()); + * + * final var exampleDictionaries = FastlyFunctions.getDictionaries(GetDictionariesArgs.builder() + * .serviceId(exampleServiceVcl.id()) + * .serviceVersion(exampleServiceVcl.activeVersion()) + * .build()); + * + * ctx.export("serviceDictionaries", exampleDictionaries.applyValue(getDictionariesResult -> getDictionariesResult)); + * } + * } + * ``` + * + * [1]: https://developer.fastly.com/reference/api/dictionaries/ + * + */ + public static CompletableFuture getDictionariesPlain(GetDictionariesPlainArgs args) { + return getDictionariesPlain(args, InvokeOptions.Empty); + } + /** + * Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.fastly.ServiceVcl; + * import com.pulumi.fastly.ServiceVclArgs; + * import com.pulumi.fastly.inputs.ServiceVclDomainArgs; + * import com.pulumi.fastly.inputs.ServiceVclDictionaryArgs; + * import com.pulumi.fastly.FastlyFunctions; + * import com.pulumi.fastly.inputs.GetDictionariesArgs; + * import java.util.List; + * import java.util.ArrayList; + * import java.util.Map; + * import java.io.File; + * import java.nio.file.Files; + * import java.nio.file.Paths; + * + * public class App { + * public static void main(String[] args) { + * Pulumi.run(App::stack); + * } + * + * public static void stack(Context ctx) { + * var exampleServiceVcl = new ServiceVcl("exampleServiceVcl", ServiceVclArgs.builder() + * .domains(ServiceVclDomainArgs.builder() + * .name("example.com") + * .build()) + * .dictionaries( + * ServiceVclDictionaryArgs.builder() + * .name("example_1") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_2") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_3") + * .build()) + * .forceDestroy(true) + * .build()); + * + * final var exampleDictionaries = FastlyFunctions.getDictionaries(GetDictionariesArgs.builder() + * .serviceId(exampleServiceVcl.id()) + * .serviceVersion(exampleServiceVcl.activeVersion()) + * .build()); + * + * ctx.export("serviceDictionaries", exampleDictionaries.applyValue(getDictionariesResult -> getDictionariesResult)); + * } + * } + * ``` + * + * [1]: https://developer.fastly.com/reference/api/dictionaries/ + * + */ + public static Output getDictionaries(GetDictionariesArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("fastly:index/getDictionaries:getDictionaries", TypeShape.of(GetDictionariesResult.class), args, Utilities.withVersion(options)); + } + /** + * Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.fastly.ServiceVcl; + * import com.pulumi.fastly.ServiceVclArgs; + * import com.pulumi.fastly.inputs.ServiceVclDomainArgs; + * import com.pulumi.fastly.inputs.ServiceVclDictionaryArgs; + * import com.pulumi.fastly.FastlyFunctions; + * import com.pulumi.fastly.inputs.GetDictionariesArgs; + * import java.util.List; + * import java.util.ArrayList; + * import java.util.Map; + * import java.io.File; + * import java.nio.file.Files; + * import java.nio.file.Paths; + * + * public class App { + * public static void main(String[] args) { + * Pulumi.run(App::stack); + * } + * + * public static void stack(Context ctx) { + * var exampleServiceVcl = new ServiceVcl("exampleServiceVcl", ServiceVclArgs.builder() + * .domains(ServiceVclDomainArgs.builder() + * .name("example.com") + * .build()) + * .dictionaries( + * ServiceVclDictionaryArgs.builder() + * .name("example_1") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_2") + * .build(), + * ServiceVclDictionaryArgs.builder() + * .name("example_3") + * .build()) + * .forceDestroy(true) + * .build()); + * + * final var exampleDictionaries = FastlyFunctions.getDictionaries(GetDictionariesArgs.builder() + * .serviceId(exampleServiceVcl.id()) + * .serviceVersion(exampleServiceVcl.activeVersion()) + * .build()); + * + * ctx.export("serviceDictionaries", exampleDictionaries.applyValue(getDictionariesResult -> getDictionariesResult)); + * } + * } + * ``` + * + * [1]: https://developer.fastly.com/reference/api/dictionaries/ + * + */ + public static CompletableFuture getDictionariesPlain(GetDictionariesPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("fastly:index/getDictionaries:getDictionaries", TypeShape.of(GetDictionariesResult.class), args, Utilities.withVersion(options)); + } /** * Use this data source to get the [IP ranges](https://docs.fastly.com/guides/securing-communications/accessing-fastlys-ip-ranges) of Fastly edge nodes. * @@ -1546,7 +1797,7 @@ public static CompletableFuture getTlsConfigurationPl * final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds(); * * var exampleTlsActivation = new TlsActivation("exampleTlsActivation", TlsActivationArgs.builder() - * .configurationId(data.fastly_tls_configuration().example().ids()[0]) + * .configurationId(exampleTlsConfigurationIds.applyValue(getTlsConfigurationIdsResult -> getTlsConfigurationIdsResult.ids()[0])) * .build()); * * } @@ -1586,7 +1837,7 @@ public static Output getTlsConfigurationIds() { * final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds(); * * var exampleTlsActivation = new TlsActivation("exampleTlsActivation", TlsActivationArgs.builder() - * .configurationId(data.fastly_tls_configuration().example().ids()[0]) + * .configurationId(exampleTlsConfigurationIds.applyValue(getTlsConfigurationIdsResult -> getTlsConfigurationIdsResult.ids()[0])) * .build()); * * } @@ -1626,7 +1877,7 @@ public static CompletableFuture getTlsConfiguratio * final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds(); * * var exampleTlsActivation = new TlsActivation("exampleTlsActivation", TlsActivationArgs.builder() - * .configurationId(data.fastly_tls_configuration().example().ids()[0]) + * .configurationId(exampleTlsConfigurationIds.applyValue(getTlsConfigurationIdsResult -> getTlsConfigurationIdsResult.ids()[0])) * .build()); * * } @@ -1666,7 +1917,7 @@ public static Output getTlsConfigurationIds(Invoke * final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds(); * * var exampleTlsActivation = new TlsActivation("exampleTlsActivation", TlsActivationArgs.builder() - * .configurationId(data.fastly_tls_configuration().example().ids()[0]) + * .configurationId(exampleTlsConfigurationIds.applyValue(getTlsConfigurationIdsResult -> getTlsConfigurationIdsResult.ids()[0])) * .build()); * * } @@ -1706,7 +1957,7 @@ public static CompletableFuture getTlsConfiguratio * final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds(); * * var exampleTlsActivation = new TlsActivation("exampleTlsActivation", TlsActivationArgs.builder() - * .configurationId(data.fastly_tls_configuration().example().ids()[0]) + * .configurationId(exampleTlsConfigurationIds.applyValue(getTlsConfigurationIdsResult -> getTlsConfigurationIdsResult.ids()[0])) * .build()); * * } @@ -1746,7 +1997,7 @@ public static Output getTlsConfigurationIds(Invoke * final var exampleTlsConfigurationIds = FastlyFunctions.getTlsConfigurationIds(); * * var exampleTlsActivation = new TlsActivation("exampleTlsActivation", TlsActivationArgs.builder() - * .configurationId(data.fastly_tls_configuration().example().ids()[0]) + * .configurationId(exampleTlsConfigurationIds.applyValue(getTlsConfigurationIdsResult -> getTlsConfigurationIdsResult.ids()[0])) * .build()); * * } diff --git a/sdk/java/src/main/java/com/pulumi/fastly/ServiceVcl.java b/sdk/java/src/main/java/com/pulumi/fastly/ServiceVcl.java index 0eb55af1..c00db8fc 100644 --- a/sdk/java/src/main/java/com/pulumi/fastly/ServiceVcl.java +++ b/sdk/java/src/main/java/com/pulumi/fastly/ServiceVcl.java @@ -48,6 +48,7 @@ import com.pulumi.fastly.outputs.ServiceVclLoggingSumologic; import com.pulumi.fastly.outputs.ServiceVclLoggingSyslog; import com.pulumi.fastly.outputs.ServiceVclProductEnablement; +import com.pulumi.fastly.outputs.ServiceVclRateLimiter; import com.pulumi.fastly.outputs.ServiceVclRequestSetting; import com.pulumi.fastly.outputs.ServiceVclResponseObject; import com.pulumi.fastly.outputs.ServiceVclSnippet; @@ -777,6 +778,12 @@ public Output name() { public Output> productEnablement() { return Codegen.optional(this.productEnablement); } + @Export(name="rateLimiters", type=List.class, parameters={ServiceVclRateLimiter.class}) + private Output> rateLimiters; + + public Output>> rateLimiters() { + return Codegen.optional(this.rateLimiters); + } @Export(name="requestSettings", type=List.class, parameters={ServiceVclRequestSetting.class}) private Output> requestSettings; diff --git a/sdk/java/src/main/java/com/pulumi/fastly/ServiceVclArgs.java b/sdk/java/src/main/java/com/pulumi/fastly/ServiceVclArgs.java index 5080c041..bb834632 100644 --- a/sdk/java/src/main/java/com/pulumi/fastly/ServiceVclArgs.java +++ b/sdk/java/src/main/java/com/pulumi/fastly/ServiceVclArgs.java @@ -43,6 +43,7 @@ import com.pulumi.fastly.inputs.ServiceVclLoggingSumologicArgs; import com.pulumi.fastly.inputs.ServiceVclLoggingSyslogArgs; import com.pulumi.fastly.inputs.ServiceVclProductEnablementArgs; +import com.pulumi.fastly.inputs.ServiceVclRateLimiterArgs; import com.pulumi.fastly.inputs.ServiceVclRequestSettingArgs; import com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs; import com.pulumi.fastly.inputs.ServiceVclSnippetArgs; @@ -440,6 +441,13 @@ public Optional> productEnablement() { return Optional.ofNullable(this.productEnablement); } + @Import(name="rateLimiters") + private @Nullable Output> rateLimiters; + + public Optional>> rateLimiters() { + return Optional.ofNullable(this.rateLimiters); + } + @Import(name="requestSettings") private @Nullable Output> requestSettings; @@ -587,6 +595,7 @@ private ServiceVclArgs(ServiceVclArgs $) { this.loggingSyslogs = $.loggingSyslogs; this.name = $.name; this.productEnablement = $.productEnablement; + this.rateLimiters = $.rateLimiters; this.requestSettings = $.requestSettings; this.responseObjects = $.responseObjects; this.reuse = $.reuse; @@ -1271,6 +1280,19 @@ public Builder productEnablement(ServiceVclProductEnablementArgs productEnableme return productEnablement(Output.of(productEnablement)); } + public Builder rateLimiters(@Nullable Output> rateLimiters) { + $.rateLimiters = rateLimiters; + return this; + } + + public Builder rateLimiters(List rateLimiters) { + return rateLimiters(Output.of(rateLimiters)); + } + + public Builder rateLimiters(ServiceVclRateLimiterArgs... rateLimiters) { + return rateLimiters(List.of(rateLimiters)); + } + public Builder requestSettings(@Nullable Output> requestSettings) { $.requestSettings = requestSettings; return this; diff --git a/sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesArgs.java b/sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesArgs.java new file mode 100644 index 00000000..e040500d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesArgs.java @@ -0,0 +1,121 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; + + +public final class GetDictionariesArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetDictionariesArgs Empty = new GetDictionariesArgs(); + + /** + * Alphanumeric string identifying the service. + * + */ + @Import(name="serviceId", required=true) + private Output serviceId; + + /** + * @return Alphanumeric string identifying the service. + * + */ + public Output serviceId() { + return this.serviceId; + } + + /** + * Integer identifying a service version. + * + */ + @Import(name="serviceVersion", required=true) + private Output serviceVersion; + + /** + * @return Integer identifying a service version. + * + */ + public Output serviceVersion() { + return this.serviceVersion; + } + + private GetDictionariesArgs() {} + + private GetDictionariesArgs(GetDictionariesArgs $) { + this.serviceId = $.serviceId; + this.serviceVersion = $.serviceVersion; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetDictionariesArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetDictionariesArgs $; + + public Builder() { + $ = new GetDictionariesArgs(); + } + + public Builder(GetDictionariesArgs defaults) { + $ = new GetDictionariesArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param serviceId Alphanumeric string identifying the service. + * + * @return builder + * + */ + public Builder serviceId(Output serviceId) { + $.serviceId = serviceId; + return this; + } + + /** + * @param serviceId Alphanumeric string identifying the service. + * + * @return builder + * + */ + public Builder serviceId(String serviceId) { + return serviceId(Output.of(serviceId)); + } + + /** + * @param serviceVersion Integer identifying a service version. + * + * @return builder + * + */ + public Builder serviceVersion(Output serviceVersion) { + $.serviceVersion = serviceVersion; + return this; + } + + /** + * @param serviceVersion Integer identifying a service version. + * + * @return builder + * + */ + public Builder serviceVersion(Integer serviceVersion) { + return serviceVersion(Output.of(serviceVersion)); + } + + public GetDictionariesArgs build() { + $.serviceId = Objects.requireNonNull($.serviceId, "expected parameter 'serviceId' to be non-null"); + $.serviceVersion = Objects.requireNonNull($.serviceVersion, "expected parameter 'serviceVersion' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesPlainArgs.java b/sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesPlainArgs.java new file mode 100644 index 00000000..52b271b5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/inputs/GetDictionariesPlainArgs.java @@ -0,0 +1,100 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.inputs; + +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; + + +public final class GetDictionariesPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetDictionariesPlainArgs Empty = new GetDictionariesPlainArgs(); + + /** + * Alphanumeric string identifying the service. + * + */ + @Import(name="serviceId", required=true) + private String serviceId; + + /** + * @return Alphanumeric string identifying the service. + * + */ + public String serviceId() { + return this.serviceId; + } + + /** + * Integer identifying a service version. + * + */ + @Import(name="serviceVersion", required=true) + private Integer serviceVersion; + + /** + * @return Integer identifying a service version. + * + */ + public Integer serviceVersion() { + return this.serviceVersion; + } + + private GetDictionariesPlainArgs() {} + + private GetDictionariesPlainArgs(GetDictionariesPlainArgs $) { + this.serviceId = $.serviceId; + this.serviceVersion = $.serviceVersion; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetDictionariesPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetDictionariesPlainArgs $; + + public Builder() { + $ = new GetDictionariesPlainArgs(); + } + + public Builder(GetDictionariesPlainArgs defaults) { + $ = new GetDictionariesPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param serviceId Alphanumeric string identifying the service. + * + * @return builder + * + */ + public Builder serviceId(String serviceId) { + $.serviceId = serviceId; + return this; + } + + /** + * @param serviceVersion Integer identifying a service version. + * + * @return builder + * + */ + public Builder serviceVersion(Integer serviceVersion) { + $.serviceVersion = serviceVersion; + return this; + } + + public GetDictionariesPlainArgs build() { + $.serviceId = Objects.requireNonNull($.serviceId, "expected parameter 'serviceId' to be non-null"); + $.serviceVersion = Objects.requireNonNull($.serviceVersion, "expected parameter 'serviceVersion' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterArgs.java b/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterArgs.java new file mode 100644 index 00000000..e34ab514 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterArgs.java @@ -0,0 +1,536 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.fastly.inputs.ServiceVclRateLimiterResponseArgs; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ServiceVclRateLimiterArgs extends com.pulumi.resources.ResourceArgs { + + public static final ServiceVclRateLimiterArgs Empty = new ServiceVclRateLimiterArgs(); + + /** + * The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + * + */ + @Import(name="action", required=true) + private Output action; + + /** + * @return The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + * + */ + public Output action() { + return this.action; + } + + /** + * Comma-separated list of VCL variables used to generate a counter key to identify a client + * + */ + @Import(name="clientKey", required=true) + private Output clientKey; + + /** + * @return Comma-separated list of VCL variables used to generate a counter key to identify a client + * + */ + public Output clientKey() { + return this.clientKey; + } + + /** + * Revision number of the rate limiting feature implementation + * + */ + @Import(name="featureRevision") + private @Nullable Output featureRevision; + + /** + * @return Revision number of the rate limiting feature implementation + * + */ + public Optional> featureRevision() { + return Optional.ofNullable(this.featureRevision); + } + + /** + * Comma-separated list of HTTP methods to apply rate limiting to + * + */ + @Import(name="httpMethods", required=true) + private Output httpMethods; + + /** + * @return Comma-separated list of HTTP methods to apply rate limiting to + * + */ + public Output httpMethods() { + return this.httpMethods; + } + + /** + * Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + * + */ + @Import(name="loggerType") + private @Nullable Output loggerType; + + /** + * @return Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + * + */ + public Optional> loggerType() { + return Optional.ofNullable(this.loggerType); + } + + /** + * A unique human readable name for the rate limiting rule + * + */ + @Import(name="name", required=true) + private Output name; + + /** + * @return A unique human readable name for the rate limiting rule + * + */ + public Output name() { + return this.name; + } + + /** + * Length of time in minutes that the rate limiter is in effect after the initial violation is detected + * + */ + @Import(name="penaltyBoxDuration", required=true) + private Output penaltyBoxDuration; + + /** + * @return Length of time in minutes that the rate limiter is in effect after the initial violation is detected + * + */ + public Output penaltyBoxDuration() { + return this.penaltyBoxDuration; + } + + /** + * Alphanumeric string identifying the rate limiter + * + */ + @Import(name="ratelimiterId") + private @Nullable Output ratelimiterId; + + /** + * @return Alphanumeric string identifying the rate limiter + * + */ + public Optional> ratelimiterId() { + return Optional.ofNullable(this.ratelimiterId); + } + + /** + * Custom response to be sent when the rate limit is exceeded. Required if action is response + * + */ + @Import(name="response") + private @Nullable Output response; + + /** + * @return Custom response to be sent when the rate limit is exceeded. Required if action is response + * + */ + public Optional> response() { + return Optional.ofNullable(this.response); + } + + /** + * Name of existing response object. Required if action is response_object + * + */ + @Import(name="responseObjectName") + private @Nullable Output responseObjectName; + + /** + * @return Name of existing response object. Required if action is response_object + * + */ + public Optional> responseObjectName() { + return Optional.ofNullable(this.responseObjectName); + } + + /** + * Upper limit of requests per second allowed by the rate limiter + * + */ + @Import(name="rpsLimit", required=true) + private Output rpsLimit; + + /** + * @return Upper limit of requests per second allowed by the rate limiter + * + */ + public Output rpsLimit() { + return this.rpsLimit; + } + + /** + * The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + * + */ + @Import(name="uriDictionaryName") + private @Nullable Output uriDictionaryName; + + /** + * @return The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + * + */ + public Optional> uriDictionaryName() { + return Optional.ofNullable(this.uriDictionaryName); + } + + /** + * Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + * + */ + @Import(name="windowSize", required=true) + private Output windowSize; + + /** + * @return Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + * + */ + public Output windowSize() { + return this.windowSize; + } + + private ServiceVclRateLimiterArgs() {} + + private ServiceVclRateLimiterArgs(ServiceVclRateLimiterArgs $) { + this.action = $.action; + this.clientKey = $.clientKey; + this.featureRevision = $.featureRevision; + this.httpMethods = $.httpMethods; + this.loggerType = $.loggerType; + this.name = $.name; + this.penaltyBoxDuration = $.penaltyBoxDuration; + this.ratelimiterId = $.ratelimiterId; + this.response = $.response; + this.responseObjectName = $.responseObjectName; + this.rpsLimit = $.rpsLimit; + this.uriDictionaryName = $.uriDictionaryName; + this.windowSize = $.windowSize; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ServiceVclRateLimiterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ServiceVclRateLimiterArgs $; + + public Builder() { + $ = new ServiceVclRateLimiterArgs(); + } + + public Builder(ServiceVclRateLimiterArgs defaults) { + $ = new ServiceVclRateLimiterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param action The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + * + * @return builder + * + */ + public Builder action(Output action) { + $.action = action; + return this; + } + + /** + * @param action The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + * + * @return builder + * + */ + public Builder action(String action) { + return action(Output.of(action)); + } + + /** + * @param clientKey Comma-separated list of VCL variables used to generate a counter key to identify a client + * + * @return builder + * + */ + public Builder clientKey(Output clientKey) { + $.clientKey = clientKey; + return this; + } + + /** + * @param clientKey Comma-separated list of VCL variables used to generate a counter key to identify a client + * + * @return builder + * + */ + public Builder clientKey(String clientKey) { + return clientKey(Output.of(clientKey)); + } + + /** + * @param featureRevision Revision number of the rate limiting feature implementation + * + * @return builder + * + */ + public Builder featureRevision(@Nullable Output featureRevision) { + $.featureRevision = featureRevision; + return this; + } + + /** + * @param featureRevision Revision number of the rate limiting feature implementation + * + * @return builder + * + */ + public Builder featureRevision(Integer featureRevision) { + return featureRevision(Output.of(featureRevision)); + } + + /** + * @param httpMethods Comma-separated list of HTTP methods to apply rate limiting to + * + * @return builder + * + */ + public Builder httpMethods(Output httpMethods) { + $.httpMethods = httpMethods; + return this; + } + + /** + * @param httpMethods Comma-separated list of HTTP methods to apply rate limiting to + * + * @return builder + * + */ + public Builder httpMethods(String httpMethods) { + return httpMethods(Output.of(httpMethods)); + } + + /** + * @param loggerType Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + * + * @return builder + * + */ + public Builder loggerType(@Nullable Output loggerType) { + $.loggerType = loggerType; + return this; + } + + /** + * @param loggerType Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + * + * @return builder + * + */ + public Builder loggerType(String loggerType) { + return loggerType(Output.of(loggerType)); + } + + /** + * @param name A unique human readable name for the rate limiting rule + * + * @return builder + * + */ + public Builder name(Output name) { + $.name = name; + return this; + } + + /** + * @param name A unique human readable name for the rate limiting rule + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param penaltyBoxDuration Length of time in minutes that the rate limiter is in effect after the initial violation is detected + * + * @return builder + * + */ + public Builder penaltyBoxDuration(Output penaltyBoxDuration) { + $.penaltyBoxDuration = penaltyBoxDuration; + return this; + } + + /** + * @param penaltyBoxDuration Length of time in minutes that the rate limiter is in effect after the initial violation is detected + * + * @return builder + * + */ + public Builder penaltyBoxDuration(Integer penaltyBoxDuration) { + return penaltyBoxDuration(Output.of(penaltyBoxDuration)); + } + + /** + * @param ratelimiterId Alphanumeric string identifying the rate limiter + * + * @return builder + * + */ + public Builder ratelimiterId(@Nullable Output ratelimiterId) { + $.ratelimiterId = ratelimiterId; + return this; + } + + /** + * @param ratelimiterId Alphanumeric string identifying the rate limiter + * + * @return builder + * + */ + public Builder ratelimiterId(String ratelimiterId) { + return ratelimiterId(Output.of(ratelimiterId)); + } + + /** + * @param response Custom response to be sent when the rate limit is exceeded. Required if action is response + * + * @return builder + * + */ + public Builder response(@Nullable Output response) { + $.response = response; + return this; + } + + /** + * @param response Custom response to be sent when the rate limit is exceeded. Required if action is response + * + * @return builder + * + */ + public Builder response(ServiceVclRateLimiterResponseArgs response) { + return response(Output.of(response)); + } + + /** + * @param responseObjectName Name of existing response object. Required if action is response_object + * + * @return builder + * + */ + public Builder responseObjectName(@Nullable Output responseObjectName) { + $.responseObjectName = responseObjectName; + return this; + } + + /** + * @param responseObjectName Name of existing response object. Required if action is response_object + * + * @return builder + * + */ + public Builder responseObjectName(String responseObjectName) { + return responseObjectName(Output.of(responseObjectName)); + } + + /** + * @param rpsLimit Upper limit of requests per second allowed by the rate limiter + * + * @return builder + * + */ + public Builder rpsLimit(Output rpsLimit) { + $.rpsLimit = rpsLimit; + return this; + } + + /** + * @param rpsLimit Upper limit of requests per second allowed by the rate limiter + * + * @return builder + * + */ + public Builder rpsLimit(Integer rpsLimit) { + return rpsLimit(Output.of(rpsLimit)); + } + + /** + * @param uriDictionaryName The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + * + * @return builder + * + */ + public Builder uriDictionaryName(@Nullable Output uriDictionaryName) { + $.uriDictionaryName = uriDictionaryName; + return this; + } + + /** + * @param uriDictionaryName The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + * + * @return builder + * + */ + public Builder uriDictionaryName(String uriDictionaryName) { + return uriDictionaryName(Output.of(uriDictionaryName)); + } + + /** + * @param windowSize Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + * + * @return builder + * + */ + public Builder windowSize(Output windowSize) { + $.windowSize = windowSize; + return this; + } + + /** + * @param windowSize Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + * + * @return builder + * + */ + public Builder windowSize(Integer windowSize) { + return windowSize(Output.of(windowSize)); + } + + public ServiceVclRateLimiterArgs build() { + $.action = Objects.requireNonNull($.action, "expected parameter 'action' to be non-null"); + $.clientKey = Objects.requireNonNull($.clientKey, "expected parameter 'clientKey' to be non-null"); + $.httpMethods = Objects.requireNonNull($.httpMethods, "expected parameter 'httpMethods' to be non-null"); + $.name = Objects.requireNonNull($.name, "expected parameter 'name' to be non-null"); + $.penaltyBoxDuration = Objects.requireNonNull($.penaltyBoxDuration, "expected parameter 'penaltyBoxDuration' to be non-null"); + $.rpsLimit = Objects.requireNonNull($.rpsLimit, "expected parameter 'rpsLimit' to be non-null"); + $.windowSize = Objects.requireNonNull($.windowSize, "expected parameter 'windowSize' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterResponseArgs.java b/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterResponseArgs.java new file mode 100644 index 00000000..9ba66680 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclRateLimiterResponseArgs.java @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; + + +public final class ServiceVclRateLimiterResponseArgs extends com.pulumi.resources.ResourceArgs { + + public static final ServiceVclRateLimiterResponseArgs Empty = new ServiceVclRateLimiterResponseArgs(); + + @Import(name="content", required=true) + private Output content; + + public Output content() { + return this.content; + } + + @Import(name="contentType", required=true) + private Output contentType; + + public Output contentType() { + return this.contentType; + } + + @Import(name="status", required=true) + private Output status; + + public Output status() { + return this.status; + } + + private ServiceVclRateLimiterResponseArgs() {} + + private ServiceVclRateLimiterResponseArgs(ServiceVclRateLimiterResponseArgs $) { + this.content = $.content; + this.contentType = $.contentType; + this.status = $.status; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ServiceVclRateLimiterResponseArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ServiceVclRateLimiterResponseArgs $; + + public Builder() { + $ = new ServiceVclRateLimiterResponseArgs(); + } + + public Builder(ServiceVclRateLimiterResponseArgs defaults) { + $ = new ServiceVclRateLimiterResponseArgs(Objects.requireNonNull(defaults)); + } + + public Builder content(Output content) { + $.content = content; + return this; + } + + public Builder content(String content) { + return content(Output.of(content)); + } + + public Builder contentType(Output contentType) { + $.contentType = contentType; + return this; + } + + public Builder contentType(String contentType) { + return contentType(Output.of(contentType)); + } + + public Builder status(Output status) { + $.status = status; + return this; + } + + public Builder status(Integer status) { + return status(Output.of(status)); + } + + public ServiceVclRateLimiterResponseArgs build() { + $.content = Objects.requireNonNull($.content, "expected parameter 'content' to be non-null"); + $.contentType = Objects.requireNonNull($.contentType, "expected parameter 'contentType' to be non-null"); + $.status = Objects.requireNonNull($.status, "expected parameter 'status' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclState.java b/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclState.java index ef1e4b9b..3264bf3c 100644 --- a/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclState.java +++ b/sdk/java/src/main/java/com/pulumi/fastly/inputs/ServiceVclState.java @@ -43,6 +43,7 @@ import com.pulumi.fastly.inputs.ServiceVclLoggingSumologicArgs; import com.pulumi.fastly.inputs.ServiceVclLoggingSyslogArgs; import com.pulumi.fastly.inputs.ServiceVclProductEnablementArgs; +import com.pulumi.fastly.inputs.ServiceVclRateLimiterArgs; import com.pulumi.fastly.inputs.ServiceVclRequestSettingArgs; import com.pulumi.fastly.inputs.ServiceVclResponseObjectArgs; import com.pulumi.fastly.inputs.ServiceVclSnippetArgs; @@ -504,6 +505,13 @@ public Optional> productEnablement() { return Optional.ofNullable(this.productEnablement); } + @Import(name="rateLimiters") + private @Nullable Output> rateLimiters; + + public Optional>> rateLimiters() { + return Optional.ofNullable(this.rateLimiters); + } + @Import(name="requestSettings") private @Nullable Output> requestSettings; @@ -655,6 +663,7 @@ private ServiceVclState(ServiceVclState $) { this.loggingSyslogs = $.loggingSyslogs; this.name = $.name; this.productEnablement = $.productEnablement; + this.rateLimiters = $.rateLimiters; this.requestSettings = $.requestSettings; this.responseObjects = $.responseObjects; this.reuse = $.reuse; @@ -1427,6 +1436,19 @@ public Builder productEnablement(ServiceVclProductEnablementArgs productEnableme return productEnablement(Output.of(productEnablement)); } + public Builder rateLimiters(@Nullable Output> rateLimiters) { + $.rateLimiters = rateLimiters; + return this; + } + + public Builder rateLimiters(List rateLimiters) { + return rateLimiters(Output.of(rateLimiters)); + } + + public Builder rateLimiters(ServiceVclRateLimiterArgs... rateLimiters) { + return rateLimiters(List.of(rateLimiters)); + } + public Builder requestSettings(@Nullable Output> requestSettings) { $.requestSettings = requestSettings; return this; diff --git a/sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesDictionary.java b/sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesDictionary.java new file mode 100644 index 00000000..b1ee416a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesDictionary.java @@ -0,0 +1,79 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetDictionariesDictionary { + /** + * @return The ID of this resource. + * + */ + private String id; + private String name; + private Boolean writeOnly; + + private GetDictionariesDictionary() {} + /** + * @return The ID of this resource. + * + */ + public String id() { + return this.id; + } + public String name() { + return this.name; + } + public Boolean writeOnly() { + return this.writeOnly; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetDictionariesDictionary defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String id; + private String name; + private Boolean writeOnly; + public Builder() {} + public Builder(GetDictionariesDictionary defaults) { + Objects.requireNonNull(defaults); + this.id = defaults.id; + this.name = defaults.name; + this.writeOnly = defaults.writeOnly; + } + + @CustomType.Setter + public Builder id(String id) { + this.id = Objects.requireNonNull(id); + return this; + } + @CustomType.Setter + public Builder name(String name) { + this.name = Objects.requireNonNull(name); + return this; + } + @CustomType.Setter + public Builder writeOnly(Boolean writeOnly) { + this.writeOnly = Objects.requireNonNull(writeOnly); + return this; + } + public GetDictionariesDictionary build() { + final var o = new GetDictionariesDictionary(); + o.id = id; + o.name = name; + o.writeOnly = writeOnly; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesResult.java b/sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesResult.java new file mode 100644 index 00000000..e4241fb8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/outputs/GetDictionariesResult.java @@ -0,0 +1,120 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.fastly.outputs.GetDictionariesDictionary; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetDictionariesResult { + /** + * @return List of all dictionaries for the version of the service. + * + */ + private List dictionaries; + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + /** + * @return Alphanumeric string identifying the service. + * + */ + private String serviceId; + /** + * @return Integer identifying a service version. + * + */ + private Integer serviceVersion; + + private GetDictionariesResult() {} + /** + * @return List of all dictionaries for the version of the service. + * + */ + public List dictionaries() { + return this.dictionaries; + } + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + /** + * @return Alphanumeric string identifying the service. + * + */ + public String serviceId() { + return this.serviceId; + } + /** + * @return Integer identifying a service version. + * + */ + public Integer serviceVersion() { + return this.serviceVersion; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetDictionariesResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List dictionaries; + private String id; + private String serviceId; + private Integer serviceVersion; + public Builder() {} + public Builder(GetDictionariesResult defaults) { + Objects.requireNonNull(defaults); + this.dictionaries = defaults.dictionaries; + this.id = defaults.id; + this.serviceId = defaults.serviceId; + this.serviceVersion = defaults.serviceVersion; + } + + @CustomType.Setter + public Builder dictionaries(List dictionaries) { + this.dictionaries = Objects.requireNonNull(dictionaries); + return this; + } + public Builder dictionaries(GetDictionariesDictionary... dictionaries) { + return dictionaries(List.of(dictionaries)); + } + @CustomType.Setter + public Builder id(String id) { + this.id = Objects.requireNonNull(id); + return this; + } + @CustomType.Setter + public Builder serviceId(String serviceId) { + this.serviceId = Objects.requireNonNull(serviceId); + return this; + } + @CustomType.Setter + public Builder serviceVersion(Integer serviceVersion) { + this.serviceVersion = Objects.requireNonNull(serviceVersion); + return this; + } + public GetDictionariesResult build() { + final var o = new GetDictionariesResult(); + o.dictionaries = dictionaries; + o.id = id; + o.serviceId = serviceId; + o.serviceVersion = serviceVersion; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiter.java b/sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiter.java new file mode 100644 index 00000000..9cff17b7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiter.java @@ -0,0 +1,298 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.fastly.outputs.ServiceVclRateLimiterResponse; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ServiceVclRateLimiter { + /** + * @return The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + * + */ + private String action; + /** + * @return Comma-separated list of VCL variables used to generate a counter key to identify a client + * + */ + private String clientKey; + /** + * @return Revision number of the rate limiting feature implementation + * + */ + private @Nullable Integer featureRevision; + /** + * @return Comma-separated list of HTTP methods to apply rate limiting to + * + */ + private String httpMethods; + /** + * @return Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + * + */ + private @Nullable String loggerType; + /** + * @return A unique human readable name for the rate limiting rule + * + */ + private String name; + /** + * @return Length of time in minutes that the rate limiter is in effect after the initial violation is detected + * + */ + private Integer penaltyBoxDuration; + /** + * @return Alphanumeric string identifying the rate limiter + * + */ + private @Nullable String ratelimiterId; + /** + * @return Custom response to be sent when the rate limit is exceeded. Required if action is response + * + */ + private @Nullable ServiceVclRateLimiterResponse response; + /** + * @return Name of existing response object. Required if action is response_object + * + */ + private @Nullable String responseObjectName; + /** + * @return Upper limit of requests per second allowed by the rate limiter + * + */ + private Integer rpsLimit; + /** + * @return The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + * + */ + private @Nullable String uriDictionaryName; + /** + * @return Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + * + */ + private Integer windowSize; + + private ServiceVclRateLimiter() {} + /** + * @return The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + * + */ + public String action() { + return this.action; + } + /** + * @return Comma-separated list of VCL variables used to generate a counter key to identify a client + * + */ + public String clientKey() { + return this.clientKey; + } + /** + * @return Revision number of the rate limiting feature implementation + * + */ + public Optional featureRevision() { + return Optional.ofNullable(this.featureRevision); + } + /** + * @return Comma-separated list of HTTP methods to apply rate limiting to + * + */ + public String httpMethods() { + return this.httpMethods; + } + /** + * @return Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + * + */ + public Optional loggerType() { + return Optional.ofNullable(this.loggerType); + } + /** + * @return A unique human readable name for the rate limiting rule + * + */ + public String name() { + return this.name; + } + /** + * @return Length of time in minutes that the rate limiter is in effect after the initial violation is detected + * + */ + public Integer penaltyBoxDuration() { + return this.penaltyBoxDuration; + } + /** + * @return Alphanumeric string identifying the rate limiter + * + */ + public Optional ratelimiterId() { + return Optional.ofNullable(this.ratelimiterId); + } + /** + * @return Custom response to be sent when the rate limit is exceeded. Required if action is response + * + */ + public Optional response() { + return Optional.ofNullable(this.response); + } + /** + * @return Name of existing response object. Required if action is response_object + * + */ + public Optional responseObjectName() { + return Optional.ofNullable(this.responseObjectName); + } + /** + * @return Upper limit of requests per second allowed by the rate limiter + * + */ + public Integer rpsLimit() { + return this.rpsLimit; + } + /** + * @return The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + * + */ + public Optional uriDictionaryName() { + return Optional.ofNullable(this.uriDictionaryName); + } + /** + * @return Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + * + */ + public Integer windowSize() { + return this.windowSize; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ServiceVclRateLimiter defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String action; + private String clientKey; + private @Nullable Integer featureRevision; + private String httpMethods; + private @Nullable String loggerType; + private String name; + private Integer penaltyBoxDuration; + private @Nullable String ratelimiterId; + private @Nullable ServiceVclRateLimiterResponse response; + private @Nullable String responseObjectName; + private Integer rpsLimit; + private @Nullable String uriDictionaryName; + private Integer windowSize; + public Builder() {} + public Builder(ServiceVclRateLimiter defaults) { + Objects.requireNonNull(defaults); + this.action = defaults.action; + this.clientKey = defaults.clientKey; + this.featureRevision = defaults.featureRevision; + this.httpMethods = defaults.httpMethods; + this.loggerType = defaults.loggerType; + this.name = defaults.name; + this.penaltyBoxDuration = defaults.penaltyBoxDuration; + this.ratelimiterId = defaults.ratelimiterId; + this.response = defaults.response; + this.responseObjectName = defaults.responseObjectName; + this.rpsLimit = defaults.rpsLimit; + this.uriDictionaryName = defaults.uriDictionaryName; + this.windowSize = defaults.windowSize; + } + + @CustomType.Setter + public Builder action(String action) { + this.action = Objects.requireNonNull(action); + return this; + } + @CustomType.Setter + public Builder clientKey(String clientKey) { + this.clientKey = Objects.requireNonNull(clientKey); + return this; + } + @CustomType.Setter + public Builder featureRevision(@Nullable Integer featureRevision) { + this.featureRevision = featureRevision; + return this; + } + @CustomType.Setter + public Builder httpMethods(String httpMethods) { + this.httpMethods = Objects.requireNonNull(httpMethods); + return this; + } + @CustomType.Setter + public Builder loggerType(@Nullable String loggerType) { + this.loggerType = loggerType; + return this; + } + @CustomType.Setter + public Builder name(String name) { + this.name = Objects.requireNonNull(name); + return this; + } + @CustomType.Setter + public Builder penaltyBoxDuration(Integer penaltyBoxDuration) { + this.penaltyBoxDuration = Objects.requireNonNull(penaltyBoxDuration); + return this; + } + @CustomType.Setter + public Builder ratelimiterId(@Nullable String ratelimiterId) { + this.ratelimiterId = ratelimiterId; + return this; + } + @CustomType.Setter + public Builder response(@Nullable ServiceVclRateLimiterResponse response) { + this.response = response; + return this; + } + @CustomType.Setter + public Builder responseObjectName(@Nullable String responseObjectName) { + this.responseObjectName = responseObjectName; + return this; + } + @CustomType.Setter + public Builder rpsLimit(Integer rpsLimit) { + this.rpsLimit = Objects.requireNonNull(rpsLimit); + return this; + } + @CustomType.Setter + public Builder uriDictionaryName(@Nullable String uriDictionaryName) { + this.uriDictionaryName = uriDictionaryName; + return this; + } + @CustomType.Setter + public Builder windowSize(Integer windowSize) { + this.windowSize = Objects.requireNonNull(windowSize); + return this; + } + public ServiceVclRateLimiter build() { + final var o = new ServiceVclRateLimiter(); + o.action = action; + o.clientKey = clientKey; + o.featureRevision = featureRevision; + o.httpMethods = httpMethods; + o.loggerType = loggerType; + o.name = name; + o.penaltyBoxDuration = penaltyBoxDuration; + o.ratelimiterId = ratelimiterId; + o.response = response; + o.responseObjectName = responseObjectName; + o.rpsLimit = rpsLimit; + o.uriDictionaryName = uriDictionaryName; + o.windowSize = windowSize; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiterResponse.java b/sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiterResponse.java new file mode 100644 index 00000000..98641932 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/fastly/outputs/ServiceVclRateLimiterResponse.java @@ -0,0 +1,71 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.fastly.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class ServiceVclRateLimiterResponse { + private String content; + private String contentType; + private Integer status; + + private ServiceVclRateLimiterResponse() {} + public String content() { + return this.content; + } + public String contentType() { + return this.contentType; + } + public Integer status() { + return this.status; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ServiceVclRateLimiterResponse defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String content; + private String contentType; + private Integer status; + public Builder() {} + public Builder(ServiceVclRateLimiterResponse defaults) { + Objects.requireNonNull(defaults); + this.content = defaults.content; + this.contentType = defaults.contentType; + this.status = defaults.status; + } + + @CustomType.Setter + public Builder content(String content) { + this.content = Objects.requireNonNull(content); + return this; + } + @CustomType.Setter + public Builder contentType(String contentType) { + this.contentType = Objects.requireNonNull(contentType); + return this; + } + @CustomType.Setter + public Builder status(Integer status) { + this.status = Objects.requireNonNull(status); + return this; + } + public ServiceVclRateLimiterResponse build() { + final var o = new ServiceVclRateLimiterResponse(); + o.content = content; + o.contentType = contentType; + o.status = status; + return o; + } + } +} diff --git a/sdk/nodejs/getDictionaries.ts b/sdk/nodejs/getDictionaries.ts new file mode 100644 index 00000000..65fe6077 --- /dev/null +++ b/sdk/nodejs/getDictionaries.ts @@ -0,0 +1,139 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as fastly from "@pulumi/fastly"; + * + * const exampleServiceVcl = new fastly.ServiceVcl("exampleServiceVcl", { + * domains: [{ + * name: "example.com", + * }], + * dictionaries: [ + * { + * name: "example_1", + * }, + * { + * name: "example_2", + * }, + * { + * name: "example_3", + * }, + * ], + * forceDestroy: true, + * }); + * const exampleDictionaries = fastly.getDictionariesOutput({ + * serviceId: exampleServiceVcl.id, + * serviceVersion: exampleServiceVcl.activeVersion, + * }); + * export const serviceDictionaries = exampleDictionaries; + * ``` + * + * [1]: https://developer.fastly.com/reference/api/dictionaries/ + */ +export function getDictionaries(args: GetDictionariesArgs, opts?: pulumi.InvokeOptions): Promise { + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("fastly:index/getDictionaries:getDictionaries", { + "serviceId": args.serviceId, + "serviceVersion": args.serviceVersion, + }, opts); +} + +/** + * A collection of arguments for invoking getDictionaries. + */ +export interface GetDictionariesArgs { + /** + * Alphanumeric string identifying the service. + */ + serviceId: string; + /** + * Integer identifying a service version. + */ + serviceVersion: number; +} + +/** + * A collection of values returned by getDictionaries. + */ +export interface GetDictionariesResult { + /** + * List of all dictionaries for the version of the service. + */ + readonly dictionaries: outputs.GetDictionariesDictionary[]; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + /** + * Alphanumeric string identifying the service. + */ + readonly serviceId: string; + /** + * Integer identifying a service version. + */ + readonly serviceVersion: number; +} +/** + * Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as fastly from "@pulumi/fastly"; + * + * const exampleServiceVcl = new fastly.ServiceVcl("exampleServiceVcl", { + * domains: [{ + * name: "example.com", + * }], + * dictionaries: [ + * { + * name: "example_1", + * }, + * { + * name: "example_2", + * }, + * { + * name: "example_3", + * }, + * ], + * forceDestroy: true, + * }); + * const exampleDictionaries = fastly.getDictionariesOutput({ + * serviceId: exampleServiceVcl.id, + * serviceVersion: exampleServiceVcl.activeVersion, + * }); + * export const serviceDictionaries = exampleDictionaries; + * ``` + * + * [1]: https://developer.fastly.com/reference/api/dictionaries/ + */ +export function getDictionariesOutput(args: GetDictionariesOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getDictionaries(a, opts)) +} + +/** + * A collection of arguments for invoking getDictionaries. + */ +export interface GetDictionariesOutputArgs { + /** + * Alphanumeric string identifying the service. + */ + serviceId: pulumi.Input; + /** + * Integer identifying a service version. + */ + serviceVersion: pulumi.Input; +} diff --git a/sdk/nodejs/getTlsConfigurationIds.ts b/sdk/nodejs/getTlsConfigurationIds.ts index 08af84c1..15ae4181 100644 --- a/sdk/nodejs/getTlsConfigurationIds.ts +++ b/sdk/nodejs/getTlsConfigurationIds.ts @@ -14,7 +14,7 @@ import * as utilities from "./utilities"; * import * as fastly from "@pulumi/fastly"; * * const exampleTlsConfigurationIds = fastly.getTlsConfigurationIds({}); - * const exampleTlsActivation = new fastly.TlsActivation("exampleTlsActivation", {configurationId: data.fastly_tls_configuration.example.ids[0]}); + * const exampleTlsActivation = new fastly.TlsActivation("exampleTlsActivation", {configurationId: exampleTlsConfigurationIds.then(exampleTlsConfigurationIds => exampleTlsConfigurationIds.ids?.[0])}); * // ... * ``` */ diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index 711bd959..0f63452d 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -9,6 +9,11 @@ export { GetDatacentersResult } from "./getDatacenters"; export const getDatacenters: typeof import("./getDatacenters").getDatacenters = null as any; utilities.lazyLoad(exports, ["getDatacenters"], () => require("./getDatacenters")); +export { GetDictionariesArgs, GetDictionariesResult, GetDictionariesOutputArgs } from "./getDictionaries"; +export const getDictionaries: typeof import("./getDictionaries").getDictionaries = null as any; +export const getDictionariesOutput: typeof import("./getDictionaries").getDictionariesOutput = null as any; +utilities.lazyLoad(exports, ["getDictionaries","getDictionariesOutput"], () => require("./getDictionaries")); + export { GetFastlyIpRangesResult } from "./getFastlyIpRanges"; export const getFastlyIpRanges: typeof import("./getFastlyIpRanges").getFastlyIpRanges = null as any; utilities.lazyLoad(exports, ["getFastlyIpRanges"], () => require("./getFastlyIpRanges")); diff --git a/sdk/nodejs/serviceVcl.ts b/sdk/nodejs/serviceVcl.ts index da8589b7..f4bcac6e 100644 --- a/sdk/nodejs/serviceVcl.ts +++ b/sdk/nodejs/serviceVcl.ts @@ -144,6 +144,7 @@ export class ServiceVcl extends pulumi.CustomResource { */ public readonly name!: pulumi.Output; public readonly productEnablement!: pulumi.Output; + public readonly rateLimiters!: pulumi.Output; public readonly requestSettings!: pulumi.Output; public readonly responseObjects!: pulumi.Output; /** @@ -230,6 +231,7 @@ export class ServiceVcl extends pulumi.CustomResource { resourceInputs["loggingSyslogs"] = state ? state.loggingSyslogs : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["productEnablement"] = state ? state.productEnablement : undefined; + resourceInputs["rateLimiters"] = state ? state.rateLimiters : undefined; resourceInputs["requestSettings"] = state ? state.requestSettings : undefined; resourceInputs["responseObjects"] = state ? state.responseObjects : undefined; resourceInputs["reuse"] = state ? state.reuse : undefined; @@ -289,6 +291,7 @@ export class ServiceVcl extends pulumi.CustomResource { resourceInputs["loggingSyslogs"] = args ? args.loggingSyslogs : undefined; resourceInputs["name"] = args ? args.name : undefined; resourceInputs["productEnablement"] = args ? args.productEnablement : undefined; + resourceInputs["rateLimiters"] = args ? args.rateLimiters : undefined; resourceInputs["requestSettings"] = args ? args.requestSettings : undefined; resourceInputs["responseObjects"] = args ? args.responseObjects : undefined; resourceInputs["reuse"] = args ? args.reuse : undefined; @@ -399,6 +402,7 @@ export interface ServiceVclState { */ name?: pulumi.Input; productEnablement?: pulumi.Input; + rateLimiters?: pulumi.Input[]>; requestSettings?: pulumi.Input[]>; responseObjects?: pulumi.Input[]>; /** @@ -497,6 +501,7 @@ export interface ServiceVclArgs { */ name?: pulumi.Input; productEnablement?: pulumi.Input; + rateLimiters?: pulumi.Input[]>; requestSettings?: pulumi.Input[]>; responseObjects?: pulumi.Input[]>; /** diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index 4e19de29..7cd54551 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -16,6 +16,7 @@ "config/index.ts", "config/vars.ts", "getDatacenters.ts", + "getDictionaries.ts", "getFastlyIpRanges.ts", "getServices.ts", "getTlsActivation.ts", diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index 92df6436..31a71252 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -2822,6 +2822,67 @@ export interface ServiceVclProductEnablement { websockets?: pulumi.Input; } +export interface ServiceVclRateLimiter { + /** + * The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + */ + action: pulumi.Input; + /** + * Comma-separated list of VCL variables used to generate a counter key to identify a client + */ + clientKey: pulumi.Input; + /** + * Revision number of the rate limiting feature implementation + */ + featureRevision?: pulumi.Input; + /** + * Comma-separated list of HTTP methods to apply rate limiting to + */ + httpMethods: pulumi.Input; + /** + * Name of the type of logging endpoint to be used when action is logOnly (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + */ + loggerType?: pulumi.Input; + /** + * A unique human readable name for the rate limiting rule + */ + name: pulumi.Input; + /** + * Length of time in minutes that the rate limiter is in effect after the initial violation is detected + */ + penaltyBoxDuration: pulumi.Input; + /** + * Alphanumeric string identifying the rate limiter + */ + ratelimiterId?: pulumi.Input; + /** + * Custom response to be sent when the rate limit is exceeded. Required if action is response + */ + response?: pulumi.Input; + /** + * Name of existing response object. Required if action is response_object + */ + responseObjectName?: pulumi.Input; + /** + * Upper limit of requests per second allowed by the rate limiter + */ + rpsLimit: pulumi.Input; + /** + * The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + */ + uriDictionaryName?: pulumi.Input; + /** + * Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + */ + windowSize: pulumi.Input; +} + +export interface ServiceVclRateLimiterResponse { + content: pulumi.Input; + contentType: pulumi.Input; + status: pulumi.Input; +} + export interface ServiceVclRequestSetting { /** * Allows you to terminate request handling and immediately perform an action. When set it can be `lookup` or `pass` (Ignore the cache completely) diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 409382ab..689421a1 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -12,6 +12,15 @@ export interface GetDatacentersPop { shield: string; } +export interface GetDictionariesDictionary { + /** + * The ID of this resource. + */ + id: string; + name: string; + writeOnly: boolean; +} + export interface GetServicesDetail { comment: string; createdAt: string; @@ -2864,6 +2873,67 @@ export interface ServiceVclProductEnablement { websockets?: boolean; } +export interface ServiceVclRateLimiter { + /** + * The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + */ + action: string; + /** + * Comma-separated list of VCL variables used to generate a counter key to identify a client + */ + clientKey: string; + /** + * Revision number of the rate limiting feature implementation + */ + featureRevision?: number; + /** + * Comma-separated list of HTTP methods to apply rate limiting to + */ + httpMethods: string; + /** + * Name of the type of logging endpoint to be used when action is logOnly (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + */ + loggerType?: string; + /** + * A unique human readable name for the rate limiting rule + */ + name: string; + /** + * Length of time in minutes that the rate limiter is in effect after the initial violation is detected + */ + penaltyBoxDuration: number; + /** + * Alphanumeric string identifying the rate limiter + */ + ratelimiterId: string; + /** + * Custom response to be sent when the rate limit is exceeded. Required if action is response + */ + response?: outputs.ServiceVclRateLimiterResponse; + /** + * Name of existing response object. Required if action is response_object + */ + responseObjectName?: string; + /** + * Upper limit of requests per second allowed by the rate limiter + */ + rpsLimit: number; + /** + * The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + */ + uriDictionaryName?: string; + /** + * Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + */ + windowSize: number; +} + +export interface ServiceVclRateLimiterResponse { + content: string; + contentType: string; + status: number; +} + export interface ServiceVclRequestSetting { /** * Allows you to terminate request handling and immediately perform an action. When set it can be `lookup` or `pass` (Ignore the cache completely) diff --git a/sdk/python/pulumi_fastly/__init__.py b/sdk/python/pulumi_fastly/__init__.py index 3f6ccb4a..7655e923 100644 --- a/sdk/python/pulumi_fastly/__init__.py +++ b/sdk/python/pulumi_fastly/__init__.py @@ -6,6 +6,7 @@ import typing # Export this package's modules as members: from .get_datacenters import * +from .get_dictionaries import * from .get_fastly_ip_ranges import * from .get_services import * from .get_tls_activation import * diff --git a/sdk/python/pulumi_fastly/_inputs.py b/sdk/python/pulumi_fastly/_inputs.py index c929055b..0c7caf3d 100644 --- a/sdk/python/pulumi_fastly/_inputs.py +++ b/sdk/python/pulumi_fastly/_inputs.py @@ -80,6 +80,8 @@ 'ServiceVclLoggingSumologicArgs', 'ServiceVclLoggingSyslogArgs', 'ServiceVclProductEnablementArgs', + 'ServiceVclRateLimiterArgs', + 'ServiceVclRateLimiterResponseArgs', 'ServiceVclRequestSettingArgs', 'ServiceVclResponseObjectArgs', 'ServiceVclSnippetArgs', @@ -10845,6 +10847,252 @@ def websockets(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "websockets", value) +@pulumi.input_type +class ServiceVclRateLimiterArgs: + def __init__(__self__, *, + action: pulumi.Input[str], + client_key: pulumi.Input[str], + http_methods: pulumi.Input[str], + name: pulumi.Input[str], + penalty_box_duration: pulumi.Input[int], + rps_limit: pulumi.Input[int], + window_size: pulumi.Input[int], + feature_revision: Optional[pulumi.Input[int]] = None, + logger_type: Optional[pulumi.Input[str]] = None, + ratelimiter_id: Optional[pulumi.Input[str]] = None, + response: Optional[pulumi.Input['ServiceVclRateLimiterResponseArgs']] = None, + response_object_name: Optional[pulumi.Input[str]] = None, + uri_dictionary_name: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] action: The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + :param pulumi.Input[str] client_key: Comma-separated list of VCL variables used to generate a counter key to identify a client + :param pulumi.Input[str] http_methods: Comma-separated list of HTTP methods to apply rate limiting to + :param pulumi.Input[str] name: A unique human readable name for the rate limiting rule + :param pulumi.Input[int] penalty_box_duration: Length of time in minutes that the rate limiter is in effect after the initial violation is detected + :param pulumi.Input[int] rps_limit: Upper limit of requests per second allowed by the rate limiter + :param pulumi.Input[int] window_size: Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + :param pulumi.Input[int] feature_revision: Revision number of the rate limiting feature implementation + :param pulumi.Input[str] logger_type: Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + :param pulumi.Input[str] ratelimiter_id: Alphanumeric string identifying the rate limiter + :param pulumi.Input['ServiceVclRateLimiterResponseArgs'] response: Custom response to be sent when the rate limit is exceeded. Required if action is response + :param pulumi.Input[str] response_object_name: Name of existing response object. Required if action is response_object + :param pulumi.Input[str] uri_dictionary_name: The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + """ + pulumi.set(__self__, "action", action) + pulumi.set(__self__, "client_key", client_key) + pulumi.set(__self__, "http_methods", http_methods) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "penalty_box_duration", penalty_box_duration) + pulumi.set(__self__, "rps_limit", rps_limit) + pulumi.set(__self__, "window_size", window_size) + if feature_revision is not None: + pulumi.set(__self__, "feature_revision", feature_revision) + if logger_type is not None: + pulumi.set(__self__, "logger_type", logger_type) + if ratelimiter_id is not None: + pulumi.set(__self__, "ratelimiter_id", ratelimiter_id) + if response is not None: + pulumi.set(__self__, "response", response) + if response_object_name is not None: + pulumi.set(__self__, "response_object_name", response_object_name) + if uri_dictionary_name is not None: + pulumi.set(__self__, "uri_dictionary_name", uri_dictionary_name) + + @property + @pulumi.getter + def action(self) -> pulumi.Input[str]: + """ + The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + """ + return pulumi.get(self, "action") + + @action.setter + def action(self, value: pulumi.Input[str]): + pulumi.set(self, "action", value) + + @property + @pulumi.getter(name="clientKey") + def client_key(self) -> pulumi.Input[str]: + """ + Comma-separated list of VCL variables used to generate a counter key to identify a client + """ + return pulumi.get(self, "client_key") + + @client_key.setter + def client_key(self, value: pulumi.Input[str]): + pulumi.set(self, "client_key", value) + + @property + @pulumi.getter(name="httpMethods") + def http_methods(self) -> pulumi.Input[str]: + """ + Comma-separated list of HTTP methods to apply rate limiting to + """ + return pulumi.get(self, "http_methods") + + @http_methods.setter + def http_methods(self, value: pulumi.Input[str]): + pulumi.set(self, "http_methods", value) + + @property + @pulumi.getter + def name(self) -> pulumi.Input[str]: + """ + A unique human readable name for the rate limiting rule + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: pulumi.Input[str]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="penaltyBoxDuration") + def penalty_box_duration(self) -> pulumi.Input[int]: + """ + Length of time in minutes that the rate limiter is in effect after the initial violation is detected + """ + return pulumi.get(self, "penalty_box_duration") + + @penalty_box_duration.setter + def penalty_box_duration(self, value: pulumi.Input[int]): + pulumi.set(self, "penalty_box_duration", value) + + @property + @pulumi.getter(name="rpsLimit") + def rps_limit(self) -> pulumi.Input[int]: + """ + Upper limit of requests per second allowed by the rate limiter + """ + return pulumi.get(self, "rps_limit") + + @rps_limit.setter + def rps_limit(self, value: pulumi.Input[int]): + pulumi.set(self, "rps_limit", value) + + @property + @pulumi.getter(name="windowSize") + def window_size(self) -> pulumi.Input[int]: + """ + Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + """ + return pulumi.get(self, "window_size") + + @window_size.setter + def window_size(self, value: pulumi.Input[int]): + pulumi.set(self, "window_size", value) + + @property + @pulumi.getter(name="featureRevision") + def feature_revision(self) -> Optional[pulumi.Input[int]]: + """ + Revision number of the rate limiting feature implementation + """ + return pulumi.get(self, "feature_revision") + + @feature_revision.setter + def feature_revision(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "feature_revision", value) + + @property + @pulumi.getter(name="loggerType") + def logger_type(self) -> Optional[pulumi.Input[str]]: + """ + Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + """ + return pulumi.get(self, "logger_type") + + @logger_type.setter + def logger_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "logger_type", value) + + @property + @pulumi.getter(name="ratelimiterId") + def ratelimiter_id(self) -> Optional[pulumi.Input[str]]: + """ + Alphanumeric string identifying the rate limiter + """ + return pulumi.get(self, "ratelimiter_id") + + @ratelimiter_id.setter + def ratelimiter_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "ratelimiter_id", value) + + @property + @pulumi.getter + def response(self) -> Optional[pulumi.Input['ServiceVclRateLimiterResponseArgs']]: + """ + Custom response to be sent when the rate limit is exceeded. Required if action is response + """ + return pulumi.get(self, "response") + + @response.setter + def response(self, value: Optional[pulumi.Input['ServiceVclRateLimiterResponseArgs']]): + pulumi.set(self, "response", value) + + @property + @pulumi.getter(name="responseObjectName") + def response_object_name(self) -> Optional[pulumi.Input[str]]: + """ + Name of existing response object. Required if action is response_object + """ + return pulumi.get(self, "response_object_name") + + @response_object_name.setter + def response_object_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "response_object_name", value) + + @property + @pulumi.getter(name="uriDictionaryName") + def uri_dictionary_name(self) -> Optional[pulumi.Input[str]]: + """ + The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + """ + return pulumi.get(self, "uri_dictionary_name") + + @uri_dictionary_name.setter + def uri_dictionary_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uri_dictionary_name", value) + + +@pulumi.input_type +class ServiceVclRateLimiterResponseArgs: + def __init__(__self__, *, + content: pulumi.Input[str], + content_type: pulumi.Input[str], + status: pulumi.Input[int]): + pulumi.set(__self__, "content", content) + pulumi.set(__self__, "content_type", content_type) + pulumi.set(__self__, "status", status) + + @property + @pulumi.getter + def content(self) -> pulumi.Input[str]: + return pulumi.get(self, "content") + + @content.setter + def content(self, value: pulumi.Input[str]): + pulumi.set(self, "content", value) + + @property + @pulumi.getter(name="contentType") + def content_type(self) -> pulumi.Input[str]: + return pulumi.get(self, "content_type") + + @content_type.setter + def content_type(self, value: pulumi.Input[str]): + pulumi.set(self, "content_type", value) + + @property + @pulumi.getter + def status(self) -> pulumi.Input[int]: + return pulumi.get(self, "status") + + @status.setter + def status(self, value: pulumi.Input[int]): + pulumi.set(self, "status", value) + + @pulumi.input_type class ServiceVclRequestSettingArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_fastly/get_dictionaries.py b/sdk/python/pulumi_fastly/get_dictionaries.py new file mode 100644 index 00000000..8a7084d8 --- /dev/null +++ b/sdk/python/pulumi_fastly/get_dictionaries.py @@ -0,0 +1,176 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities +from . import outputs + +__all__ = [ + 'GetDictionariesResult', + 'AwaitableGetDictionariesResult', + 'get_dictionaries', + 'get_dictionaries_output', +] + +@pulumi.output_type +class GetDictionariesResult: + """ + A collection of values returned by getDictionaries. + """ + def __init__(__self__, dictionaries=None, id=None, service_id=None, service_version=None): + if dictionaries and not isinstance(dictionaries, list): + raise TypeError("Expected argument 'dictionaries' to be a list") + pulumi.set(__self__, "dictionaries", dictionaries) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if service_id and not isinstance(service_id, str): + raise TypeError("Expected argument 'service_id' to be a str") + pulumi.set(__self__, "service_id", service_id) + if service_version and not isinstance(service_version, int): + raise TypeError("Expected argument 'service_version' to be a int") + pulumi.set(__self__, "service_version", service_version) + + @property + @pulumi.getter + def dictionaries(self) -> Sequence['outputs.GetDictionariesDictionaryResult']: + """ + List of all dictionaries for the version of the service. + """ + return pulumi.get(self, "dictionaries") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="serviceId") + def service_id(self) -> str: + """ + Alphanumeric string identifying the service. + """ + return pulumi.get(self, "service_id") + + @property + @pulumi.getter(name="serviceVersion") + def service_version(self) -> int: + """ + Integer identifying a service version. + """ + return pulumi.get(self, "service_version") + + +class AwaitableGetDictionariesResult(GetDictionariesResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetDictionariesResult( + dictionaries=self.dictionaries, + id=self.id, + service_id=self.service_id, + service_version=self.service_version) + + +def get_dictionaries(service_id: Optional[str] = None, + service_version: Optional[int] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetDictionariesResult: + """ + Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + + ## Example Usage + + ```python + import pulumi + import pulumi_fastly as fastly + + example_service_vcl = fastly.ServiceVcl("exampleServiceVcl", + domains=[fastly.ServiceVclDomainArgs( + name="example.com", + )], + dictionaries=[ + fastly.ServiceVclDictionaryArgs( + name="example_1", + ), + fastly.ServiceVclDictionaryArgs( + name="example_2", + ), + fastly.ServiceVclDictionaryArgs( + name="example_3", + ), + ], + force_destroy=True) + example_dictionaries = fastly.get_dictionaries_output(service_id=example_service_vcl.id, + service_version=example_service_vcl.active_version) + pulumi.export("serviceDictionaries", example_dictionaries) + ``` + + [1]: https://developer.fastly.com/reference/api/dictionaries/ + + + :param str service_id: Alphanumeric string identifying the service. + :param int service_version: Integer identifying a service version. + """ + __args__ = dict() + __args__['serviceId'] = service_id + __args__['serviceVersion'] = service_version + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('fastly:index/getDictionaries:getDictionaries', __args__, opts=opts, typ=GetDictionariesResult).value + + return AwaitableGetDictionariesResult( + dictionaries=__ret__.dictionaries, + id=__ret__.id, + service_id=__ret__.service_id, + service_version=__ret__.service_version) + + +@_utilities.lift_output_func(get_dictionaries) +def get_dictionaries_output(service_id: Optional[pulumi.Input[str]] = None, + service_version: Optional[pulumi.Input[int]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetDictionariesResult]: + """ + Use this data source to get a list of [Fastly dictionaries](https://developer.fastly.com/reference/api/dictionaries/) for the specified service/version. + + ## Example Usage + + ```python + import pulumi + import pulumi_fastly as fastly + + example_service_vcl = fastly.ServiceVcl("exampleServiceVcl", + domains=[fastly.ServiceVclDomainArgs( + name="example.com", + )], + dictionaries=[ + fastly.ServiceVclDictionaryArgs( + name="example_1", + ), + fastly.ServiceVclDictionaryArgs( + name="example_2", + ), + fastly.ServiceVclDictionaryArgs( + name="example_3", + ), + ], + force_destroy=True) + example_dictionaries = fastly.get_dictionaries_output(service_id=example_service_vcl.id, + service_version=example_service_vcl.active_version) + pulumi.export("serviceDictionaries", example_dictionaries) + ``` + + [1]: https://developer.fastly.com/reference/api/dictionaries/ + + + :param str service_id: Alphanumeric string identifying the service. + :param int service_version: Integer identifying a service version. + """ + ... diff --git a/sdk/python/pulumi_fastly/get_tls_configuration_ids.py b/sdk/python/pulumi_fastly/get_tls_configuration_ids.py index 0ad52ef3..072937ca 100644 --- a/sdk/python/pulumi_fastly/get_tls_configuration_ids.py +++ b/sdk/python/pulumi_fastly/get_tls_configuration_ids.py @@ -66,7 +66,7 @@ def get_tls_configuration_ids(opts: Optional[pulumi.InvokeOptions] = None) -> Aw import pulumi_fastly as fastly example_tls_configuration_ids = fastly.get_tls_configuration_ids() - example_tls_activation = fastly.TlsActivation("exampleTlsActivation", configuration_id=data["fastly_tls_configuration"]["example"]["ids"]) + example_tls_activation = fastly.TlsActivation("exampleTlsActivation", configuration_id=example_tls_configuration_ids.ids[0]) # ... ``` """ diff --git a/sdk/python/pulumi_fastly/outputs.py b/sdk/python/pulumi_fastly/outputs.py index 5653382b..ba7b2df0 100644 --- a/sdk/python/pulumi_fastly/outputs.py +++ b/sdk/python/pulumi_fastly/outputs.py @@ -8,6 +8,7 @@ import pulumi.runtime from typing import Any, Mapping, Optional, Sequence, Union, overload from . import _utilities +from . import outputs __all__ = [ 'ServiceACLEntriesEntry', @@ -80,6 +81,8 @@ 'ServiceVclLoggingSumologic', 'ServiceVclLoggingSyslog', 'ServiceVclProductEnablement', + 'ServiceVclRateLimiter', + 'ServiceVclRateLimiterResponse', 'ServiceVclRequestSetting', 'ServiceVclResponseObject', 'ServiceVclSnippet', @@ -90,6 +93,7 @@ 'TlsSubscriptionManagedDnsChallenge', 'TlsSubscriptionManagedHttpChallenge', 'GetDatacentersPopResult', + 'GetDictionariesDictionaryResult', 'GetServicesDetailResult', 'GetTlsConfigurationDnsRecordResult', 'GetWafRulesRuleResult', @@ -9733,6 +9737,240 @@ def websockets(self) -> Optional[bool]: return pulumi.get(self, "websockets") +@pulumi.output_type +class ServiceVclRateLimiter(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "clientKey": + suggest = "client_key" + elif key == "httpMethods": + suggest = "http_methods" + elif key == "penaltyBoxDuration": + suggest = "penalty_box_duration" + elif key == "rpsLimit": + suggest = "rps_limit" + elif key == "windowSize": + suggest = "window_size" + elif key == "featureRevision": + suggest = "feature_revision" + elif key == "loggerType": + suggest = "logger_type" + elif key == "ratelimiterId": + suggest = "ratelimiter_id" + elif key == "responseObjectName": + suggest = "response_object_name" + elif key == "uriDictionaryName": + suggest = "uri_dictionary_name" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ServiceVclRateLimiter. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ServiceVclRateLimiter.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ServiceVclRateLimiter.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + action: str, + client_key: str, + http_methods: str, + name: str, + penalty_box_duration: int, + rps_limit: int, + window_size: int, + feature_revision: Optional[int] = None, + logger_type: Optional[str] = None, + ratelimiter_id: Optional[str] = None, + response: Optional['outputs.ServiceVclRateLimiterResponse'] = None, + response_object_name: Optional[str] = None, + uri_dictionary_name: Optional[str] = None): + """ + :param str action: The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + :param str client_key: Comma-separated list of VCL variables used to generate a counter key to identify a client + :param str http_methods: Comma-separated list of HTTP methods to apply rate limiting to + :param str name: A unique human readable name for the rate limiting rule + :param int penalty_box_duration: Length of time in minutes that the rate limiter is in effect after the initial violation is detected + :param int rps_limit: Upper limit of requests per second allowed by the rate limiter + :param int window_size: Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + :param int feature_revision: Revision number of the rate limiting feature implementation + :param str logger_type: Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + :param str ratelimiter_id: Alphanumeric string identifying the rate limiter + :param 'ServiceVclRateLimiterResponseArgs' response: Custom response to be sent when the rate limit is exceeded. Required if action is response + :param str response_object_name: Name of existing response object. Required if action is response_object + :param str uri_dictionary_name: The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + """ + pulumi.set(__self__, "action", action) + pulumi.set(__self__, "client_key", client_key) + pulumi.set(__self__, "http_methods", http_methods) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "penalty_box_duration", penalty_box_duration) + pulumi.set(__self__, "rps_limit", rps_limit) + pulumi.set(__self__, "window_size", window_size) + if feature_revision is not None: + pulumi.set(__self__, "feature_revision", feature_revision) + if logger_type is not None: + pulumi.set(__self__, "logger_type", logger_type) + if ratelimiter_id is not None: + pulumi.set(__self__, "ratelimiter_id", ratelimiter_id) + if response is not None: + pulumi.set(__self__, "response", response) + if response_object_name is not None: + pulumi.set(__self__, "response_object_name", response_object_name) + if uri_dictionary_name is not None: + pulumi.set(__self__, "uri_dictionary_name", uri_dictionary_name) + + @property + @pulumi.getter + def action(self) -> str: + """ + The action to take when a rate limiter violation is detected (one of: log*only, log*only, response_object) + """ + return pulumi.get(self, "action") + + @property + @pulumi.getter(name="clientKey") + def client_key(self) -> str: + """ + Comma-separated list of VCL variables used to generate a counter key to identify a client + """ + return pulumi.get(self, "client_key") + + @property + @pulumi.getter(name="httpMethods") + def http_methods(self) -> str: + """ + Comma-separated list of HTTP methods to apply rate limiting to + """ + return pulumi.get(self, "http_methods") + + @property + @pulumi.getter + def name(self) -> str: + """ + A unique human readable name for the rate limiting rule + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="penaltyBoxDuration") + def penalty_box_duration(self) -> int: + """ + Length of time in minutes that the rate limiter is in effect after the initial violation is detected + """ + return pulumi.get(self, "penalty_box_duration") + + @property + @pulumi.getter(name="rpsLimit") + def rps_limit(self) -> int: + """ + Upper limit of requests per second allowed by the rate limiter + """ + return pulumi.get(self, "rps_limit") + + @property + @pulumi.getter(name="windowSize") + def window_size(self) -> int: + """ + Number of seconds during which the RPS limit must be exceeded in order to trigger a violation (one of: 1, 10, 60) + """ + return pulumi.get(self, "window_size") + + @property + @pulumi.getter(name="featureRevision") + def feature_revision(self) -> Optional[int]: + """ + Revision number of the rate limiting feature implementation + """ + return pulumi.get(self, "feature_revision") + + @property + @pulumi.getter(name="loggerType") + def logger_type(self) -> Optional[str]: + """ + Name of the type of logging endpoint to be used when action is log_only (one of: azureblob, bigquery, cloudfiles, datadog, digitalocean, elasticsearch, ftp, gcs, googleanalytics, heroku, honeycomb, http, https, kafka, kinesis, logentries, loggly, logshuttle, newrelic, openstack, papertrail, pubsub, s3, scalyr, sftp, splunk, stackdriver, sumologic, syslog) + """ + return pulumi.get(self, "logger_type") + + @property + @pulumi.getter(name="ratelimiterId") + def ratelimiter_id(self) -> Optional[str]: + """ + Alphanumeric string identifying the rate limiter + """ + return pulumi.get(self, "ratelimiter_id") + + @property + @pulumi.getter + def response(self) -> Optional['outputs.ServiceVclRateLimiterResponse']: + """ + Custom response to be sent when the rate limit is exceeded. Required if action is response + """ + return pulumi.get(self, "response") + + @property + @pulumi.getter(name="responseObjectName") + def response_object_name(self) -> Optional[str]: + """ + Name of existing response object. Required if action is response_object + """ + return pulumi.get(self, "response_object_name") + + @property + @pulumi.getter(name="uriDictionaryName") + def uri_dictionary_name(self) -> Optional[str]: + """ + The name of an Edge Dictionary containing URIs as keys. If not defined or null, all origin URIs will be rate limited + """ + return pulumi.get(self, "uri_dictionary_name") + + +@pulumi.output_type +class ServiceVclRateLimiterResponse(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "contentType": + suggest = "content_type" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ServiceVclRateLimiterResponse. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ServiceVclRateLimiterResponse.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ServiceVclRateLimiterResponse.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + content: str, + content_type: str, + status: int): + pulumi.set(__self__, "content", content) + pulumi.set(__self__, "content_type", content_type) + pulumi.set(__self__, "status", status) + + @property + @pulumi.getter + def content(self) -> str: + return pulumi.get(self, "content") + + @property + @pulumi.getter(name="contentType") + def content_type(self) -> str: + return pulumi.get(self, "content_type") + + @property + @pulumi.getter + def status(self) -> int: + return pulumi.get(self, "status") + + @pulumi.output_type class ServiceVclRequestSetting(dict): @staticmethod @@ -10497,6 +10735,38 @@ def shield(self) -> str: return pulumi.get(self, "shield") +@pulumi.output_type +class GetDictionariesDictionaryResult(dict): + def __init__(__self__, *, + id: str, + name: str, + write_only: bool): + """ + :param str id: The ID of this resource. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "write_only", write_only) + + @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(name="writeOnly") + def write_only(self) -> bool: + return pulumi.get(self, "write_only") + + @pulumi.output_type class GetServicesDetailResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_fastly/service_vcl.py b/sdk/python/pulumi_fastly/service_vcl.py index a16f1b75..c05bf792 100644 --- a/sdk/python/pulumi_fastly/service_vcl.py +++ b/sdk/python/pulumi_fastly/service_vcl.py @@ -61,6 +61,7 @@ def __init__(__self__, *, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclLoggingSyslogArgs']]]] = None, name: Optional[pulumi.Input[str]] = None, product_enablement: Optional[pulumi.Input['ServiceVclProductEnablementArgs']] = None, + rate_limiters: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRateLimiterArgs']]]] = None, request_settings: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRequestSettingArgs']]]] = None, response_objects: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclResponseObjectArgs']]]] = None, reuse: Optional[pulumi.Input[bool]] = None, @@ -176,6 +177,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if product_enablement is not None: pulumi.set(__self__, "product_enablement", product_enablement) + if rate_limiters is not None: + pulumi.set(__self__, "rate_limiters", rate_limiters) if request_settings is not None: pulumi.set(__self__, "request_settings", request_settings) if response_objects is not None: @@ -624,6 +627,15 @@ def product_enablement(self) -> Optional[pulumi.Input['ServiceVclProductEnableme def product_enablement(self, value: Optional[pulumi.Input['ServiceVclProductEnablementArgs']]): pulumi.set(self, "product_enablement", value) + @property + @pulumi.getter(name="rateLimiters") + def rate_limiters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRateLimiterArgs']]]]: + return pulumi.get(self, "rate_limiters") + + @rate_limiters.setter + def rate_limiters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRateLimiterArgs']]]]): + pulumi.set(self, "rate_limiters", value) + @property @pulumi.getter(name="requestSettings") def request_settings(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRequestSettingArgs']]]]: @@ -772,6 +784,7 @@ def __init__(__self__, *, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclLoggingSyslogArgs']]]] = None, name: Optional[pulumi.Input[str]] = None, product_enablement: Optional[pulumi.Input['ServiceVclProductEnablementArgs']] = None, + rate_limiters: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRateLimiterArgs']]]] = None, request_settings: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRequestSettingArgs']]]] = None, response_objects: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclResponseObjectArgs']]]] = None, reuse: Optional[pulumi.Input[bool]] = None, @@ -902,6 +915,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if product_enablement is not None: pulumi.set(__self__, "product_enablement", product_enablement) + if rate_limiters is not None: + pulumi.set(__self__, "rate_limiters", rate_limiters) if request_settings is not None: pulumi.set(__self__, "request_settings", request_settings) if response_objects is not None: @@ -1400,6 +1415,15 @@ def product_enablement(self) -> Optional[pulumi.Input['ServiceVclProductEnableme def product_enablement(self, value: Optional[pulumi.Input['ServiceVclProductEnablementArgs']]): pulumi.set(self, "product_enablement", value) + @property + @pulumi.getter(name="rateLimiters") + def rate_limiters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRateLimiterArgs']]]]: + return pulumi.get(self, "rate_limiters") + + @rate_limiters.setter + def rate_limiters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRateLimiterArgs']]]]): + pulumi.set(self, "rate_limiters", value) + @property @pulumi.getter(name="requestSettings") def request_settings(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ServiceVclRequestSettingArgs']]]]: @@ -1546,6 +1570,7 @@ def __init__(__self__, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclLoggingSyslogArgs']]]]] = None, name: Optional[pulumi.Input[str]] = None, product_enablement: Optional[pulumi.Input[pulumi.InputType['ServiceVclProductEnablementArgs']]] = None, + rate_limiters: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclRateLimiterArgs']]]]] = None, request_settings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclRequestSettingArgs']]]]] = None, response_objects: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclResponseObjectArgs']]]]] = None, reuse: Optional[pulumi.Input[bool]] = None, @@ -1685,6 +1710,7 @@ def _internal_init(__self__, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclLoggingSyslogArgs']]]]] = None, name: Optional[pulumi.Input[str]] = None, product_enablement: Optional[pulumi.Input[pulumi.InputType['ServiceVclProductEnablementArgs']]] = None, + rate_limiters: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclRateLimiterArgs']]]]] = None, request_settings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclRequestSettingArgs']]]]] = None, response_objects: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclResponseObjectArgs']]]]] = None, reuse: Optional[pulumi.Input[bool]] = None, @@ -1750,6 +1776,7 @@ def _internal_init(__self__, __props__.__dict__["logging_syslogs"] = logging_syslogs __props__.__dict__["name"] = name __props__.__dict__["product_enablement"] = product_enablement + __props__.__dict__["rate_limiters"] = rate_limiters __props__.__dict__["request_settings"] = request_settings __props__.__dict__["response_objects"] = response_objects __props__.__dict__["reuse"] = reuse @@ -1822,6 +1849,7 @@ def get(resource_name: str, logging_syslogs: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclLoggingSyslogArgs']]]]] = None, name: Optional[pulumi.Input[str]] = None, product_enablement: Optional[pulumi.Input[pulumi.InputType['ServiceVclProductEnablementArgs']]] = None, + rate_limiters: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclRateLimiterArgs']]]]] = None, request_settings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclRequestSettingArgs']]]]] = None, response_objects: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ServiceVclResponseObjectArgs']]]]] = None, reuse: Optional[pulumi.Input[bool]] = None, @@ -1912,6 +1940,7 @@ def get(resource_name: str, __props__.__dict__["logging_syslogs"] = logging_syslogs __props__.__dict__["name"] = name __props__.__dict__["product_enablement"] = product_enablement + __props__.__dict__["rate_limiters"] = rate_limiters __props__.__dict__["request_settings"] = request_settings __props__.__dict__["response_objects"] = response_objects __props__.__dict__["reuse"] = reuse @@ -2206,6 +2235,11 @@ def name(self) -> pulumi.Output[str]: def product_enablement(self) -> pulumi.Output[Optional['outputs.ServiceVclProductEnablement']]: return pulumi.get(self, "product_enablement") + @property + @pulumi.getter(name="rateLimiters") + def rate_limiters(self) -> pulumi.Output[Optional[Sequence['outputs.ServiceVclRateLimiter']]]: + return pulumi.get(self, "rate_limiters") + @property @pulumi.getter(name="requestSettings") def request_settings(self) -> pulumi.Output[Optional[Sequence['outputs.ServiceVclRequestSetting']]]: diff --git a/sdk/python/setup.py b/sdk/python/setup.py index ff857267..793d0a88 100644 --- a/sdk/python/setup.py +++ b/sdk/python/setup.py @@ -38,6 +38,7 @@ def readme(): setup(name='pulumi_fastly', + python_requires='>=3.7', version=VERSION, description="A Pulumi package for creating and managing fastly cloud resources.", long_description=readme(), From 4efbd2f8d0f6efab0b67428ee2e615d642a95ad8 Mon Sep 17 00:00:00 2001 From: aq17 Date: Thu, 20 Apr 2023 15:20:06 -0700 Subject: [PATCH 3/3] make tfgen --- ...2-Avoid-panic-in-base_fastly_service.patch | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 patches/0002-Avoid-panic-in-base_fastly_service.patch diff --git a/patches/0002-Avoid-panic-in-base_fastly_service.patch b/patches/0002-Avoid-panic-in-base_fastly_service.patch new file mode 100644 index 00000000..1b4f29f8 --- /dev/null +++ b/patches/0002-Avoid-panic-in-base_fastly_service.patch @@ -0,0 +1,28 @@ +From 00673c35cf1c68df9cb24621d7d47e60a3d8fe47 Mon Sep 17 00:00:00 2001 +From: aq17 +Date: Thu, 20 Apr 2023 15:17:05 -0700 +Subject: [PATCH] Avoid panic in base_fastly_service + +--- + fastly/base_fastly_service.go | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/fastly/base_fastly_service.go b/fastly/base_fastly_service.go +index c0c4c6f6..300676db 100644 +--- a/fastly/base_fastly_service.go ++++ b/fastly/base_fastly_service.go +@@ -165,7 +165,11 @@ func validateUniqueNames(block string) func(_ context.Context, rd *schema.Resour + return func(_ context.Context, rd *schema.ResourceDiff, _ any) error { + names := make(map[string]int) + ++ // Avoid panic in rd.GetRawConfig() + c := rd.GetRawConfig() ++ if c.IsNull() { ++ return nil ++ } + m := c.AsValueMap() + s, ok := m[block] + if ok { +-- +2.39.1 +